it-swarm-id.com

CSRF dengan JSON POST

Saya bermain-main dengan aplikasi uji yang menerima permintaan dan respons JSON juga JSON. Saya mencoba melakukan CSRF untuk transaksi yang hanya menerima data JSON dengan metode POST dalam permintaan. Aplikasi membuat kesalahan jika URL diminta menggunakan metode get (mis. Dalam <script src=).

Juga agar serangan menjadi berarti, yaitu transaksi yang harus dilalui, saya harus mengirim data dalam permintaan. Jika saya membuat halaman saya sendiri dan mengirim permintaan JSON, cookie tidak dapat bepergian dan karenanya server mengembalikan pesan kesalahan yang tidak diautentikasi.

Tidak ada token acak dalam permintaan asli oleh server.

Saya bertanya-tanya apakah ada cara untuk melakukan serangan CSRF yang berhasil dalam skenario ini.

32
Sachin Kumar

Paling tidak Anda harus memeriksa Content-Type: application/json atas permintaan.

Tidak mungkin mendapatkan POSTed <form> untuk mengirim permintaan dengan Content-Type: application/json. Tetapi Anda dapat mengirimkan formulir dengan struktur JSON yang valid di tubuh sebagai enctype="text/plain".

Tidak mungkin untuk melakukan cross-Origin ( CORS ) XMLHttpRequest POST dengan Content-Type: application/json terhadap server non-lintas-Asal-sadar karena ini akan menyebabkan permintaan ‘HTTP pre-flighting’ untuk menyetujui terlebih dahulu. Tetapi Anda dapat mengirim cross-Origin XMLHttpRequest POST withCredentials jika ya text/plain.

Begitu pun dengan application/json memeriksa, Anda bisa sangat dekat dengan XSRF, jika tidak sepenuhnya ada. Dan perilaku yang Anda andalkan untuk membuat rasa aman itu agak kabur, dan masih dalam tahap Draft Kerja; mereka bukan jaminan keras dan cepat untuk masa depan web.

Ini mungkin rusak, misalnya jika JSON baru enctype ditambahkan ke formulir di versi HTML yang akan datang. (WHATWG menambahkan text/plain enctype ke HTML5 dan pada awalnya mencoba juga untuk menambahkan text/xml, jadi bukan tidak mungkin bahwa ini mungkin terjadi.) Anda meningkatkan risiko kompromi dari bug browser dan plugin yang lebih kecil dan lebih kecil dalam implementasi CORS.

Jadi sementara Anda mungkin bisa lolos dengan itu untuk saat ini, saya benar-benar tidak akan merekomendasikan maju tanpa sistem token anti-XSRF yang tepat.

37
bobince

Ini dapat dieksploitasi menggunakan Flash, menurut https://code.google.com/p/browsersec/wiki/Part2#Same-Origin_policy_for_Flash

Kemampuan untuk membuat lintas-domain lintas HTTP MENDAPATKAN dan POST permintaan melalui tumpukan browser, dengan kendala lebih sedikit daripada biasanya terlihat di tempat lain di browser. Ini dicapai melalui API URLRequest. Fungsionalitas, yang paling penting, termasuk kemampuan untuk menentukan nilai-nilai Jenis Konten yang sewenang-wenang, dan untuk mengirim muatan biner.

Saya belum mengujinya sendiri tetapi kedengarannya masuk akal.

Pembaruan: Sepertinya rilis Flash terbaru tidak lagi mengizinkan permintaan lintas-domain secara default, menjadikan ini tidak dapat dieksploitasi.

Pembaruan # 2: namun ada kerentanan jangka panjang dalam penanganan 307 pengalihan yang berarti ini masih dapat dieksploitasi

7
albinowax