Es soll tatsächlich Leute geben die immernoch der Auffassung sind, dass der Internet Explorer sicher oder zumindest nicht unsicher sei. Denjenigen sei dieser Blogeintrag ans Herz gelegt.
Die Image Header Injection ist eigentlich eine schon länger bekannte Sicherheitslücke im Internet Explorer, jedoch hat Jungsonn sie vor einigen Tagen gewissermaßen ein zweites Mal entdeckt. Daraufhin entfachte im sl.ackers.org Forum eine heiße Diskussion, die ich zum Anlass nehme das ganze nochmal zusammenzufassen.
Wir sind vom Internet Explorer längst gewöhnt, dass er merkwürdige Dinge in jeglicher Hinsicht tut und auch die neuste 7.0 Version verhält sich nicht anders. Das meißte Aufsehen erregte in letzter Zeit der mhtml bug, der zusammengefasst einen Lesezugriff im Kontext des Browsers auf beliebige Webseiten ermöglicht und Angreifern dadurch ungeahnte Freiheiten verleiht.
Um beim Thema zu bleiben - was hat es mit Header Injection aufsich?
Der aufmerksame Leser wird bemerkt haben, dass ich "Image" in der Überschrift in Klammern gesetzt habe und das nicht ohne Grund. Diese Art von Header Injection bezieht sich nicht nur auf Bilder, sondern ist vermutlich in allen Dokumenttypen möglich. Es läuft darauf hinaus, dass beliebiger HTML Code, eingebettet in z.B. ein Bild, im Internet Explorer zur Ausführung gebracht werden kann.
Um die Ursache zu erklären, muss man jedoch etwas weiter ausholen (1):
Jede Datei auf einem Webserver ist mit einem Content-Type versehen, der Browsern mitteilt, wie weiter mit der jeweiligen Datei verfahren werden soll. Wäre der Content-Type text/html, würde das entsprechende Dokument als HTML dargestellt werden, image/png wäre ein Bild im PNG Format.
Danach sollte es verständlich sein, dass Dokumente nicht als HTML gerendert werden sollten, wenn als Content-Type nicht explizit text/html genannt wird. Dies ist der Punkt, wo sich der Internet Explorer verabschiedet und eigene Wege geht.
Microsoft implementierte ein Verfahren das sie Mime Type Dectection nennen. Die Grundidee ist bereits in RFC 2616 genannt und beschreibt ein Verfahren, bei dem die ersten paar hundert Bytes genutzt werden um daraus auf den Content-Type zu schließen, wenn dieser eben noch nicht explizit genannt wurde.
Das Problem an dieser Stelle ist, das Microsoft obiges Verfahren schlichtweg völlig falsch implementiert hat, was letztenendes die Ursache für den Header Injection Bug ist. Der Internet Explorer verdreht den Vorgang und versucht zuerst den Content-Type zu erraten, statt den ev. bereits vorgeschriebenen zu nehmen.
Stößt er bei diesem Topfschlagen Spiel auf HTML ähnliche Konstrukte wie <script>, rendert er das gesamte Dokument als HTML und führt dementsprechend den Code aus, womit man bei Cross Site Scripting angelangt wäre.
Ich denke es liegt auf der Hand wie gefährlich und verbreitet diese Sicherheitslücke ist. Es gibt unzählige one-click Image Hoster (z.B. http://imageshack.us) und in nahezu jedem bulletin Board lassen Grafiken in Form von Avataren hochladen. Dabei ist das nur ein Auszug.
Viele Entwickler implementieren Sicherheitsmaßnahmen die z.B. Grafiken auf Validität prüfen oder grundsätzlich Files auf den richtigen Mime-Type. Dadurch lassen sich die offensichtlichsten Angriffsvektoren abwehren, jedoch tippe ich das über 95% aller Webapplications durch den hier diskutierten Bug verwundbar sind. Im Grunde ist das nicht einmal verwerflich, denn wer kann kann schon mit Browser Bugs dieser Art rechnen. Das hat nichts mehr mit einem sicheren Programmierstil zutun, da diese Bugs einfach willkürlich auftreten. Man kann dem im Vorraus nur durch Erfahrungswerte und einem gewissen Gespühr entgegenwirken.
Im Gegensatz zu diversen Behauptungen, kann man seine eigenen Anwendungen aber durchaus vor diesen Angriffen schützen. Es bedarf lediglich einer Untersuchung des Quellcodes, des in Frage stehenden Dokuments, auf verdächtige Zeichenketten. In einem GIF ist kein <script> oder Ahnliches in der Form <blah> zu erwarten. Bei anderen Dokumenten könnte es unter Umständen komplexer werden, dazu werde ich zeitnah eine Funktion implementieren.
Fazit:
Zwar lassen sich die eigenen Webanwendungen vor entsprechendem Missbrauch schützen, prinzipiell ist man mit dem Internet Explorer jedoch allen Gefahren schutzlos ausgeliefert. Wer jetzt noch immer keinen Umstieg in Betracht zieht, dem scheinen seine Webaccounts einschließlich online banking nicht viel Wert zu sein.
Nachtrag:
Wie sich herrausstellte, ist selbst Google anfällig: Öffnen mit MSIE:
http://docs.google.com/File?id=ddh33ggd_4ndhddc
Auch Gmail habe ich mir angesehen, da ich vermutete, dass die Attachment Funktion auf gleiche Weise ausnutzbar ist. Das funktionierte jedoch nicht, da Google mein angehängtes PNG Bild offensichtlich in ein BMP umwandelte. (von Google behoben)
(1) Die Beschreibung beruht im Wesentlichen auf den Informationen aus dem Artikel MSIE faciltates Cross Site Scripting von http://splitbrain.org