Lab 6: Cross-Site Request Forgery (CSRF) in funds transfer feature
Aplikasi E-Wallet "Bankku Online" memproses transfer saldo pengguna hanya berdasarkan Cookie Session tanpa token Anti-CSRF.
Objective:
Eksploitasi formulir exploit server untuk mengirimkan permintaan POST transfer dana rahasia saat korban mengunjungi tautan eksploitasi.
Fitur transfer dana pada Bankku Online mengandalkan autentikasi Cookie Session biasa. Apabila korban yang sedang login mengunjungi website eksternal penyerang (Exploit Server), website penyerang dapat secara otomatis mengirimkan HTTP POST request atas nama korban.
CSRF memanfaatkan mekanisme browser yang otomatis melampirkan cookie autentikasi pada request lintas domain. CodeBook melindunginya dengan header Anti-CSRF Token unik dan cookie SameSite=Strict.
VULNERABLE CODE
// KODE RENTAN (Tanpa CSRF Token & SameSite Cookie)
app.post('/api/transfer', (req, res) => {
// DANGEROUS: Mengandalkan cookie otomatis browser tanpa verifikasi token unik!
const user = req.session.user;
transferFunds(user.id, req.body.recipient, req.body.amount);
});SECURE CODEBOOK IMPLEMENTATION
// KODE AMAN CODEBOOK STANDARD (Anti-CSRF Token Header + SameSite=Strict)
app.post('/api/transfer', (req, res) => {
// SAFE 1: Verifikasi token Anti-CSRF kriptografi dari request header
if (!req.headers['x-csrf-token'] || !verifyToken(req.headers['x-csrf-token'])) {
return res.status(403).send('Forbidden: CSRF Token Missing');
}
transferFunds(req.user.id, req.body.recipient, req.body.amount);
});