Iframes in XSS, CSP and SOP
Iframes w XSS
Istnieją 3 sposoby wskazania zawartości zafarowanej strony:
Poprzez
src
wskazujący na URL (URL może być z innej domeny lub tej samej)Poprzez
src
wskazujący na zawartość za pomocą protokołudata:
Poprzez
srcdoc
wskazujący na zawartość
Dostęp do zmiennych rodzica i dziecka
Jeśli uzyskasz dostęp do poprzedniego pliku html za pomocą serwera http (np. python3 -m http.server
), zauważysz, że wszystkie skrypty zostaną wykonane (ponieważ nie ma CSP, który by temu zapobiegał). Rodzic nie będzie mógł uzyskać dostępu do zmiennej secret
w żadnym iframe i tylko iframy if2 i if3 (które są uważane za witryny o tej samej domenie) mogą uzyskać dostęp do sekretu w oryginalnym oknie.
Zauważ, że if4 jest uważany za mający pochodzenie null
.
Iframy z CSP
Proszę zauważyć, że w poniższych bypassach odpowiedź na stronę z iframem nie zawiera nagłówka CSP, który zapobiegałby wykonaniu JS.
Wartość self
dla script-src
nie pozwoli na wykonanie kodu JS za pomocą protokołu data:
ani atrybutu srcdoc
.
Jednak nawet wartość none
w CSP pozwoli na wykonanie iframów, które umieszczają adres URL (cały lub tylko ścieżkę) w atrybucie src
.
Dlatego możliwe jest obejście CSP na stronie za pomocą:
Zauważ, że poprzednia CSP zezwala jedynie na wykonanie skryptu osadzonego.
Jednakże tylko skrypty if1
i if2
zostaną wykonane, ale tylko if1
będzie w stanie uzyskać dostęp do rodzica sekretu.
Dlatego możliwe jest obejście CSP, jeśli można przesłać plik JS na serwer i załadować go za pomocą iframu nawet przy script-src 'none'
. To może potencjalnie zostać również zrobione poprzez nadużycie punktu końcowego JSONP o tej samej stronie.
Możesz przetestować to przy następującym scenariuszu, gdzie ciasteczko jest kradzione nawet przy script-src 'none'
. Po prostu uruchom aplikację i uzyskaj do niej dostęp za pomocą przeglądarki:
Inne ładunki znalezione w dziczy
Ramka piaskownica
Zawartość w ramce iframe może podlegać dodatkowym ograniczeniom za pomocą atrybutu sandbox
. Domyślnie ten atrybut nie jest stosowany, co oznacza brak ograniczeń.
Kiedy jest wykorzystywany, atrybut sandbox
narzuca kilka ograniczeń:
Zawartość jest traktowana tak, jakby pochodziła z unikalnego źródła.
Każda próba przesłania formularzy jest blokowana.
Wykonywanie skryptów jest zabronione.
Dostęp do określonych interfejsów API jest wyłączony.
Zapobiega łączeniu się linków z innymi kontekstami przeglądania.
Użycie wtyczek za pomocą tagów
<embed>
,<object>
,<applet>
lub podobnych jest niedozwolone.Nawigacja kontekstu przeglądania najwyższego poziomu zawartości przez samą zawartość jest uniemożliwiona.
Funkcje, które są uruchamiane automatycznie, takie jak odtwarzanie wideo lub automatyczne ustawianie fokusu na elementach formularza, są blokowane.
Wartość atrybutu może być pozostawiona pusta (sandbox=""
), aby zastosować wszystkie wyżej wymienione ograniczenia. Alternatywnie, może być ustawiona na listę wartości oddzielonych spacją, które zwalniają ramkę iframe z pewnych ograniczeń.
Iframes w SOP
Sprawdź następujące strony:
Last updated