Philipp Hasenfratz: Same Domain Policy bei Cookies verletzt?

Halihallo Forumer

Javascripts Same-Domain-Policy besagt, dass jedwelche Interaktion von Javascript mit
Daten auf dieselbe Domain beschränkt ist, sodass ein Missbrauch und Zugriff auf andere
Domains ausgeschlossen ist. Als ich mich mit der client- und serverseitigen Behandlung
von Cookies auseinandergesetzt habe, ist mir jedoch etwas aufgefallen:

Nehmen wir an, wir laden ein externes Javascript von dem Host remot-host.com in unsere
HTML-Datei auf Host origin-host.com ein und lassen es einen neuen Cookie über
document.cookie erstellen. Lesen wir den Cookie dann über das selbe externe Javascript
ein, erhalten wir nicht nur diesen Cookie, sondern auch diejenigen des Hosts
origin-host.com, obwohl das Javascript nicht diesem Host angehört.

Anders formuliert:
Wann immer ein Cookie über Javascript gesetzt wird, ist die Domain automatisch auf die
der HTML-Datei gesetzt. Normalerweise ist das völlig richtig, nur halte ich es für eine
Verletzung der Same-Domain-Policy, wenn auch Cookies einer externen, hostfremden
Javascript-Datei als Cookie des Hosts der HTML-Datei gesetzt werden.

Szenario:
Es kann vorkommen, dass z.B. ein Counter-Service über Javascript in die eigene Page ein-
gebunden ist (normalerweise geschieht dies über ein image, aber oftmals wird auch Java-
Script eingesetzt, um dynamisch eine Zufallszahl anzuhängen, um das Caching zu
verhindern). Dieser Counter-Service könnte a) alle Cookies "meiner Page" auslesen und
so ggf. an Daten meiner Services rankommen; b) meine Cookies überschreiben und so meinen
Services schaden. Ich würde dieses Verhalten, was ich bisher mit IE6,NS4,NS7,NS6,Opera
reproduzieren konnte, doch als kleines Sicherheitsrisiko und Bug bezeichnen. Genauso
kann man es aber als Feature bezeichnen, denn man hat es leichter Domainübergreifende
Javascript-Services aufzubauen...

Zum selber testen:
html-Datei auf origin-host:
<code>
  <script type="text/javascript">
    document.cookie = 'origin-domain=test1';
  </script>
  <script type="text/javascript" src="http://127.0.0.1/co.js"></script>
  <script type="text/javascript">
    alert( 'Cookies of origin-domain: ' + document.cookie );
  </script>
</code>

javascript-Datei auf remote-host:
<code>
   document.cookie='remote-host=test';
   alert( 'Cookies on Remote-Host ' + document.cookie );
</code>

Beim Laden erhalten wir eine Meldung der Cookies auf dem remote-host (der origin-domain
Cookie ist eben auch sichtbar), und die Meldung der Cookies auf dem origin-host, welcher
jetzt u.a. eben auch einen Cookie der fremden Domain hat.

Bei dem serverseitigen setzen des Cookies wird die Domain richtig gesetzt.

Meine Frage: Was haltet Ihr davon?

Viele Grüsse

Philipp

--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  1. hi,

    Nehmen wir an, wir laden ein externes Javascript von dem Host remot-host.com in unsere
    HTML-Datei auf Host origin-host.com ein und lassen es einen neuen Cookie über
    document.cookie erstellen. Lesen wir den Cookie dann über das selbe externe Javascript
    ein, erhalten wir nicht nur diesen Cookie, sondern auch diejenigen des Hosts
    origin-host.com, obwohl das Javascript nicht diesem Host angehört.

    ja, das wäre in meinen augen durchaus eine verletzung der policy.

    frage: hast du dieses verhalten in verschiedenen browsern getestet und überall so feststellen können, oder passiert dies nur in einem bestimmten browser?

    gruss,
    wahsaga

    1. Halihallo wahsaga

      frage: hast du dieses verhalten in verschiedenen browsern getestet und überall so feststellen können, oder passiert dies nur in einem bestimmten browser?

      Nein, bisher konnte ich es auf IE6,NS4,NS7,NS6,Opera reproduzieren.

      Nun ja, wie gesagt: Die Gefahr zum Ausnutzen dieses Bugs wäre minimal, der Angreifer
      müsste beim Opfer einen externes Javascript einsetzen können. Das ist normalerweise
      nicht möglich, aber es wäre gut denkbar, dass der Angreifer sich als normalen Dienst
      ausgibt (eg. eben Counter-Dienst) und so zu allen Cookies seiner Kunden käme.

      Aber wenn das wirklich zutrifft und im Moment spricht alles dafür (es sei denn, ich habe
      einen wirklich dummen Denkfehler gemacht), halte ich das doch für einen grossen Bug, und
      sogar _Browserübergreifend_.

      Viele Grüsse

      Philipp

      --
      RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
      Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
      1. Hallo Philipp,

        Aber wenn das wirklich zutrifft und im Moment spricht alles dafür (es sei denn, ich habe
        einen wirklich dummen Denkfehler gemacht), halte ich das doch für einen grossen Bug, und
        sogar _Browserübergreifend_.

        Der JavaScript-"Standard" schweigt sich aus über diesen Punkt:
        http://devedge.netscape.com/library/manuals/2000/javascript/1.3/guide/sec.html#1015705 (ich habe 1.3 verlinkt, da der betreffende Abschnitt in 1.4 und 1.5 nicht mehr vorhanden ist)

        Daher ist es vermutlich kein Bug sondern einfach im Standard so nicht definiert.

        Viele Grüße,
        Christian

        1. Halihallo Christian

          Der JavaScript-"Standard" schweigt sich aus über diesen Punkt:

          In Table 14.2 steht eindeutig, dass auf document.cookie nur von Scripts zugegriffen
          werden darf, die den same origin test hinter sich haben. Es steht zwar nicht, dass
          document.cookie die Cookies des Hosts der Script-Datei enthalten muss, aber nimmt man
          die Spezifikation genau, dürfte man auf document.cookie gar nicht zugreifen.

          Daher ist es vermutlich kein Bug sondern einfach im Standard so nicht definiert.

          Es ist IMHO ein Bug, aber wenn nicht von den Browserherstellern, dann in der
          Spezifikation selber (nichts sagen schützt nicht vor Bug :-)).

          Viele Grüsse

          Philipp

          --
          RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
          Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
          1. Hallo Philipp,

            Es steht zwar nicht, dass document.cookie die Cookies des Hosts der Script-Datei enthalten muss,

            Genau das meinte ich.

            Daher ist es vermutlich kein Bug sondern einfach im Standard so nicht definiert.

            Es ist IMHO ein Bug, aber wenn nicht von den Browserherstellern, dann in der
            Spezifikation selber (nichts sagen schützt nicht vor Bug :-)).

            Dem stimme ich zu.

            Viele Grüße,
            Christian

            1. Halihallo Christian

              Es steht zwar nicht, dass document.cookie die Cookies des Hosts der Script-Datei enthalten muss,
              Genau das meinte ich.

              Ich war dem Irrglauben unterlegen, dass document hier das Javascript-Dokument
              referenziert und somit die Cookies des Hosts der externen Javascript-Datei enthält.
              Aber das document bleibt ja nach wie vor das HTML-Dokument, inwelches die JS-Datei
              inkludiert wird, folglich ist das Read/Write Verbot auf document.cookie völlig richtig
              und gerechtfertigt.

              Daher ist es vermutlich kein Bug sondern einfach im Standard so nicht definiert.
              Es ist IMHO ein Bug, aber wenn nicht von den Browserherstellern, dann in der
              Spezifikation selber (nichts sagen schützt nicht vor Bug :-)).
              Dem stimme ich zu.

              Vielen Dank für Deine Antworten. Also scheint es wirklich ein Browserbug zu sein.

              Vielleicht noch etwas kleines an alle:
              In [pref:t=57488&m=321832] habe ich das zweite Mal auf das "Sicherheitsrisiko" hin-
              gewiesen, was meiner Meinung nach übertrieben ist. Das Posting schrieb ich aufgrund einer
              etwas kindischen Freude über das Auffinden eines "Sicherheitslochs". Ich gelobe
              Besserung :-)

              Viele Grüsse und vielen Dank

              Philipp

              --
              RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
              Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  2. Halihallo

    Soeben auch mit serverseitig gesetzten Cookies reproduziert.

    Duch die Einbindung eines externen Javascripts (eg. getarnt als Visit-Counter mit
    Anticaching) ist es z.B. möglich die Session-Cookies des fremden Dienstes zu erhaschen
    und sich damit in das fremde System einzuloggen...

    Ich habe das an einem eigenen System soeben erfolgreich vollzogen...

    Meine lieben Leute, bloss keine externen Javascripts von Drittpersonen einbinden!

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
  3. Halihallo nochmals ;)

    kleiner Nachtrag:
    Die Same Domain Policy wird nicht verletzt, wenn ein fremdes Dokument über iframe oder
    Frames (weiteres nicht getestet) eingelesen wird. Ein Zugriff auf ein
    frames['foreign_host'].document.cookie wird zurecht mit "Access denied" quittiert.

    Es verhärtet sich der Verdacht, dass ein eingebundenes Script immer "trusted" ist und
    die Cookies vom "original-html-Dokument" erbt, auch wenn es von einem fremden Host
    geladen wird.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.