Pengambilalihan Akun Epik Senilai $57.500

May 06 2023
Halo teman-teman! Saya kembali setelah sekian lama dengan bug Pengambilalihan Akun (pra) yang menarik dan bagaimana saya mengaitkannya dengan XSS. Anda mungkin bingung karena ini adalah artikel yang panjang, tapi jangan khawatir, pertahankan sampai akhir; Saya telah menyederhanakan hal-hal di bagian akhir untuk pemahaman yang lebih baik.

Halo teman-teman! Saya kembali setelah sekian lama dengan bug Pengambilalihan Akun (pra) yang menarik dan bagaimana saya mengaitkannya dengan XSS. Anda mungkin bingung karena ini adalah artikel yang panjang, tapi jangan khawatir, pertahankan sampai akhir; Saya telah menyederhanakan hal-hal di bagian akhir untuk pemahaman yang lebih baik.

Di blog ini, saya akan membagikan kisah Pra — Pengambilalihan Akun saya yang menarik yang terjadi karena Kontrol Akses Rusak dan Bagaimana saya berhasil menjadikan ini masalah yang valid.

Saya sedang berburu program hadiah bug pribadi lama. Saya tahu dalam benak saya bahwa saya perlu menemukan masalah unik untuk menghindari duplikat. Seperti biasa, nyalakan sendawaku dan secara acak mulai menelusuri target.
Saya menemukan bagian profil situs. Ada opsi untuk hanya mengedit Nama dan Kata Sandi dan bukan Email.

Tidak ada opsi untuk mengubah email

Saya memutuskan untuk mengubah alamat email. Untuk itu, saya mulai memeriksa pengaturan lain, mengubah nama, dan menangkap permintaan di Burp.

Saya perhatikan dan mulai bermain dengan UserAttributes. Pertama, saya mengubah nama menjadi update_email dan nilainya menjadi email akun yang sudah ada.
Saya mendapat kesalahan —
{
“__type”:”InvalidParameterException”,
”message”:”user.update_email: Atribut tidak ada di skema.n”
}

Sekali lagi, saya mengubah nama menjadi change_email dan mengirim permintaan, tetapi saya mendapatkan kesalahan yang sama —
{
“__type”:”InvalidParameterException”,
”message”:”user.change_email: Atribut tidak ada dalam skema.n”
}

Kemudian saya kembali ke permintaan alur pendaftaran dan mengamati bahwa aplikasi mengirimkan alamat email baru di atribut Nama Pengguna saat mendaftar. Saya mengubah nama menjadi Nama Pengguna tetapi mendapatkan kesalahan yang sama lagi –
{
“__type”:”InvalidParameterException”,
”message”:”user.Username: Atribut tidak ada dalam skema.n”
}

Saya hampir menyerah, tetapi sebagai percobaan terakhir, saya mengirim permintaan lagi hanya dengan email , dan saya mendapat kesalahan baru!

Saya mengalihkan fokus saya ke Pra — Pengambilalihan Akun karena kesalahan ini menegaskan bahwa saya tidak dapat mengambil alih akun pengguna lain. Saya mengubah alamat email menjadi email yang tidak terdaftar, dan berhasil.

Saya menerima OTP verifikasi di email baru. Namun, saya berhasil mengubah alamat email ke yang baru tanpa melalui proses verifikasi dan mendapatkan akun tanpa verifikasi apa pun.

Wow! Saya terlalu bersemangat, membuat laporan dan mengirimkannya
Dalam beberapa jam, mereka mengubahnya menjadi Tidak Berlaku dan mengirimi saya balasan ini:

saya untuk diri saya sendiri

Setelah menerima tanggapan ini, saya kembali ke aplikasi dan mencoba masuk dengan surat korban ( [email protected] ) dan kata sandi penyerang dan mendapatkan kesalahan — “nama pengguna atau kata sandi salah”

Kemudian, saya mencoba mengatur ulang kata sandi untuk melihat apakah ada OTP yang dikirim.
Tetapi mendapat kesalahan baru — "Kata sandi tidak dapat diatur ulang, karena email tidak terdaftar atau diverifikasi."

Saya mencatat semua kesalahan yang saya dapatkan dan pergi tidur. Keesokan harinya saya mulai lagi dari awal tetapi tidak menemukan sesuatu yang baru. Sekali lagi buka catatan saya dan baca 2–3 kali. Setelah membaca kesalahan ini — “Kata sandi tidak dapat disetel ulang, karena email tidak terdaftar atau diverifikasi.”
Saya memutuskan untuk mencoba mendaftar dengan email korban. Saat saya mendaftar, aplikasi melontarkan kesalahan baru — “ ​​Akun Anda untuk sementara tidak tersedia. Silakan coba masuk dalam 15 menit.”

Setelah 15 menit, saya mencoba masuk dengan email korban dan kata sandi yang digunakan saat pendaftaran. Tapi saya masih mendapatkan kesalahan ini — “nama pengguna atau kata sandi salah.”
Kemudian saya mencoba masuk dengan email korban ( [email protected] ) dan kata sandi penyerang ( [email protected] ) . Dan yang mengejutkan saya, saya mendapat akses ke akun tersebut!

Sekarang masalah utamanya adalah—

“Kata sandi dapat diistirahatkan oleh pemilik alamat email kapan saja”

Jadi saya kembali ke fitur setel ulang kata sandi, saya mencoba mengatur ulang kata sandi dan mendapatkan kesalahan — “Kata sandi tidak dapat diatur ulang, karena email tidak terdaftar atau diverifikasi.”

Kemudian saya mencoba untuk mendapatkan kode verifikasi baru di email korban dan mendapatkan kesalahan — “ Nama pengguna tidak valid .”

Saya seperti:

Masalah terpecahkan! Pengguna tidak dapat mengatur ulang kata sandi mereka melalui tautan setel ulang kata sandi.

Ini mungkin belum terlalu jelas sampai sekarang, tetapi saya akan meringkasnya secara singkat:

  • Dua email:
    Penyerang — [email protected]
    Korban (Akun tidak terdaftar) — [email protected]
  • Aplikasi tidak memiliki fungsi untuk mengubah email.
  • Dari akun penyerang, ubah alamat email menjadi milik korban dengan menghitung nilai UserAttributes .
    “UserAttributes”:[
    {“Nama”:”email”,
    ”Nilai”:” [email protected]
    }
  • Saat penyerang mengubah email, korban akan menerima kode OTP untuk verifikasi.
  • Tapi tidak perlu memverifikasi email, penyerang sudah mendapatkan email korban yang ditautkan ke akun mereka.
  • Penyerang keluar dan mencoba masuk dengan email korban dan kata sandi penyerang . Aplikasi tidak akan mengizinkan ini karena email korban belum terdaftar .
  • Penyerang menavigasi ke pendaftaran dan mendaftar dengan email korban . Aplikasi melontarkan kesalahan — “ Akun Anda untuk sementara tidak tersedia. Silakan coba masuk dalam 15 menit.”
  • Setelah 15 menit, penyerang kembali ke panel login dan berhasil login dengan email korban dan kata sandi penyerang .
  • Ketika korban mencoba mengatur ulang kata sandinya atau mencoba memverifikasi akun, aplikasi melontarkan kesalahan — "Nama pengguna tidak valid", yang berarti bahwa korban telah kehilangan semua cara untuk mendapatkan kembali akunnya.
  • Karena kesalahan konfigurasi yang parah (Kontrol Akses Rusak), akun penyerang ditautkan ke email korban. Penyerang hanya mendaftarkan email dan tidak memverifikasi akun, itu sebabnya server backend tidak memiliki catatan email korban. (Ini hanya tebakan saya, tidak yakin)
  • Korban tidak dapat mengatur ulang kata sandi mereka dengan “fungsionalitas ulang kata sandi.”
  • Jika korban mencoba menghubungi tim dukungan untuk mengatur ulang kata sandi, kemungkinan besar tim dukungan tidak akan dapat menemukan email korban di backend karena itu adalah email yang tidak diverifikasi — (Tebakan saya berdasarkan kesalahan saya didapatkan saat pengaturan ulang kata sandi dan pengiriman ulang verifikasi)

Saya menemukan injeksi HTML di bidang nama ketika saya mulai berburu di aplikasi. Saya mengabaikannya karena tidak ada dampaknya.
Kemudian saya mendapat ide jika entah bagaimana saya berhasil mengubahnya menjadi XSS yang tersimpan dan memasukkan muatan XSS ke akun korban, maka setiap kali korban berhasil mengambil akun mereka, XSS akan dipicu.

Saya meletakkan muatan XSS dasar di bidang nama belakang, tetapi aplikasi menunjukkan ruang putih kosong dan tidak ada peringatan.

Setelah mencoba selama beberapa jam, saya menemukan bahwa aplikasi tersebut hanya memiliki perlindungan dasar terhadap XSS, dan hanya memfilter <script>, <img>, alert, dll.
Kemudian saya membuat payload, mengganti alert dengan prompt, dan berhasil!

<a onmouseover=”prompt(document.cookie)”>Di sini</a>

Segera setelah korban menelusuri nama belakang, XSS akan dipicu.

Saya memblokir semua cara bagi korban untuk mendapatkan kembali kata sandinya, dan bahkan jika mereka berhasil melakukannya (Yang hampir tidak mungkin), maka XSS menunggu di bagian profil.

Dampak bisnis:

  • Aplikasi memiliki kerentanan kritis yang memungkinkan penyerang melewati mekanisme otentikasi dan membuat akun tanpa verifikasi OTP.
  • Kerentanan juga memungkinkan penyerang untuk menyalahgunakan fungsionalitas aplikasi, seperti mengubah alamat email di bagian profil, yang tidak sengaja diizinkan oleh aplikasi.
  • Sebagai penyerang, saya dapat menetapkan Nama korban sebagai muatan XSS yang tersimpan, karena aplikasi rentan terhadap XSS yang tersimpan. Ketika korban mengatur ulang kata sandi mereka (Yang hampir tidak mungkin), mereka akan masuk ke akun mereka. Segera setelah korban masuk, muatan XSS akan terpicu, yang mengarah ke pemaparan cookie.
  • Melewati mekanisme otentikasi aplikasi ini memungkinkan penyerang untuk (pra) mengambil alih akun korban. Sebagai penyerang, saya dapat menggunakan alamat email korban mana pun untuk mendaftarkan/menautkan akun dan melakukan tindakan atas nama korban.