October 9, 2026
Reflected XSS di Portal Pemerintah Kota [REDACTED] via Parameter Tahun pada Root Domain dan…
1. Ringkasan Eksekutif (Executive Summary / TL;DR)

By Mencari si dia
3 min read
1. Ringkasan Eksekutif (Executive Summary / TL;DR)
- Jenis Kerentanan: Reflected Cross-Site Scripting (XSS)
- Vektor: Parameter URL (
datatahundantahun) - Dampak: Eksekusi JavaScript sewenang-wenang di browser korban, pencurian cookie sesi, dan potensi session hijacking.
- Status: Unfixed (Dilaporkan, belum ada balasan, belum diperbaiki)
- Severity: Medium
2. Pendahuluan (Introduction)
Halo, saya Primandito Adi Setiya, seorang bug hunter. Pada 13 November 2025, saya sedang melakukan vulnerability testing pada portal layanan publik milik Pemerintah Kota [REDACTED].
Saat menguji fitur filter berbasis tahun pada beberapa halaman, saya menemukan celah Reflected Cross-Site Scripting (XSS). Celah ini muncul karena input dari parameter URL tidak disanitasi dengan benar sebelum ditampilkan kembali ke dalam halaman HTML. Yang menarik, celah ini ditemukan di dua lokasi berbeda: root domain dan subdomain.
Artikel ini akan membahas bagaimana saya menemukannya, cara mereproduksinya, hingga dampak dari kerentanan ini.
3. Detail Kerentanan (Vulnerability Details)
Aplikasi menerima input dari parameter URL (seperti datatahun dan tahun) dan memantulkannya (reflect) ke dalam respons halaman HTML tanpa melakukan output encoding yang tepat.
Penyerang dapat menyisipkan payload HTML/JavaScript yang akan dieksekusi oleh browser korban. Dalam kasus ini, saya menggunakan trik mixed-case (<ScRiPt>) untuk menghindari filter sanitasi dasar yang mungkin memblokir tag <script> huruf kecil secara langsung.
4. Langkah Reproduksi (Steps to Reproduce / PoC)
Berikut adalah langkah-langkah untuk mereproduksi kerentanan ini:
Step 1: Identifikasi Target 1 (Root Domain)
Buka halaman penghargaan pada target:
https://redactedkota.go.id/penghargaan/tahun
Step 2: Injeksi Payload pada Target 1
Sisipkan payload berikut ke dalam parameter datatahun pada URL:
<ScRiPt>alert(document.domain)</ScRiPt><ScRiPt>alert(document.domain)</ScRiPt>(Payload ini di-encode menjadi: ?datatahun=%3CScRiPt%3Ealert(document.domain)%3C/ScRiPt%3E&page=1&per-page=1)
Step 3: Eksekusi & Verifikasi Target 1
Setelah URL diakses, browser akan memproses payload tersebut. Muncul pop-up alert box yang menampilkan nama domain target (redactedkota.go.id), membuktikan bahwa JavaScript berhasil dieksekusi.
Step 4: Identifikasi Target 2 (Subdomain)
Lakukan hal yang sama pada halaman produk hukum di subdomain target:
https://redacted.redactedkota.go.id/produk-hukum/tahun
Sisipkan payload yang sama ke dalam parameter tahun.
Step 5: Status Perbaikan (Post-Fix) Hingga writeup ini dipublikasikan (9 Oktober 2026), pihak terkait belum memberikan respons dan kerentanan ini belum diperbaiki. Payload yang sama masih dapat tereksekusi.
5. Dampak (Impact)
Kerentanan XSS ini dapat dimanfaatkan penyerang untuk:
- Pencurian Cookie/Session: Mencuri cookie sesi pengguna yang sedang login, yang berujung pada Account Takeover (jika cookie tidak di-set
HttpOnly). - Phishing: Memanipulasi tampilan halaman untuk menipu pengguna agar memasukkan data sensitif.
- Defacement: Mengubah tampilan halaman web sementara.
- Redirect Berbahaya: Mengarahkan pengguna ke situs berbahaya yang dikendalikan penyerang.
6. Rekomendasi Perbaikan (Remediation)
Untuk mencegah kerentanan ini terulang, ada tiga langkah krusial yang harus dilakukan:
- Output Encoding: Selalu lakukan HTML entity encoding (mengubah karakter <, >, ", ', &) pada semua input yang akan ditampilkan kembali ke halaman HTML.
- Validasi Input: Batasi karakter yang diizinkan pada parameter URL dan tolak input yang mencurigakan (misalnya, tolak karakter < dan >).
- Content Security Policy (CSP): Terapkan CSP yang kuat untuk memitigasi dampak XSS jika terjadi.
7. Timeline (Kronologi)
- 13 November 2025: Menemukan kerentanan dan melakukan verifikasi PoC.
- 13 November 2025: Melaporkan kerentanan ke pihak terkait.
- [Hingga 9 Oktober 2026]: Tidak ada balasan atau konfirmasi dari pihak terkait.
- 9 Oktober 2026: Melakukan pengecekan ulang, kerentanan belum diperbaiki. Writeup dipublikasikan sebagai dokumentasi portofolio dan pengingat akan pentingnya responsible disclosure.
8. Penutup & About Me
Kerentanan ini menjadi pengingat bahwa sanitasi input pada fitur filter seringkali terlewat, bahkan pada domain utama dan subdomain sekaligus. Meskipun laporan ini tidak mendapatkan balasan dan belum diperbaiki, saya tetap mendokumentasikannya sebagai bagian dari portofolio dan bukti kontribusi saya dalam menjaga keamanan siber.
Saya berharap pihak terkait dapat segera menindaklanjuti laporan ini demi keamanan data dan pengguna. Bagi para bug hunter, tetap semangat dan jangan pernah berhenti belajar. Happy hunting!