Sonntag, 18. September 2011


Topthema

Donnerstag, 17. Januar 2008 | Topthema

About Security #139: Webwürmer (2): Samys Ende

(Link zum Artikel: http://www.entwickler.de/php/kolumnen/040636)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Auch in dieser Fortsetzung der Beschreibung des MySpace-Wurms Samy stammen die Informationen zu einem großen Teil aus Samys eigener Beschreibung und sind zum Teil mit dem Wurmquelltext verlinkt.

8. Um Samy zur Liste der 'Heroes' des Opfers hinzuzufügen, musste ein POST-XMLHttpRequest an die addFriends-Seite unter www.myspace.com geschickt werden. Die aktuelle Seite befand sich jedoch unter profile.myspace.com. Die Same Origin Policy verhindert XMLHttpRequests an Seiten einer anderen als der ursprünglichen Domain. Um diese Einschränkung zu umgehen, nutzte Samy aus, dass die Profile sowohl unter profile.myspace.com als auch unter www.myspace.com erreichbar waren. Die Seite musste also nur unter der gewünschten Domain neu geladen werden.
Beispiel: if (location.hostname == 'profile.myspace.com') document.location = 'http://www.myspace.com' + location.pathname + location.search;

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

9. Um Samy zur Freundesliste des Opfers hinzuzufügen, fehlte nun nur noch ein entsprechender POST-XMLHttpRequest. Um CSRF-Angriffe zu verhindern, verwendete MySpace in seinen Formularen einen zufälligen Hash-Wert, der mit dem zugehörigen POST-Request abgesendet werden musste. Um diesen Hash-Wert zu erhalten, wurde vor dem Absenden des XMLHttpRequests eine Seite mit dem Hash-Wert über einen GET-Request geladen und daraus der Hash-Wert übernommen. Wie in About Security #128 beschrieben, ist ein solcher Schutz gegen CSRF-Angriffe nutzlos, wenn die Seite eine XSS-Schwachstelle enthält. Allerdings handelt es sich dann auch nicht um CSRF im eigentlichen Sinne, da der Angriff von einer Seite der eigenen Website kommt.

Um den Wurmcode in die Profilseite des Opfers einzuschleusen, musste dieser erst passend kodiert werden. Dazu wurde er von der aktuellen Seite gelesen und manuell passend angepasst. Die JavaScript-Funktionen für die URL-Kodierung und Escape behandelten nicht alle Fälle ausreichend. Weitere Probleme waren z.B. die maximal mögliche Codelänge, der teilweise Verzicht auf Leerzeichen, das Verbergen von Namen und die Wiederverwendung von Funktionen.

Eine formatierte Version des Samy-Virus wurde von Antonio Fontes in einer Mail auf der Mailingliste 'Web Application Security' von securityfocus.com veröffentlicht. Eine lokale, etwas angepasste Version gibt es hier.

Wie man sieht, besteht der Wurm aus ganz normalem JavaScript, wenn auch teilweise in etwas unüblichen Schreibweisen – und an einer Stelle eingefügt, an der JavaScript eigentlich nichts zu suchen hat. Dass der Wurm überhaupt funktioniert und sich auf MySpace ausbreiten konnte, hat zwei Ursachen. Eine hat nichts mit MySpace zu tun, sondern liegt in den unterschiedlichen Interpretationen des HTML- und JavaScript-Codes durch die verschiedenen Webbrowser: Wo der eine ein kaputtes CSS-Tag erkennt und folgerichtig ignoriert, sieht der andere JavaScript-Code, den er ausführt. Im XSS Cheat Sheet sind viele solcher unterschiedlichen Interpretationsmöglichkeiten aufgeführt. Was der eine Browser komplett ignoriert, gibt der andere als Text aus, und ein dritter erkennt ausführbaren JavaScript-Code. Ein ähnliches Problem gibt es mit angeblichen Bildern, die tatsächlich JavaScript-Code enthalten: Einige Browser versuchen, das Bild darzustellen bzw. zeigen das Icon für ein fehlendes Bild, andere, z.B. der Internet Explorer, ignorieren die Information, dass es ein Bild sein soll, und führen stattdessen den darin gefundenen JavaScript-Code aus.

About Security: Die komplette Serie

Samy lief also nicht in allen Browsern, mit dem Internet Explorer aber in einem der verbreitetsten. Die zweite Ursache war MySpaces Filter, der zwar sehr gut, aber eben nicht gut genug war. Das Problem war einfach, dass einige HTML-Tags zugelassen waren und andere nur auf eine Weise ausgefiltert wurden. Was wieder einmal den Nachteil von Negativlisten zeigt: Was nicht darauf steht, wird durchgelassen. Wenn z.B. wie in diesem Fall 'innerHTML' verboten ist, hätte auch nach 'i'+'nnerHTML', 'in'+'nerHTML', ... 'i'+'n'+'nerHTML', ... usw. usf. gesucht werden müssen. Und selbst wenn man meint, alle Möglichkeiten gefunden zu haben, kommt jemand, und findet eine weitere Möglichkeit zur Tarnung (siehe z.B. das XSS Cheat Sheet).

Hier noch ein paar interessante Links zu Samy: Ein Interview mit dem Autor, seine Beschreibung des Ablaufs sowie ein Bericht über das Urteil gegen ihn.

Nach Samy kam Yamanner

Ab dem 12. Juni 2006 machte sich der Wurm Yamanner über Yahoo! Mail her, es handelte sich damit um den ersten Webmail-Wurm. Wie Samy war Yamanner in JavaScript geschrieben und nutzte eine Schwachstelle im JavaScript-Filter von Yahoo! Mail für seine Verbreitung. Beim Öffnen einer infizierten Mail sendete der Wurm sich selbst an alle im Adressbuch des Opfers gespeicherten Adressen, außerdem wurden die gefundenen E-Mail-Adressen an einen Server des Wurm-Autors geschickt.

In der nächsten Folge wird die Funktionsweise von Yamanner näher betrachtet.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security – Übersicht zum aktuellen Thema "Sichere Webanwendungen – Webwürmer"

Kommentare

Folgende Links könnten Sie auch interessieren