Security: Gif-Bild plus Java-Klasse im Profil

Jürgen Auer

Legendäres Mitglied
Eigentlich wollte ich grade meinen Rechner runterfahren, werfe noch einen Blick in die Heise-News.

Und finde diesen Artikel: Spionage-Photos mal andersrum

Ausführlicherer Artikel im ZDNet-Blog - das ganze ist eine Vorschau auf die Black Hat - Konferenz in der nächsten Woche in Vegas.

Prinzip: Irgendwie kann man Bilder aller möglichen Formate so mit Java-Klassen kombinieren, daß das Bild angezeigt und der Java-Code ausgeführt wird. Das ganze aber mit dem 'Vertrauensbonus' der Plattform, auf der das Bild eingebunden ist.

Lädt also jemand auf mySpace, Xing, ebay usw. solche Bilder hoch und kann er andere dazu bringen, sein Profil mit so einem manipulierten Bild aufzurufen, dann kann er diesen Java-Code unterschieben. Natürlich müßte das auch mit den hiesigen Profilfotos gehen.

Für mich verblüffend ist die Feststellung in dem ZDnet-Artikel, daß das weniger ein Problem des Betriebssystems oder der Java-VM, sondern mehr ein Problem der Seitenanbieter sei, die beim Upload höchstens die Endung und die ersten Zeilen checken.

Im Prinzip ist das 'fast wie Sql-Injections' - 'trau nie, nie, nie Benutzereingaben, auch keinen Fileuploads'.

PS: Etwas ähnliches hatte hier mal jemand erwähnt: PHP-Code in Bildern. Jagt man die Bilder aus Bequemlichkeit durch den Parser, wird der PHP-Code ausgeführt.

Bon appétit.
 
Ich verstehe nicht ganz, was der Autor unter "kombinieren" versteht... einbetten etwa?

Und wie soll dann eingebetteter Code ausgeführt werden? Wäre ja krass, wenn die Anzeigeengine des Browers so nebenbei noch auf Java-Code reagieren würde.

Naja, nach der Black Hat wird man es wohl genauer wissen.
 
QUOTE (retok @ Fr 1.08.2008, 23:06) Naja, nach der Black Hat wird man es wohl genauer wissen.

Ich würde Jürgen jetzt nicht als Black Hat bezeichnen, aber wie man auf solche Ideen kommt...
wink.gif
Alles Ok.

Lukas
 
QUOTE (retok @ Fr 1.08.2008, 22:06)Ich verstehe nicht ganz, was der Autor unter "kombinieren" versteht... einbetten etwa?

Eine einzige Datei, die sowohl das Bild als auch eine Java-Klasse enthält.

Zitat von Heise:


QUOTE Bei der von Billy Rios, Rob Carter und John Heasman entwickelten Methode wird einfach ein GIF-Bild mit einer Klassen-Datei für Java (JAR) kombiniert (GIF + JAR = GIFAR). Ruft der Anwender ein solches Bild auf, so wird nicht nur das Bild angezeigt, sondern die Java Virtual Machine (JVM) führt auch noch das eingebettete Applet im Kontext der aufgerufenen Seite aus.


Und damit gilt natürlich:


QUOTE Mit diesem Trick lassen sich die Filter vieler Webseiten umgehen, die mit diversen Methoden versuchen, das Hochladen aktiver Inhalte zum Schutz ihrer Besucher zu verhindern. Üblicherweise filtern die Server etwa JavaScript aus Profilen aus oder blockieren das Hochladen oder Einbetten von Skripten in Seiten. Das Hochladen von Bildern ins eigene Profil oder etwa Auktionen sperrt jedoch keine Seite. Man muss sie nur davon überzeugen, dass es sich um ein gültiges Bild handelt. Prinzipiell soll sich jede Web-Seite missbrauchen lassen, bei denen ein Upload von Bildern erlaubt ist.


Also ebay genauso wie jedes Forum mit Bildern, Xing.

Erstellt man eine Webseite und packt solche Bilder auf diese Seite, dann mag da noch etwas blockieren, weil die Seite keinen 'vertrauenswürdigen Status' hat. Aber betrachtet bsp. mein Browser Xing als 'vertrauenswürdig', dann genügt der Besuch eines Profils mit einem entsprechenden Bild.

PS: Bei Heise gibt es ein IT-Verzeichnis, da kann man auch Logos hochladen. Für die gilt dasselbe.
 
Anscheind ist der Bug schon laenger bekannt ^^
erst vor kurzem hat das phpbb3 eine Abfrage eingebaut, bei welcher nach dem Upload auch die ersten X Zeichen der Dateiinhalte kontrolliert werden um so etwas zu verhindern.
 
QUOTE (G.P. @ Fr 1.08.2008, 23:24)Anscheind ist der Bug schon laenger bekannt ^^
erst vor kurzem hat das phpbb3 eine Abfrage eingebaut, bei welcher nach dem Upload auch die ersten X Zeichen der Dateiinhalte kontrolliert werden um so etwas zu verhindern.

Nach diesem Zitat (aus dem oben verlinkten englischen Artikel)


QUOTE The GIFAR issue is likely to effect any web application that accepts uploads of content from users without sanitizing this data beyond checking the file extension and file headers


scheint das (Prüfen der Erweiterung und der ersten Zeichen) aber gerade nicht auszureichen.

Was mich daran so irritiert (und mir den Appetit verdirbt), ist folgendes: Daß ein Word-Dokument auch eine eingebettete Excel-Tabelle enthalten kann, das ist seit 1990 so und allgemein bekannt.

Bilder habe ich bis jetzt jedoch als atomar (im Sinne der ersten Normalform) gehalten - als nicht weiter zerlegbare Einheiten.

Wenn jetzt ein Bild so mit einer Java-Klasse kombiniert werden kann, daß der Browser das Bild anzeigt und die Klasse an die Java-VM zur Ausführung weiterreicht, dann hätte ich das zunächst als ein Browser-Problem bezeichnet. Aber:


QUOTE There was a comment in the article about this being really a browser security issue. That plays into some of our research, but most of our research has little to do with browser-security issues and more to do with issues in the web applications themselves, or in third-party browser plugins.


Faktisch heißt das: Ich muß Bilder wie Word-Dokumente als Container für so ziemlich alles nur Denkbare betrachten - und sind problematische / aktive Inhalte dabei, dann muß ich das sperren. Praktisch ist das auf der Ebene der Binärcode-Entwicklung aussichtslos. Also müßten von den Entwicklern der Programmiersoftware (Perl, PHP, .NET) Klassen bereitgestellt werden, die eine solche Gesamtanalyse eines 'Bildcontainers' zur Verfügung stellen. Als Entwickler 'am Kunden' kann niemand so eine Arbeit leisten.
 
In dem Artikel steht explizit, betroffen sind Webmaster, die der Endung "gif" und auch nur gif vertrauen.
Bei jpg und png ist das Integrieren von verstecktem Code nicht möglich.

Mit $size = getimagesize($file) sollte dem eigentlich vorbeugt sein.

Besser ist natürlich nicht das Orginalbild, sondern eine Kopie zu speichern.
$image=imagecreatefromgif($file);
imagejpeg($image,$new_filename,100);

Dann sind diese Probleme von vornherein ausgeschlossen.

Gruss Tümmel
 
Zurück
Oben