Halo semua! Hari ini adalah hari yang sangat spesial bagi saya. Ini adalah pertama kalinya saya berhasil menemukan bug yang diterima dan dibayar — sebuah pencapaian yang sudah lama saya nantikan. Pada kesempatan ini, saya ingin berbagi cerita singkat mengenai temuan tersebut.

Latar Belakang

Temuan saya kali ini adalah OTP Bypass yang berujung pada Account Takeover melalui Response Manipulation.

Sebelumnya, saya hampir setiap hari hunting dan ketika mendapatkan kerentanan setelah di validasi hanya bug berkategori Informative — bahkan tidak jarang Out of Scope, karena saya sering melewatkan program guidelines tanpa membacanya secara menyeluruh 😅. Setelah banyak membaca write-up dari hunter lain dan menonton berbagai Proof of Concept (PoC) di YouTube, saya akhirnya menemukan sebuah target yang menarik perhatian saya.

Website tersebut menerapkan verifikasi OTP melalui email dan nomor telepon pada proses registrasi nya. Saat itulah saya teringat salah satu PoC yang pernah saya tonton — dan langsung saya coba terapkan.

Steps to Reproduce

1. Buat akun secara normal dan simpan response sukses

Pada aplikasi target, saya membuat akun menggunakan email secara normal. Pada saat proses registrasi, saya mengamati response yang dikembalikan oleh server dan menyimpan JSON success response-nya untuk digunakan nanti.

json

HTTP/2 200 OK
{
  "data": {
    "loginEmailVerify": {
      "code": 200,
      "success": true,
      "message": "Successfully Verified Email",
      "user": {
        "id": "[id]",
        "email": "example@mail.com"
      },
      "source": "EMAIL"
    }
  }
}

2. Buat akun baru dengan OTP sembarang

Selanjutnya, saya membuat akun baru. Pada tahap verifikasi OTP, saya sengaja memasukkan kode OTP yang salah/acak.

3. Aktifkan Burp Suite Intercept sebelum mengirim OTP

Sebelum menekan tombol Send, aktifkan fitur Intercept pada Burp Suite terlebih dahulu, kemudian kirimkan permintaan tersebut.

4. Forward request OTP

Pada bagian OTP request yang tertangkap Burp Suite, klik kanan lalu pilih "Intercept response to this request", kemudian forward request tersebut.

5. Manipulasi response error menjadi response sukses

Pada bagian response yang muncul, ganti seluruh isi JSON error response dengan JSON success response yang telah disimpan pada langkah pertama. Setelah itu, forward kembali.

6. Akun berhasil terdaftar

Hasilnya, akun berhasil dibuat dan dapat digunakan secara normal — meskipun OTP yang dimasukkan sebelumnya adalah OTP yang salah.

Catatan Tambahan

Catatan penting, tidak semua perusahaan menerima temuan pre-account takeover seperti ini, mereka memasukannya ke dalam Out of scope jadi pastikan dulu untuk membaca rules terlebih dahulu. Namun dalam kasus ini, karena target merupakan perusahaan layanan keuangan (financial services) yang mengandalkan OTP sebagai lapisan keamanan utama, tim mereka menilai temuan ini memiliki dampak yang signifikan — sehingga laporan ini diterima dan mendapatkan reward.

Terima kasih sudah membaca write-up pertama saya ini. Semoga bermanfaat dan bisa menjadi referensi untuk teman-teman yang sedang belajar bug bounty. Sampai jumpa di write-up berikutnya! 🙌

reward: $250

Happy Hunting!