Cyber Security Enthusiast

Merubah Kondisi Bilangan Hingga Manipulasi Jutaan Koin

M

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.
Total saldo koin saat ini
  • 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).
Tes tukar koin salah satu barang
  • 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).
Merubah respon value pada parameter coin_balance
  • Selanjutnya isi data nomor telepon, jumlah, lalu klik konfirmasi.
Isi data dan konfirmasi penukaran koin
  • Selanjutnya intercept request.
Intercept request dan terdapat beberapa parameter
  • 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).

Merubah request pada value amount menjadi negatif dan mendapat respon sukses
  • Maka secara interface terlihat pula bahwa transaksi berhasil dilakukan.
  • Untuk memastikannya saya coba lihat pesanan, dan ternyata memiliki status Pesanan Diperoses.
Status pesanan sedang diproses
  • 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.
Total saldo koin saat ini

Miscellaneous

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

Respon setelah di patch

Add comment

Cyber Security Enthusiast