Wir befnden uns im Jahre 2009 n. Chr. Das ganze Internet war einer Cross-Site Scripting (XSS) Schwachstelle in Rails ausgesetzt ... Das ganze Internet? Nein! Ein unbeugsamer Browser hört nicht auf, XSS-Angriffen Widerstand zu leisten.

image

Scherz beiseite - Anfang September 2009 wurde in Ruby on Rails eine Cross-Site Scripting (XSS) Schwachstelle gefixed, welche alle 2.0.0 Versionen und Subversionen betraf. Ruby on Rails (Rails) ist ein quelloffenes Web Application Framework. Es basiert auf den Prinzipien „Don't Repeat Yourself“ (DRY) und „Convention over Configuration“, das heißt statt einer variablen Konfiguration sind Konventionen für die Namensgebung von Objekten einzuhalten, woraus deren Zusammenspiel sich automatisch ergibt. Diese Funktionen ermöglichen eine rasche Umsetzung von Anforderungen und damit agile Softwareentwicklung (Beschreibung aus Wikipedia).

Viele Webdienste nutzen Rails und waren durch diesen Bug verwundbar. Die populärsten der betroffenen Websites sind sicher Twitter und Basecamp. Allerdings waren nur Anwender, die Internet Explorer 8 nutzen, gegen diese aktuelle Verwundbarkeit durch den eingebauten XSS-Filter von vorneherein geschützt!

Security Researcher Brian Mastenbrook ermittelte die Schwachstelle, als er die Unicode-Behandlung von Twitter untersuchte. Er stellte fest, dass er die String Sanitization Mechanismen durch den Einsatz von JavaScript umgehen konnte. Typischerweise nennt man eine solche XSS-Schwachstelle "Type 1".

Auf seinem Blog beschrieb Mastenbrook seine Erkenntnisse in dem Blogpost How I cross-site scripted Twitter in 15 minutes, and why you shouldn't store important data on 37signals' applications:

"After seeing a bug in Unicode handling in an unrelated program a few weeks ago, I suddenly had an idea: 'I wonder if there are any web applications which have Unicode handling problems that might be security issues?' My attention quickly turned to Twitter, the only web application I had open at that moment. A few minutes later, I had JavaScript from a URL query parameter falling through the escaping routines and running in the main body of twitter.com. Bingo! Cross-site scripting, the stuff that Twitter worms are made of."

Nachdem auch bei Basecamp der gleiche Angriffsvektor funktionierte, stellte sich jetzt die Frage, ob hier Fehler bei der Implementierung der jeweiligen Site gemacht wurden, oder ob es sich vielleicht nicht auch um eine generelle Schwachstelle in Rails handelt.

Mastenbrook informierte die Verantwortlichen bei Twitter und Basecamp. Gemeinsam ermittelten sie in weiteren Arbeiten die Ursache der Verwundbarkeit, welche sich tatsächlich in dem verwendeten Framework fand. Die gewonnenen Informationen wurden dem Rails Team zur Verfügung gestellt, welches einen Fix erstellte und die Öffentlichkeit in einem Security-Bulletin informierte.

In seinem Blogeintrag beschreibt er ebenfalls seine Erfahrungen beim Umgang mit den betroffenen Website-Betreibern. Er nutzte Responsible Disclosure, um die gefundene Schwachstelle zu komunizieren. Während die Zusammenarbeit mit Twitter reibungslos verlief, kritisiert er deutlich das Verhalten von 37Signals, welche einerseits mit der Sicherheit ihres Produkts werben, auf der anderen Seite aber keine angemessene Möglichkeit anbieten, gefundenen Schwachstellen melden zu können.

Interessant an dem Vorfall finde ich den Hinweis von Mastenbrook, dass bei der Nutzung von Internet Explorer 8 der Fehler auf der Browserseite dank des eingebauten Cross-Site Scripting Filters abgefangen wird und IE8-Anwender damit gegen diese XSS-Schwachstelle geschützt sind:

“One surprise I discovered during the process was that IE8 includes a Cross Site Scripting filter which effectively blocked this attack. I'm very impressed with the effort that Microsoft's taken to mitigate one of the most common web application security issues. Every other browser vendor needs to add this functionality yesterday.”

Da ich gerade an einem Artikel über den letzten Browsertest der Computerbild (Ausgabe 20/2009) schreibe, fiel mir auf, dass ein XSS-Filter in deren Test keine Rolle spielte. Selbst auf Rückfrage hin ist der Mehrwert der Computerbild nicht ersichtlich gewesen. Wie viele andere Dinge übrigens auch. Aber das ist eine andere Story mit Material  für eine eigene Rubrik “Computerbildblog” ;-)

Fazit?

Winners: Ruby on Rails, Microsoft, Twitter
Loser: 37signals