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

PENULIS :

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 situs github tokopedia.

tokopedia/Bug-Bounty
Tokopedia Bug Bounty Policy. Contribute to tokopedia/Bug-Bounty development by creating an account on GitHub. github.com

[*] Self-XSS

Self-XSS (Cross Site Scripting) merupakan teknik XSS (Cross Site Scripting) yang berjalan pada pengguna itu sendiri,artinya XSS ini tidak akan dapat berjalan pada pengguna lainnya. Alasan Self-XSS tidak dapat bekerja oleh pengguna lainnya dikarenakan Self-XSS memerlukan autentikasi untuk dapat menjalankan script payload XSS. Oleh sebab itu juga banyak program Bug Bounty yang tidak memasukan Self-XSS ke dalam scope dengan alasan Self-XSS tidak dapat di exploitasi untuk pengguna lainnya.

[*] Self-XSS dan ClickJacking Out of Scope

Sebelum masuk kedalam POC,saya ingin bercerita sedikit bagaimana Tokopedia dapat menerima Self-XSS yang saya temukan dalam program Bug-Bounty mereka.

Didalam “Out of Scope Vulnerability” yang dibuat Tokopedia, Self-XSS bukan merupakan scope pada program mereka. Tetapi disana terdapat catatan yaitu : Tokopedia membutuhkan bukti bagaimana Self-XSS dapat di exploitasi kepada pengguna lainnya. Dari Catatan inilah saya mulai mencari tau bagaimana mengeksploitasi Self-XSS agar dapat ber-impact pada pengguna lainnya.

Setelah lama mencari akhirnya saya menemukan channel Youtube “ Security Fest ” yang membahas tentang Self XSS pada salah satu videonya yaitu Self XSS we’re not so different you and I — Mathias Karlsson — Security Fest 2017 .

Pada video tersebut terlihat jika ingin Self-XSS berjalan pada pengguna lainnya ada beberapa syarat yang harus dipenuhi. Salah satunya yaitu situs harus mempunyai kelemahan bug ClickJacking. Apa itu ClickJacking ? ClickJacking merupakan bug dengan severity rendah karena bug ini hanya dimanfaatkan untuk menampilkan halaman web yang mempunyai celah ClickJacking dari website lainnya. Biasanya bug ClickJacking digunakan untuk memanipulasi website yang memiliki celah tersebut didalam website attacker dengan mengatur tata letak sesuai keinginan attacker untuk dapat melakukan suatu tindakan yang berbahaya pada website yang memiliki celah. 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

Pada website tokopedia terdapat Self-XSS pada fitur pengaturan “Pengiriman Alamat Toko”.
Bug XSS ini hanya dapat menginput payload melalui Aplikasi Android Tokopedia dikarenakan jika melalui website secara langsung akan ada divalidasi inputan yang mengharuskan menuliskan alamat toko sesuai daerah yang kita pilih.

Input XSS pada Aplikasi Android Tokopedia

Masuk ke Pengaturan pada tab menu Atur Toko pilih Pengiriman.

Menu Atur Toko — Pengiriman

Input payload <script>alert(1);</script> .

Input Alamat Toko

Membuka URL https://www.tokopedia.com/myshop-editor.pl?tab=shipping” XSS tereksekusi.

Self XSS pada web Tokopedia

[*] Proof Of Concept Self-XSS to Get User Info

Bug 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 web user tokopedia yang lainnya lihat 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.

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

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.

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) :

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

Kumpulan Seluruh IFRAME pada Web Attacker

Setelah sudah mempunyai 3 iframe selanjutnya menjalankannya iframe secara berurutan, masing masing iframe di atur waktu eksekusi.

  1. IFRAME 1 mengambil data informasi dari halaman akun target.
  2. IFRAME 2 melakukan csrf logout dari akun target dan login ke akun attacker.
  3. IFRAME 3 melakukan tugasnya untuk mengambil source IFRAME 1 lalu mengirimkan alamat user target ke server attacker.
  4. Data user target sudah tersimpan pada server attacker.

Data 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
  • 11/03/2018 — Apresiasi Sertifikat

[*] Refrensi

Escalating Low Severity Bugs To High Severity
This time I am gonna share about some ways that I have learned & applied while participating in bounty programs and was… www.noob.ninja

[*] Catatan

Tulisan ini sudah mendapatkan persetujuan dari pihak terkait sebelum di publikasikan,sesuai dengan kesepakatan yang dibuat oleh pihak terkait.

bikin POCnya rafi achmad :hah: