Saya kembali lagi akan membuat POC mengenai bagaimana saya menemukan kerentanan Open Redirect pada sebuah target yang menggunakan mekanisme domain allowlist. Langkah pertama yang saya lakukan adalah melakukan reconnaissance dan mencari endpoint URL yang digunakan untuk mengarahkan pengguna ke halaman lain.
Setelah melakukan beberapa pengujian, saya menemukan sebuah endpoint dengan pola seperti berikut.
https://target.com/sso/page?redirect_url=https://page.target.com
Endpoint tersebut menggunakan parameter redirect_url untuk menentukan halaman tujuan setelah proses autentikasi selesai.
Uji coba pertama yang saya lakukan adalah dengan mengganti nilai parameter redirect_url ke domain eksternal. Namun percobaan ini gagal karena aplikasi menampilkan respon bahwa alamat website tidak valid atau tidak terdaftar pada sistem.
?redirect_url=https://page.evil.com
Saya juga mencoba beberapa metode bypass lain seperti Unicode encoding dan variasi teknik manipulasi URL lainnya, tetapi hasilnya tetap sama dan tidak berhasil melewati validasi sistem.
Setelah mencoba berbagai metode bypass tersebut, saya kemudian mencoba pendekatan lain dengan sedikit bantuan OSINT menggunakan mesin pencari Google serta teknik Google dork.
site:target.com "redirect_url="
Dari hasil pencarian tersebut, saya menemukan banyak URL yang menggunakan parameter redirect_url untuk melakukan redirect ke halaman tertentu.
Hal yang menarik adalah sebagian besar URL yang ditemukan memiliki Top Level Domain (TLD) yang cukup unik, yaitu .edu. Dari sini saya mulai berasumsi bahwa kemungkinan sistem target memiliki daftar allowlist yang hanya memeriksa keberadaan domain tertentu.
Saya kemudian mencoba teknik lain dengan menambahkan string .edu di depan atau di belakang domain yang saya kontrol, yaitu evil.com. Setelah melakukan pengujian, payload tersebut ternyata berhasil melewati validasi sistem.
https://target.com/sso/page?redirect_url=https://page.evil.com/.edu
/?redirect_url=https://.edu.evil.com
Pada payload pertama, aplikasi menganggap URL tersebut valid karena mengandung string .edu, padahal domain sebenarnya tetap berada pada evil.com. Sedangkan pada payload kedua, .edu hanya menjadi bagian dari subdomain yang berada di bawah domain evil.com.
Dengan kata lain, URL yang saya arahkan sebenarnya tetap menuju domain eksternal yang tidak termasuk dalam allowlist sistem.
Artikel ini dibuat untuk tujuan edukasi agar pengembang dapat menerapkan mekanisme domain allowlist dengan lebih ketat dan tidak hanya melakukan validasi berdasarkan keberadaan string domain tertentu saja.
