Iframes in XSS, CSP and SOP
Iframes in XSS
Es gibt 3 Möglichkeiten, den Inhalt einer eingebetteten Seite anzuzeigen:
Über
src
, das eine URL angibt (die URL kann Cross-Origin oder Same-Origin sein)Über
src
, das den Inhalt unter Verwendung desdata:
-Protokolls angibtÜber
srcdoc
, das den Inhalt angibt
Zugriff auf Eltern- und Kindvariablen
Wenn Sie auf das vorherige HTML über einen HTTP-Server zugreifen (wie python3 -m http.server
), werden Sie feststellen, dass alle Skripte ausgeführt werden (da es keine CSP gibt, die dies verhindert). Das übergeordnete Element kann nicht auf die secret
-Variable innerhalb eines Iframes zugreifen und nur die Iframes if2 & if3 (die als gleiche Seite betrachtet werden) können auf das Geheimnis zugreifen im ursprünglichen Fenster.
Beachten Sie, wie if4 als Ursprung null
betrachtet wird.
Iframes mit CSP
Bitte beachten Sie, wie in den folgenden Umgehungen die Antwort auf die eingebettete Seite keinen CSP-Header enthält, der die JS-Ausführung verhindert.
Der Wert self
von script-src
erlaubt nicht die Ausführung des JS-Codes unter Verwendung des data:
-Protokolls oder des srcdoc
-Attributs.
Jedoch erlaubt selbst der Wert none
des CSP die Ausführung der Iframes, die eine URL (vollständig oder nur den Pfad) im src
-Attribut setzen.
Daher ist es möglich, die CSP einer Seite mit zu umgehen:
Beachten Sie, wie die vorherige CSP nur die Ausführung des Inline-Skripts zulässt.
Jedoch werden nur if1
und if2
Skripte ausgeführt, wobei jedoch nur if1
auf das übergeordnete Geheimnis zugreifen kann.
Daher ist es möglich, eine CSP zu umgehen, wenn Sie eine JS-Datei auf den Server hochladen und sie über ein iframe laden können, selbst mit script-src 'none'
. Dies kann potenziell auch durch den Missbrauch eines JSONP-Endpunkts auf derselben Website erfolgen.
Sie können dies mit dem folgenden Szenario testen, bei dem ein Cookie auch mit script-src 'none'
gestohlen wird. Führen Sie die Anwendung aus und greifen Sie mit Ihrem Browser darauf zu:
Andere Payloads, die im Internet gefunden wurden
Iframe Sandbox
Der Inhalt innerhalb eines iframes kann zusätzlichen Einschränkungen unterliegen durch die Verwendung des sandbox
-Attributs. Standardmäßig wird dieses Attribut nicht angewendet, was bedeutet, dass keine Einschränkungen vorhanden sind.
Bei Verwendung des sandbox
-Attributs werden mehrere Einschränkungen auferlegt:
Der Inhalt wird behandelt, als ob er von einer eindeutigen Quelle stammt.
Jeglicher Versuch, Formulare abzusenden, wird blockiert.
Die Ausführung von Skripten ist untersagt.
Der Zugriff auf bestimmte APIs ist deaktiviert.
Es verhindert, dass Links mit anderen Browsing-Kontexten interagieren.
Die Verwendung von Plugins über
<embed>
,<object>
,<applet>
oder ähnliche Tags ist nicht erlaubt.Die Navigation des Inhalts im Top-Level-Browsing-Kontext durch den Inhalt selbst wird verhindert.
Funktionen, die automatisch ausgelöst werden, wie Videowiedergabe oder das automatische Fokussieren von Formularelementen, werden blockiert.
Der Wert des Attributs kann leer gelassen werden (sandbox=""
), um alle oben genannten Einschränkungen anzuwenden. Alternativ kann er auf eine durch Leerzeichen getrennte Liste von spezifischen Werten gesetzt werden, die den iframe von bestimmten Einschränkungen befreien.
Iframes in SOP
Überprüfen Sie die folgenden Seiten:
pageBypassing SOP with Iframes - 1pageBypassing SOP with Iframes - 2pageBlocking main page to steal postmessagepageSteal postmessage modifying iframe locationLast updated