Henry: iframe same-origin sandbox

problematische Seite

Hallo,

im Netz inkl. hier im Wiki gibts die einhellige Aussage, zumindest verstehe ich das so, dass die same-origin Blockade beim iframe aufzuheben möglich wäre.

Dazu habe ich das Fricklbeispiel zum Iframe mal angepasst:

<h1>Fenstergucker</h1>

<button onclick="alert(ifr.srcdoc);">show source iframe</button>

<main>
	<p>Gucken Sie mal SELFHTML im Fenster an:</p>
	<iframe id="ifr" src="https://wiki.selfhtml.org/wiki/Startseite"
	width="90%" height="400" name="SELFHTML_in_a_box" sandbox="allow-same-origin">
		<p>Ihr Browser kann leider keine eingebetteten Frames anzeigen: Sie können die eingebettete
			Seite über den folgenden Verweis aufrufen: <a href="https://wiki.selfhtml.org/wiki/Startseite">SELFHTML</a>			</p>
	</iframe>
</main>

Jetzt hatte ich erwartet, dass die Aussage…

"allow-same-origin: ermöglicht den Inhalt des iframes als same-origin zu behandeln"

…bedeutet ich könne den Inhalt dann auslesen ohne am Browser was umstellen zu müssen. Geht aber nicht, also

  • gehe ich das falsch an?
  • oder verstehe ich die Erklärung falsch?
  • oder ist die Erklärung nicht richtig?

Gruss
Henry

--
Meine Meinung zu DSGVO & Co:
„Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“

akzeptierte Antworten

  1. problematische Seite

    Hallo Henry,

    • gehe ich das falsch an?
    • oder verstehe ich die Erklärung falsch?
    • oder ist die Erklärung nicht richtig?

    Die Erklärung ist falsch. allow-same-origin erlaubt es dem Dokument, die Origin zu behalten. Ansonsten wäre das eingebettete Dokument in einer eigenen, unique Origin. Z.B. wenn ich in einem sandboxed iframe ein Dokument von http://example.com lade, ist die Origin nicht https://example.com sondern eine eigene. Erst mit dem Attribut allow-same-origin wird die Origin https://example.com beibehalten. Damit hat der iFrame dann Zugriff auf die Daten (Cookies, local storage, etc) der Origin.

    Es ist nicht möglich, auf das DOM des eingebetteten Dokuments zuzugreifen. Du kannst mit dem eingebetteten Dokument nur über Mechanismen wie window.postMessage kommunizieren.

    Freundliche Grüße,
    Christian Kruse

    1. problematische Seite

      Hallo Christian Kruse,

      Die Erklärung ist falsch. allow-same-origin erlaubt es dem Dokument, die Origin zu behalten.

      Magst du das bitte im Wiki korrigieren?

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. problematische Seite

        Hallo Matthias,

        Hallo Christian Kruse, Magst du das bitte im Wiki korrigieren?

        ich glaube das ist gar nicht so einfach dies verständlich zu erklären. Ich habe Christians Erklärung hier auch noch nicht ganz verstanden bin mir auch nicht sicher ob Autoren anderer Seiten das richtig verstehen. Bräuchte man wahrscheinlich konkrete Fallbeispiele dazu.

        Gruss
        Henry

        --
        Meine Meinung zu DSGVO & Co:
        „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
      2. problematische Seite

        Hallo Matthias,

        ✅ done

        Freundliche Grüße,
        Christian Kruse

    2. problematische Seite

      Hallo Christian,

      Die Erklärung ist falsch. allow-same-origin erlaubt es dem Dokument, die Origin zu behalten. Ansonsten wäre das eingebettete Dokument in einer eigenen, unique Origin. Z.B. wen…

      Danke, aber so ganz hab ich es noch nicht verstanden.

      Es ist nicht möglich, auf das DOM des eingebetteten Dokuments zuzugreifen. Du kannst mit dem eingebetteten Dokument nur über Mechanismen wie window.postMessage kommunizieren.

      Guter Hinweis, habe auch ne schöne Seite dafür gefunden, komme aber noch nicht so zurecht beim Testen. Muss ich mir gleich mal in Ruhe anschauen.

      Gruss
      Henry

      --
      Meine Meinung zu DSGVO & Co:
      „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
      1. problematische Seite

        Hallo Henry,

        Die Erklärung ist falsch. allow-same-origin erlaubt es dem Dokument, die Origin zu behalten. Ansonsten wäre das eingebettete Dokument in einer eigenen, unique Origin. Z.B. wen…

        Danke, aber so ganz hab ich es noch nicht verstanden.

        OK. Ich versuchs nochmal anders. Stell dir vor du hast eine Seite auf example.com, die diesen Code enthält:

        <iframe src="http://example.org/foo" sandbox></iframe>
        

        Dieser iframe wir keinen Zugriff auf Daten der Origin example.org haben. Keine Cookies, kein localStorage, nichts. Wenn du dagegen den Code änderst auf diesen:

        <iframe src="http://example.org/foo" sandbox="allow-same-origin"></iframe>
        

        dann erhält die Seite auf einmal Zugriff auf die Daten der Domain, also Cookies, localStorage, etc. Ich hab das mal nachgestellt: https://static.wwwtech.de/test.html enthält das einzubettende Dokument, der nichts anderes macht als ein Datum in den localStorage zu schreiben und wieder auszulesen. https://static.wwwtech.de/test1.html enthält zwei iframes, die die erste URL einbinden: eins mit sandbox="allow-scripts" und eins mit sandbox="allow-scripts allow-same-origin". Das erste Dokument darf den localStorage nicht auslesen und bekommt dadurch sogar eine Exception. Das zweite Dokument darf den localStorage auslesen.

        Freundliche Grüße,
        Christian Kruse

        1. problematische Seite

          Hallo Ingrid,

          wohlgemerkt: dass test1.html auf der gleichen Domain liegt ist irrelevant. Ich hatte nur so schnell keine zweite zur Verfügung.

          Freundliche Grüße,
          Christian Kruse

          1. problematische Seite

            Hallo Christian,

            fast hätte ich gedacht, ich hätte es verstanden. Aber

            wohlgemerkt: dass test1.html auf der gleichen Domain liegt ist irrelevant.

            war das nicht genau der Punkt? Dass einbettende und eingebettete Seite von der gleichen Domain kommen (also: gleichen Origin haben) und der sandbox-Parameter genau für diesen Fall erlaubt, dass ein Zugriff möglich ist?

            Rolf

            --
            sumpsi - posui - obstruxi
            1. problematische Seite

              Hallo Rolf,

              wohlgemerkt: dass test1.html auf der gleichen Domain liegt ist irrelevant.

              war das nicht genau der Punkt? Dass einbettende und eingebettete Seite von der gleichen Domain kommen (also: gleichen Origin haben) und der sandbox-Parameter genau für diesen Fall erlaubt, dass ein Zugriff möglich ist?

              Nein. Es erlaubt der eigebetteten Seite den Zugriff auf die eigene Origin. Ohne den Parameter hat die eingebettete Seite Zugriff auf keine Origin.

              Auf die Origin des Openers hat die eingebettete Seite nie Zugriff, es sei denn, sie kommen von der gleichen Origin 🤣

              Freundliche Grüße,
              Christian Kruse

              1. problematische Seite

                Hallo Ingrid,

                vielleicht wird es klarer, wenn man den Sinn erkennt. Das ist eine Mitigation-Strategie gegen XSS- und CSRF-Lücken. Wenn der Angreifer es schafft, die URL eines iframe zu verändern, dann schützt einen das sandbox-Attribut dagegen, dass ein ungewollter Request mit Benutzerrechten ausgeführt wird. allow-same-origin heisst also nicht „erlaube Same-Origin des Openers,“ sondern „erlaube Same-Origin-Requests.“

                Freundliche Grüße,
                Christian Kruse

              2. problematische Seite

                Hallo Christian,

                nee, jetzt versteh ich gar nichts mehr. Aber ich lese jetzt erstmal andere Dokumente zum Thema, bevor Du Dir die Finger wundschreibst.

                Rolf

                --
                sumpsi - posui - obstruxi
                1. problematische Seite

                  Hallo Rolf,

                  *kopfkratz* ich wüsste jetzt auch wirklich nicht, wie ich das noch erklären sollte, sorry 😟 sandbox entfernt das Recht der eingebetteten Seite, auf die eigenen Daten zuzugreifen. sandbox="allow-same-origin" gibt das Recht wieder zurück.

                  Freundliche Grüße,
                  Christian Kruse

                  1. problematische Seite

                    Hallo Christian,

                    sandbox entfernt das Recht, auf die eigenen Daten zuzugreifen. sandbox="allow-same-origin" gibt das Recht wieder zurück.

                    ich glaube, das war der entscheindende Hinweis (besonders der erste Teil).
                    Jedenfalls für mich.

                    Live long and pros healthy,
                     Martin

                    --
                    Für welches Tier mühen wir uns am meisten ab? - Für die Katz'.
                  2. problematische Seite

                    Hallo Christian,

                    oh. Dito!

                    Rolf

                    --
                    sumpsi - posui - obstruxi