IDOR: Manipulate Other User’s Cart and Wishlist on Tokopedia

1 0

Hi, Fadhil di sini,

Ini adalah artikel pertama saya di blog Sumatra Cyber Security dan merupakan writeup dari temuan celah keamanan yang pada salah satu e-commerce di Indonesia. Kategori celah keamanan pada artikel ini yaitu IDOR. Untuk yang belum tahu, IDOR adalah celah keamanan yang memungkinan seseorang dapat mengakses, mengedit, atau menghapus objek di aplikasi secara langsung tanpa adanya pengecekan otorisasi. Untuk lebih jelas bisa dilihat pada ilustrasi di bawah.

Screen Shot 2016-12-10 at 02.15.32.png
Gambar 1. Ilustrasi IDOR [1]

Description

Seperti yang sudah disebutkan di atas mengenai IDOR, artikel ini akan menjelaskan celah IDOR yang terletak pada ID Pengguna dan ID Keranjang dalam beberapa request.


Affected Endpoint

https://[api.tokopedia.com]/cart/v2/shop_group

https://[api.tokopedia.com]/cart/v2/add_product_cart

https://[api.tokopedia.com]/cart/v2/update_cart

https://[api.tokopedia.com]/cart/v2/remove_product_cart


Impact

Ada beberapa hal yang bisa dilakukan dengan memanfaatkan celah ini yaitu:

1. Pengguna dapat menambahkan suatu produk ke dalam wishlist pengguna lain.

2. Pengguna dapat melihat daftar produk ke dalam keranjang belanja pengguna lain.

3. Pengguna dapat menambahkan suatu produk ke dalam keranjang belanja pengguna lain.

4. Pengguna dapat mengubah kuantitas produk dalam keranjang belanja pengguna lain.

5. Pengguna dapat menghapus daftar produk dalam keranjang belanja pengguna lain.


Steps to Reproduce

Saya menyiapkan dua akun, Akun A sebagai Attacker dengan ID: 37822XXX dan Akun B sebagai Korban dengan ID: 49468XXX.

Karena temuan ini bersifat chaining yang artinya melibatkan lebih dari satu endpoint maka, saya akan membagi artikel ini ke dalam beberapa bagian.

Bagian 1. Melihat Produk di Keranjang Pengguna Lain.

1. Login ke dalam Akun A.

2. Capture aksi melihat keranjang untuk mendapatkan request yang nantinya dibutuhkan untuk proses attack.

3. Didapatkan request seperti pada Gambar 2.

Gambar 2. Request Melihat Keranjang

4. Untuk melakukan melihat produk dari keranjang Akun B, maka dalam request body, ubah X-User-ID dan Tkpd-UserId yang semulanya adalah ID Akun A dengan ID Akun B seperti pada Gambar 3.

Gambar 3. Request Yang Telah Diubah

5. Lihat response dari request yang telah diubah. Ternyata response dari request yang telah diubah sukses dan mendapatkan informasi daftar produk dalam keranjang Akun B seperti: cart_id, dan informasi daftar produk seperti product_id, product quantity, total harga dan masih banyak lagi seperti pada Gambar 4 dan 5.

Gambar 4. Response Dari Request Yang Telah Diubah
Gambar 5. Response Dari Request Yang Telah Diubah

6. Simpan informasi cart_id untuk digunakan dalam proses mengubah dan menghapus keranjang serta menambahkan produk wishlist yang nantinya akan membutuhkan cart_id.


Bagian 2. Menambahkan Produk ke Keranjang Pengguna Lain.

1. Login ke dalam Akun A.

2. Capture aksi menambahkan suatu produk ke dalam keranjang untuk mendapatkan request yang nantinya dibutuhkan untuk proses attack.

3. Didapatkan request seperti pada Gambar 6.

Gambar 6. Request Menambah Produk ke Keranjang

4. Untuk melakukan aksi menambahkan produk ke keranjang Akun B, maka dalam request body, ubah X-User-ID dan Tkpd-UserId yang semulanya adalah ID Akun A dengan ID Akun B seperti pada Gambar 7.

Gambar 7. Request Yang Telah Diubah

5. Lihat response dari request yang telah diubah. Ternyata request yang telah diubah sukses dan mendapatkan response berupa : cart_id, shop_id dan customer_id seperti pada Gambar 8.

Gambar 8. Response Dari Request Yang Telah Diubah

6. Kemudian untuk proses pembuktian, login ke Akun B, lalu pilih keranjang belanja. Hasilnya produk berhasil ditambahkan ke Akun B seperti Gambar 9.

Gambar 9. Menambahkan Produk Berhasil

Bagian 3. Mengubah Produk di Keranjang Pengguna Lain.

1. Login ke dalam Akun A.

2. Capture aksi mengubah jumlah produk dalam keranjang untuk mendapatkan request yang nantinya dibutuhkan untuk proses attack.

3. Didapatkan request seperti pada Gambar 10.

Gambar 10. Request Mengubah Produk di Keranjang

4. Untuk melakukan aksi mengubah kuantitas produk ke keranjang Akun B, maka dalam request body, ubah X-User-ID, Tkpd-UserId dan user_id yang semulanya adalah ID Akun A dengan ID Akun B dan ubah cart_id dengan cart_id yang didapat dari proses menambahkan produk sebelumnya dan juga ubah jumlah quantity yang diinginkan seperti pada Gambar 11.

Gambar 11. Request Yang Telah Diubah

5. Lihat response dari request yang telah diubah. Ternyata request yang telah diubah sukses dan mendapatkan response berupa: status ok seperti pada Gambar 12.

Gambar 12. Response dari Request Yang Telah Diubah

6. Kemudian untuk proses pembuktian, login ke Akun B, lalu pilih keranjang belanja. Hasilnya adalah kuantitas produk berhasil diubah dalam keranjang Akun B seperti Gambar 13.

Gambar 13. Mengubah Produk di Keranjang Berhasil

Bagian 4. Menghapus Keranjang Pengguna Lain.

1. Login ke dalam Akun A.

2. Capture aksi menghapus semua produk dalam keranjang untuk mendapatkan request yang nantinya dibutuhkan untuk proses attack.

3. Didapatkan request seperti pada Gambar 14.

Gambar 14. Request Menghapus Keranjang

4. Untuk melakukan aksi menghapus semua produk dalam keranjang Akun B, maka dalam request body, ubah X-User-ID, Tkpd-UserId dan user_id yang semulanya adalah ID Akun A dengan ID Akun B dan juga ubah cart_id dengan cart_id yang didapat saat proses menambahkan produk ke keranjang tadi seperti pada Gambar 15.

Gambar 15. Request Yang Telah Diubah

5. Lihat response dari request yang telah diubah. Ternyata request yang telah diubah sukses dan mendapatkan response berupa: status ok.

6. Kemudian untuk proses pembuktian, login ke Akun B, lalu pilih keranjang belanja. Hasilnya adalah semua produk berhasil dihapus dari keranjang Akun B seperti Gambar 16.

Gambar 16. Menghapus Keranjang Berhasil

Bagian 5. Menambahkan Produk di Wishlist Pengguna Lain.

1. Proses menambahkan produk ke dalam daftar Wishlist Akun B adalah terusan dari proses menghapus produk dari keranjang. Saat melakukan request untuk menghapus produk dari keranjang terdapat parameter “add_wishlist”:0.

2. Maka untuk menambahkan produk ke dalam daftar Wishlist Akun B adalah dengan mengubah parameter add_wishlist dari 0 menjadi 1 seperti Gambar 17.

Gambar 17. Request Yang Telah Diubah

3. Lihat response dari request yang telah diubah. Ternyata request yang telah diubah sukses dan mendapatkan response berupa: status ok seperti pada Gambar 18.

Gambar 18. Response Dari Request Yang Telah Diubah

4. Kemudian untuk proses pembuktian, login ke Akun B, lalu pilih Wishlist. Hasilnya adalah produk berhasil ditambahkan ke dalam Wishlist Akun B seperti Gambar 19.

Gambar 19. Menambahkan Produk ke Wishlist Berhasil

Remediation

1. Terapkan kontrol akses.

2. Pengguna perlu diotorisasi untuk informasi yang diminta sebelum server menyediakannya.


Reference

[1] https://www.bugcrowd.com/blog/how-to-find-idor-insecure-direct-object-reference-vulnerabilities-for-large-bounty-rewards/