
Description
Curhat dikit lah yaa…
Cerita yang agak lucu dari saya sudut pandang bug hunter yang mana sebelumnya saya sudah pernah melaporkan celah keamanan pertama yaitu IDOR di salah satu aplikasi. Yah saya dapat reward dari temuan itu, dan dibalas email saya dengan sangat apresiasi dan responsif.
Lalu beberapa minggu atau bulan kemudian saya lupa-lupa ingat, saya coba report kembali temuan ke-2 ini dengan memberikan info ke adminnya kalau saya “bisa akses ke salah satu database mereka” disini maksud saya dari phpmyadmin-nya. Belum sampai saya kirim report, abang admin langsung sadar sepertinya lihat dari aktifitas log internal mereka atau mengira-ngira sehingga segera mereka patching dengan cara dihapuslah phpmyadmin disalah satu subdomain tersebut.
Dan ini adalah temuan ke-3 saya, gak jauh berbeda begitu saya lapor belum sempat ngasih report nya, celah di patch duluan (LOL the power of account logs) padahal status di email adminnya bilang agar saya diminta untuk menunggu respon dari mereka terlebih dahulu selanjutnya akan bagaimana, yang infonya sudah diteruskan ke tim development nya (ok).
Pikir saya “kok gini amat pak? takut keluar duit lagi apa gimana sih? padahal yang pertama saya report itu bounty nya juga gak gede padahal, kalaupun iya kenapa ga bilang aja sih untuk temuan ini ga ada bug bounty-nya gitu”, yahhh siapa yang tau apa yang terjadi dibalik dapur sana, cuma saya tetep respect ke mereka karena tanggap dan aware perihal keamanan di platform mereka.
Affected Endpoint
- https://
[redacted]/api-server/payment/coin/checkout
Steps to Reproduce
- Pertama saya login menggunakan akun saya.
- Di platform ini memiliki sebuah “misi” yang mana bila pengguna menyelesaikan misi-misi tersebut maka akan diberikan reward berupa koin yang mana bisa ditukarkan menjadi hadiah fisik seperti barang elektronik, tas, dan lainnya.
- Lalu pada bagian misi, terlihat pada banner saldo saya saat ini yaitu dengan jumlah 2.400.650, adalah hasil saldo dari testing sebelumnya.

- Oke saya pindah ke bagian penukaran koin. Lalu saya coba untuk tukar koin dengan salah satu barang (contoh barang dengan harga 10.000.000 koin).

- Pada saat klik tombol tukar maka akan terdapat request untuk pengecekan saldo user, jika saldo user lebih kecil dari harga barang maka proses akan dibatalkan.
- Namun karena pengecekan harga hanya pada sisi client, dan cara untuk mem-bypass-nya adalah saya rubah hasil respon tersebut sehingga parameter coin_balance memiliki value lebih dari harga barang yang akan dibeli (saya set menjadi 24.006.500).

- Selanjutnya isi data nomor telepon, jumlah, lalu klik konfirmasi.

- Selanjutnya intercept request.

- Setelah beberapa percobaan dan analisis, didapatlah vulnerable pada parameter amount (jumlah barang yang akan dibeli) yang mana setelah di input dengan nilai negatif (-) maka program akan melakukan proses dan terdeteksi valid order. Uniknya lagi saldo akan bertambah dengan jumlah sesuai dengan harga barang yang akan ditukarkan koin (kasus unik).
- Rubah value pada parameter amount lalu kirim request sehingga mendapat respon sukses (kode: 200 OK).

- Maka secara interface terlihat pula bahwa transaksi berhasil dilakukan.

- Untuk memastikannya saya coba lihat pesanan, dan ternyata memiliki status Pesanan Diperoses.

- Dan untuk lebih memastikannya lagi saya kembali ke halaman sebelumnya dan ternyata benar bahwa saldo berhasil ditambahkan ke dalam akun yaitu 10.000.000 (saldo hasil) + 2.400.650 (saldo awal) = 12.400.650.

Miscellaneous
Terakhir saya cek, endpoint sudah di patch dengan melakukan pengecekan bahwa nilai dalam parameter amount harus lebih dari 0, good job bang jago!
