Web-Sicherheit

Februar 3, 2011

Missbrauchen von HTTP-Statuscodes um an private Informationen zu gelangen

Filed under: Allgemein — sebastiankuebeck @ 11:05
Tags: , , , , ,

Ein Faszinierender Arikel von Mike Cardwell demonstriert, Seitenbetrieber HTTP-Status-Codes missbrauchen können, um festzustellen, ob sich Besucher bei einer Seite bei Facebook, Twitter, GMail oder Digg angemeldet hat.

Mit diesem Skript kann ein Seitenbetreiber beispielsweise erkennen, ob Sie bei GMail angemeldet sind:

<img style="display:none;"
     onload="logged_in_to_gmail()"
     onerror="not_logged_in_to_gmail()"
     src="https://mail.google.com/mail/photos/static/AD34hIhNx1pdsCxEpo6LavSR8dYSmSi0KTM1pGxAjRio47pofm
E9RH7bxPwelO8tlvpX3sbYkNfXT7HDAZJM_uf5qU2cvDJzlAWxu7
-jaBPbDXAjVL8YGpI"/>

Was hier passiert, ist folgendes: Mike Cardwell hat auf seinem GMail-Account ein Foto hochgelden und öffentlich zugänglich gemacht. Der Image-Tag läd nun das Foto und der Browser schickt dabei die Zugangsdaten des Benutzers an GMail, soferne Sie dort angemeldet sind (der Image-Tag ist von der Same Origin Policy ausgenommen, im Gegensatz beispielsweise zum XHR).

Ist dies der Fall, liefert der Server den HTTP-Statuscodes 200 (also OK) zurück. Sind Sie
nicht angemeldet, schickt er einen anderen Statuscode zurück. Diesen Statuscode kann der Seitenbetreiber natürlich nicht direkt auslesen, allerdings ist es eine Eigenheit von Browsern, dass sie den JavaScript-Code in der Eigenschaft onload ausführen, wenn sie den HTTP-Statuscodes 200 erhalten.

Der Browser prüft den Inhalt der Antwort des Servers weiter nicht. So ist es beispielsweise unerheblich, mit welchem Content-Type der Server antwortet. der Inhalt muss also nicht zwangsläufig ein Bild sein. So kann der Seitenbetreiber sicher sein, dass die Funktion logged_in_to_gmail zuverlässig ausgeführt wird, wenn der Browser den Statuscodes 200 erhalten hat und dass ist nur dann der Fall, wenn der Benutzer bereits bei GMail eingeloggt ist.

Die Technik ist vergleichbar mit Cross-Site Request Forgery, allerdings bekommt der Angreifer mit dieser Technik keine Informationen vom Server zurück. Mit der Erweiterung des Ausnützens der onload ist es zumindest also möglich, Informationen über den Status-Code zu erhalten. Ganz abgesehen von den Implikationen, die das auf die Sicherheit von Surfern hat, ergeben sich hier neue Möglichkeiten für Cross-Site-Request-Forgery-Angriffe.

Im Fall von GMail kann man das Spiel noch weitertreiben, so kann man automatisch die GMail-Adresse des Benutzers mithilfe von jQuery in ein Formular einfügen.

$('').hide()
   .attr('src','https://mail.google.com/mail/photos/static/AD34hIhNx1pdsCxEpo6LavSR8dYSmSi0KTM1pGxAjRio47pofm
E9RH7bxPwelO8tlvpX3sbYkNfXT7HDAZJM_uf5qU2cvDJzlAWxu7
-jaBPbDXAjVL8YGpI')
   .load(function(){
      $('a[href^="mailto:"]').each(function(){
         var email = $(this).attr('href').replace(/^mailto:/,'');
         $(this).attr('href','https://mail.google.com/mail/?view=cm&fs=1&tf=0&to='+escape(email));
      });
   })
   .appendTo('body');

Da dieses möglich ist, ist es auch kein Problem, dass der Webseitenbetreiber alle E-Mail Adresse der eingeloggten GMail-Benutzer an seinen Server verschickt. Somit ist der Seitenbetreiber automatisch im Besitz ihrer E-Mail Adresse, wenn Sie seine Seite besuchen!

Schreibe einen Kommentar »

Es gibt noch keine Kommentare.

RSS feed for comments on this post. TrackBack URI

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Bloggen auf WordPress.com.

%d Bloggern gefällt das: