Halo semuanya! Hari ini saya akan berbagi pengalaman bagaimana saya berhasil mendapatkan reward €500 dari program bug bounty melalui penemuan kerentanan XSS (Cross-Site Scripting).
Apa itu XSS?
XSS (Cross-Site Scripting) adalah kerentanan keamanan web di mana penyerang dapat menyisipkan kode berbahaya (biasanya JavaScript) ke dalam situs web yang kemudian dieksekusi di browser pengguna lain.
Tiga Jenis Utama XSS:
| Jenis XSS | Penjelasan | Tingkat Risiko |
|---|---|---|
| Reflected XSS | Kode berbahaya dikirim melalui permintaan (misalnya URL) dan langsung “dipantulkan” ke halaman respons tanpa validasi yang tepat. | Tinggi |
| Stored XSS | Kode berbahaya disimpan dalam database situs web (komentar, profil, dll) dan dieksekusi setiap kali pengguna mengakses halaman yang memuat data tersebut. | Sangat Tinggi |
| DOM-based XSS | Terjadi ketika JavaScript di sisi klien memodifikasi DOM dengan cara yang tidak aman berdasarkan data yang berasal dari pengguna. | Sedang-Tinggi |
Proof of Concept (POC)
Berikut adalah langkah-langkah bagaimana saya menemukan dan membuktikan kerentanan XSS:
Langkah 1: Reconnaissance
Pertama saya mengakses website target, redacted.com dan melakukan information gathering menyeluruh.
Langkah 2: Identifikasi Target
Setelah melakukan reconnaissance, saya menemukan bahwa target menampilkan beberapa campaign di URL:
https://redacted.com/dashboard/signup/campaign/id
Langkah 3: Injeksi Payload
Saya mencoba memasukkan payload XSS berikut:
<math href="javascript:alert(document.cookie)">CLICKME</math>
Langkah 4: Verifikasi
Ternyata payload yang saya masukkan berhasil tereflect pada website, dan ketika tombol CLICKME diklik, payload XSS berhasil tereksekusi!
Analisis Teknis
Serangan XSS ini menggunakan teknik yang cukup menarik:
- Tag
<math>adalah tag HTML yang valid dan umumnya digunakan untuk markup matematika dalam format MathML. - Dalam POC ini, tag
<math>disalahgunakan dengan menambahkan atributhrefyang berisi protokoljavascript:diikuti dengan kode JavaScriptalert(document.cookie). - Ketika pengguna mengklik teks “CLICKME”, browser akan mengeksekusi kode JavaScript yang ditentukan dalam atribut
href. - Fungsi
alert(document.cookie)menampilkan popup yang berisi cookie dari domain saat ini, yang bisa berisi informasi sesi pengguna yang sensitif.
Mengapa Serangan Ini Berhasil?
- Beberapa browser memperlakukan tag
<math>seperti tag navigasi lainnya (seperti<a>) ketika memiliki atributhref - Link dengan protokol
javascript:akan menjalankan kode JavaScript ketika diklik - Website target tidak menerapkan validasi input dengan baik, sehingga memungkinkan penyisipan kode berbahaya
Mitigasi dan Perbaikan
Untuk mencegah kerentanan XSS seperti ini, developer sebaiknya:
- Implementasikan validasi input yang ketat
- Terapkan encoding output yang tepat
- Gunakan Content-Security-Policy (CSP)
- Aktifkan X-XSS-Protection header
- Sanitasi data pengguna sebelum ditampilkan
Kesimpulan
Kerentanan XSS masih banyak ditemukan di berbagai website, bahkan yang memiliki tingkat keamanan tinggi sekalipun. Sebagai security researcher, penting untuk terus mempelajari teknik-teknik baru dalam menemukan celah keamanan.
Temuan ini berhasil dilaporkan melalui program bug bounty dan mendapatkan reward sebesar €500.
Disclaimer: Artikel ini dibuat untuk tujuan edukasi. Selalu dapatkan izin tertulis sebelum melakukan pengujian keamanan pada website yang bukan milik Anda.
