it-swarm-vi.com

CSRF với JSON POST

Tôi đang chơi xung quanh với một ứng dụng thử nghiệm chấp nhận các yêu cầu và phản hồi JSON cũng là JSON. Tôi đang cố gắng thực hiện CSRF cho một giao dịch chỉ chấp nhận dữ liệu JSON với POST trong yêu cầu. Ứng dụng sẽ ném lỗi nếu URL được yêu cầu sử dụng phương thức get (ví dụ: trong <script src=).

Ngoài ra, để cuộc tấn công có ý nghĩa là giao dịch được thực hiện, tôi phải gửi dữ liệu trong yêu cầu. Nếu tôi tạo trang riêng của mình và gửi các yêu cầu JSON, cookie sẽ không di chuyển và do đó máy chủ trả về thông báo lỗi không được xác thực.

Không có mã thông báo ngẫu nhiên trong yêu cầu ban đầu của máy chủ.

Tôi đã tự hỏi liệu có cách nào để thực hiện một cuộc tấn công CSRF thành công trong kịch bản này.

32
Sachin Kumar

Ít nhất bạn phải kiểm tra Content-Type: application/json theo yêu cầu.

Không thể nhận được BÀI <form> để gửi yêu cầu với Content-Type: application/json. Nhưng bạn có thể gửi biểu mẫu có cấu trúc JSON hợp lệ trong phần thân là enctype="text/plain".

Không thể thực hiện một Nguồn gốc chéo ( CORS ) XMLHttpRequest POST với Content-Type: application/json đối với máy chủ không nhận biết nguồn gốc chéo vì điều này sẽ gây ra yêu cầu OPT HTTP HTTP TÙY CHỌN trước chuyến bay để phê duyệt trước. Nhưng bạn có thể gửi một XMLHttpRequest POST withCredentials nếu nó là text/plain.

Vì vậy, ngay cả với application/json kiểm tra, bạn có thể đến gần XSRF, nếu không hoàn toàn ở đó. Và các hành vi mà bạn đang dựa vào để đảm bảo an toàn có phần mơ hồ và vẫn đang trong giai đoạn Dự thảo làm việc; chúng không phải là sự bảo đảm khó khăn và nhanh chóng cho tương lai của web.

Chúng có thể bị hỏng, ví dụ: nếu JSON enctype mới được thêm vào biểu mẫu trong phiên bản HTML trong tương lai. (WHATWG đã thêm text/plain enctype vào HTML5 và ban đầu cũng đã thử thêm text/xml, do đó, không có vấn đề gì về điều này có thể xảy ra.) Bạn tăng nguy cơ thỏa hiệp từ các trình duyệt nhỏ hơn, lỗi hơn và các lỗi plugin khi triển khai CORS.

Vì vậy, trong khi bạn có thể thoát khỏi nó ngay bây giờ, tôi hoàn toàn không khuyên bạn nên tiếp tục mà không có hệ thống mã thông báo chống XSRF thích hợp.

37
bobince

Điều này có thể khai thác bằng Flash, theo https://code.google.com.vn/p/browsersec/wiki/Part2#Same-Origin_policy_for_Flash

Khả năng tạo HTTP GET tên miền chéo mang cookie và POST yêu cầu thông qua ngăn xếp trình duyệt, với ít ràng buộc hơn thường thấy ở các trình duyệt khác. Điều này đạt được thông qua API URLRequest. đáng chú ý nhất, bao gồm khả năng chỉ định các giá trị Kiểu nội dung tùy ý và gửi tải trọng nhị phân.

Tôi đã không tự mình kiểm tra nhưng nó có vẻ hợp lý.

Cập nhật: Có vẻ như các bản phát hành Flash mới nhất không còn cho phép bất kỳ yêu cầu tên miền chéo nào theo mặc định, khiến điều này không thể mở rộng.

Cập nhật # 2: tuy nhiên có một lỗ hổng lâu dài trong việc xử lý flash của 307 chuyển hướng, điều đó có nghĩa là điều này vẫn có thể khai thác được

7
albinowax