Cross-site request forgery (CSRF) adalah kerentanan keamanan berbasis web yang sangat populer. Melalui serangan CSRF, penyerang menipu pengguna untuk mengeksekusi atau melakukan aktivitas yang mengubah status, seperti memperbarui, menghapus, atau membuat permintaan tanpa disadari.
Serangan CSRF umumnya dimulai dengan teknik rekayasa sosial berbahaya, di mana penyerang mengirim atau menyematkan tautan permintaan berbahaya melalui obrolan, file HTML, dll., dan menunggu korban mengkliknya.
Sebagaimana dinyatakan dalam dokumentasi resmi OWASP, serangan CSRF dikenal dengan banyak nama, seperti XSRF, “Sea Surf”, Session Riding, dan hostile linking.
Apa Dampak Nyata Yang Diakibatkan?
Dampak serangan CSRF tergantung langsung pada sifat aplikasi target dan fitur/fungsi yang rentan.
Misalnya, jika aplikasi perbankan rentan terhadap CSRF, peretas dapat melakukan serangan CSRF untuk memperbarui/menghapus detail pengguna, meminta transfer dana, atau mengubah kata sandi tanpa sepengetahuan pengguna. Hal ini dapat mengakibatkan kerugian finansial bagi korban atau akun mereka diambil alih.
Oleh karena itu, dampak serangan ini dapat berkisar dari pembaruan detail sederhana hingga transfer dana, tergantung pada aplikasinya.
Kondisi untuk Serangan CSRF
Pertama, mari kita bahas dua kondisi penting yang dibutuhkan penyerang untuk melakukan serangan CSRF dengan sukses.
- Penanganan sesi berbasis cookie: Aplikasi memvalidasi session cookies yang dilampirkan pada permintaan untuk memvalidasi permintaan pengguna yang otentik. Artinya, penyerang hanya perlu memalsukan bagian yang tersisa dari permintaan HTTP. Membuka payload CSRF di browser terotentikasi yang sama akan secara otomatis menambahkan session cookies ke dalamnya, membuat permintaan pengguna yang sah dan lengkap.
- Tidak ada parameter permintaan pengguna yang tidak dapat ditebak: Tidak adanya parameter acak yang tidak dapat ditebak dalam permintaan HTTP membuat permintaan HTTP rentan terhadap pemalsuan dan CSRF. Hal ini memungkinkan penyerang berhasil memalsukan permintaan HTTP target dengan merujuk ke contoh permintaan HTTP yang sah.
Mengurangi Risiko Serangan CSRF
1. Gunakan Implementasi CSRF Bawaan atau yang Ada untuk Perlindungan CSRF
Kerangka kerja pengembangan populer seperti .Net, Java Spring, Django Python, dan Flask memiliki dukungan bawaan sebagai properti yang dapat dikonfigurasi.
Banyak dari kerangka pengembangan populer ini mendukung pertahanan pola token Synchronizer untuk CSRF. Selalu disarankan untuk meneliti dukungan bawaan yang ada untuk pertahanan CSRF dalam kerangka kerja ini sebelum menerapkan implementasi kustom apa pun untuk hal yang sama.
2. Mitigasi Berbasis Token
Token CSRF yang unik/tidak dapat diprediksi harus dibuat di sisi server per sesi. Saat klien memicu permintaan, server harus memverifikasi keberadaan dan validitas token CSRF dalam permintaan dengan membandingkannya dengan token yang ditemukan di sesi pengguna.
3. Pengiriman Cookie Ganda Berpola
Ini adalah solusi stateless untuk perlindungan CSRF. Dalam metode pengiriman cookie ganda, nilai acak dikirim dalam cookie dan parameter permintaan. Server memvalidasi keaslian permintaan dengan mengonfirmasi bahwa kedua nilai tersebut sama. Untuk mencapai ini, token CSRF acak yang aman dibuat dan disimpan sebagai cookie ketika pengguna masuk ke aplikasi.
Setiap kali pengguna mengirimkan permintaan server, token CSRF ini dikirim sebagai cookie dan juga ditambahkan sebagai bidang input tersembunyi ke dalam HTML. Jika keduanya cocok, maka server mengautentikasi permintaan, jika tidak maka akan ditolak.
Selengkapnya: Medium Faun.pub