# Iframes in XSS, CSP e SOP {{#include ../../banners/hacktricks-training.md}} ## Iframes in XSS Ci sono 3 modi per indicare il contenuto di una pagina in iframe: - Tramite `src` che indica un URL (l'URL può essere cross origin o same origin) - Tramite `src` che indica il contenuto utilizzando il protocollo `data:` - Tramite `srcdoc` che indica il contenuto **Accesso a variabili Parent & Child** ```html ``` ```html ``` Se accedi all'html precedente tramite un server http (come `python3 -m http.server`), noterai che tutti gli script verranno eseguiti (poiché non c'è CSP che lo impedisca). **il genitore non sarà in grado di accedere alla variabile `secret` all'interno di qualsiasi iframe** e **solo gli iframe if2 e if3 (che sono considerati dello stesso sito) possono accedere al segreto** nella finestra originale.\ Nota come if4 è considerato avere origine `null`. ### Iframes con CSP > [!NOTE] > Si prega di notare come nei seguenti bypass la risposta alla pagina incapsulata non contenga alcun header CSP che impedisca l'esecuzione di JS. Il valore `self` di `script-src` non permetterà l'esecuzione del codice JS utilizzando il protocollo `data:` o l'attributo `srcdoc`.\ Tuttavia, anche il valore `none` della CSP permetterà l'esecuzione degli iframe che mettono un URL (completo o solo il percorso) nell'attributo `src`.\ Pertanto, è possibile bypassare la CSP di una pagina con: ```html ``` Nota come il **CSP precedente consente solo l'esecuzione dello script inline**.\ Tuttavia, **solo gli script `if1` e `if2` verranno eseguiti, ma solo `if1` sarà in grado di accedere al segreto del genitore**. ![](<../../images/image (372).png>) Pertanto, è possibile **bypassare un CSP se puoi caricare un file JS sul server e caricarlo tramite iframe anche con `script-src 'none'`**. Questo può **potenzialmente essere fatto anche abusando di un endpoint JSONP same-site**. Puoi testare questo con il seguente scenario in cui un cookie viene rubato anche con `script-src 'none'`. Basta eseguire l'applicazione e accedervi con il tuo browser: ```python import flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): resp = flask.Response('') resp.headers['Content-Security-Policy'] = "script-src 'self'" resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET' return resp @app.route("/cookie_s.html") def cookie_s(): return "" if __name__ == "__main__": app.run() ``` ### Altri Payload trovati nel wild ```html ``` ### Iframe sandbox Il contenuto all'interno di un iframe può essere soggetto a restrizioni aggiuntive attraverso l'uso dell'attributo `sandbox`. Per impostazione predefinita, questo attributo non è applicato, il che significa che non ci sono restrizioni in atto. Quando utilizzato, l'attributo `sandbox` impone diverse limitazioni: - Il contenuto è trattato come se provenisse da una fonte unica. - Qualsiasi tentativo di inviare moduli è bloccato. - L'esecuzione di script è vietata. - L'accesso a determinate API è disabilitato. - Impedisce ai link di interagire con altri contesti di navigazione. - L'uso di plugin tramite ``, ``, `` o tag simili è vietato. - La navigazione del contesto di navigazione di livello superiore del contenuto da parte del contenuto stesso è impedita. - Le funzionalità che vengono attivate automaticamente, come la riproduzione video o il focus automatico dei controlli del modulo, sono bloccate. Il valore dell'attributo può essere lasciato vuoto (`sandbox=""`) per applicare tutte le restrizioni sopra menzionate. In alternativa, può essere impostato su un elenco di valori specifici separati da spazi che esentano l'iframe da determinate restrizioni. ```html ``` ## Iframes in SOP Controlla le seguenti pagine: {{#ref}} ../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md {{#endref}} {{#ref}} ../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md {{#endref}} {{#ref}} ../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md {{#endref}} {{#ref}} ../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md {{#endref}} {{#include ../../banners/hacktricks-training.md}}