diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 055f3b8c3..2fe4e0a74 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -10,7 +10,7 @@ Postoje 3 načina da se označi sadržaj stranice unutar iframe-a: - Putem `src` koji označava sadržaj koristeći `data:` protokol - Putem `srcdoc` koji označava sadržaj -**Pristupanje roditeljskim i dečijim varijablama** +**Pristupanje Parent & Child varijablama** ```html ``` Ako pristupite prethodnom html-u putem http servera (kao što je `python3 -m http.server`), primetićete da će svi skripti biti izvršeni (pošto ne postoji CSP koji to sprečava). **roditelj neće moći da pristupi `secret` varijabli unutar bilo kog iframe-a** i **samo iframe-ovi if2 i if3 (koji se smatraju istim sajtom) mogu pristupiti tajni** u originalnom prozoru.\ -Obratite pažnju na to kako se if4 smatra da ima `null` poreklo. +Obratite pažnju kako se if4 smatra da ima `null` poreklo. ### Iframes sa CSP > [!TIP] -> Molimo vas, obratite pažnju na to kako u sledećim zaobilaženjima odgovor na iframed stranicu ne sadrži nijedan CSP header koji sprečava izvršavanje JS-a. +> Molimo vas, obratite pažnju kako u sledećim zaobilaženjima odgovor na iframed stranicu ne sadrži nijedan CSP header koji sprečava izvršavanje JS-a. `self` vrednost `script-src` neće dozvoliti izvršavanje JS koda koristeći `data:` protokol ili `srcdoc` atribut.\ Međutim, čak i `none` vrednost CSP-a će dozvoliti izvršavanje iframe-ova koji stavljaju URL (potpun ili samo putanju) u `src` atribut.\ @@ -61,7 +61,7 @@ Stoga je moguće zaobići CSP stranice sa: +content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk'" /> " if __name__ == "__main__": app.run() ``` -### Ostali payloadi pronađeni u divljini +#### Nove (2023-2025) CSP bypass tehnike sa iframovima + +Istraživačka zajednica nastavlja da otkriva kreativne načine zloupotrebe iframova kako bi prevazišla restriktivne politike. Ispod možete pronaći najznačajnije tehnike objavljene tokom poslednjih nekoliko godina: + +* **Dangling-markup / named-iframe data-exfiltration (PortSwigger 2023)** – Kada aplikacija reflektuje HTML, ali jaka CSP blokira izvršavanje skripti, još uvek možete iscuriti osetljive tokene injektovanjem *dangling* ` + + ``` ### Credentialless iframes Kao što je objašnjeno u [ovom članku](https://blog.slonser.info/posts/make-self-xss-great-again/), `credentialless` oznaka u iframe-u se koristi za učitavanje stranice unutar iframe-a bez slanja kredencijala u zahtevu, dok se održava politika istog porekla (SOP) učitane stranice u iframe-u. -Ovo omogućava iframe-u da pristupi osetljivim informacijama iz drugog iframe-a u istom SOP-u učitanom na roditeljskoj stranici: +Pošto je **Chrome 110 (februar 2023) ova funkcija omogućena po defaultu** i specifikacija se standardizuje među pretraživačima pod imenom *anonymous iframe*. MDN to opisuje kao: “mehanizam za učitavanje iframe-a trećih strana u potpuno novom, ephemernom skladišnom delu tako da se nijedni kolačići, localStorage ili IndexedDB ne dele sa pravim poreklom”. Posledice za napadače i odbrambene strane: + +* Skripte u različitim credentialless iframe-ima **i dalje dele isto vrhunsko poreklo** i mogu slobodno da komuniciraju putem DOM-a, što čini multi-iframe self-XSS napade izvodljivim (vidi PoC ispod). +* Pošto je mreža **bez kredencijala**, svaki zahtev unutar iframe-a se efektivno ponaša kao neautentifikovana sesija – CSRF zaštićene tačke obično ne uspevaju, ali javne stranice koje se mogu otkriti putem DOM-a su i dalje u opsegu. +* Iskočeni prozori koji se pojavljuju iz credentialless iframe-a dobijaju implicitni `rel="noopener"`, što prekida neke OAuth tokove. ```javascript -window.top[1].document.body.innerHTML = 'Hi from credentialless'; -alert(window.top[1].document.cookie); +// PoC: two same-origin credentialless iframes stealing cookies set by a third +window.top[1].document.cookie = 'foo=bar'; // write +alert(window.top[2].document.cookie); // read -> foo=bar ``` - Primer eksploatacije: Self-XSS + CSRF @@ -201,4 +245,10 @@ Proverite sledeće stranice: ../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md {{#endref}} + + +## Reference + +* [PortSwigger Research – Korišćenje otmice formi za zaobilaženje CSP (mart 2024)](https://portswigger.net/research/using-form-hijacking-to-bypass-csp) +* [Chrome Developers – Iframe bez kredencijala: Lako umetnite iframe u COEP okruženja (februar 2023)](https://developer.chrome.com/blog/iframe-credentialless) {{#include ../../banners/hacktricks-training.md}}