Freitag, 29. August 2008

News

präsentiert von: entwickler.com
Donnerstag, 8. September 2005

About Security #22: HTTP Response Splitting, 2

Diese Woche geht es um Schwierigkeiten beim HTTP Response Splitting. HTTP Response Splitting ist immer dann möglich, wenn nicht korrekt gefilterte Benutzereingaben Bestandteil von HTTP-Responses werden. Außer in den bereits erwähnten Fällen der Redirection-Responses und des Setzens von Cookies kann dies auch bei den von einigen Webservern unterstützten individuellen Skripten zur Fehlerbehandlung passieren. Außerdem können Webanwendungen die HTTP-Responses durch in den meisten APIs vorhandene Funktionen beliebig manipulieren.

Behandlung der Benutzereingaben
Die Ausnutzung einer Schwachstelle scheitert unter Umständen an der Behandlung der Eingaben. Manche API-Funktionen filtern CR- und LF-Zeichen aus, erzeugen eine Fehlermeldung oder URL-kodieren die Eingabe.

Die Eingaben können auch automatisch verändert werden, wenn bestimmte Zeichen darin vorkommen. Zum Beispiel interpretiert ASP.NET 1.0/1.1 die Daten als UTF-8 und ignoriert Zeichenketten, die in UTF-8 ungültig sind. Das Zeichen <, gefolgt von einem alphanummerischen Zeichen, wird von ASP.NET 1.1 nicht akzeptiert usw.

Für die manipulierten Header werden nur harmlose ASCII-Zeichen benötigt. Problematisch ist der Response-Body. Wird das Ergebnis im Internet Explorer angezeigt, kann der Body in UTF-7 kodiert werden. Dadurch wird jedes Unicode-Zeichen zu einer Folge von ASCII-Zeichen. Danach besteht keine Gefahr mehr, dass die Daten umkodiert werden oder einen Fehler verursachen.

Zu lange URLs
In manchen Fällen wird eine sehr lange HTTP-Response benötigt. Bei einem Angriff über HTTP-GET-Requests kann die dafür nötige lange URL zu Problemen führen, da manche beteiligte Systeme zu lange URLs zurückweisen. HTTP-POST-Requests sind davon nicht betroffen, da die Daten dort im Request-Body übertragen werden. Ist eine URL für einen GET-Requests zu lang, kann stattdessen oft ein POST-Request verwendet werden, da die Webanwendung nicht zwischen beiden Methoden unterscheidet. Ist dies nicht möglich, können die Daten eventuell in mehreren Headern übertragen und/oder so kodiert werden, dass nach einer Umkodierung durch den Webserver oder die Webanwendung die nötige Länge erreicht wird. Zum Beispiel wird ein vom Angreifer gesendetes " zu &quot;, wenn der Webserver es für den Response-Body als HTML-Entity kodiert – aus einem Byte werden sechs.

Erkennen der zweiten HTTP-Response
Für einen erfolgreichen Angriff muss das Angriffsziel (Cacheserver oder Webbrowser) zwei HTTP-Responses erkennen. Dies ist nicht so selbstverständlich, wie es nach dem Beispiel aus der letzten Woche aussieht. Der Erfolg hängt davon ab, wie die Antwort interpretiert und Ende bzw. Anfang einer HTTP-Response erkannt wird. In folgenden drei Fällen konnten HTTP-Response-Splitting-Angriffe erfolgreich durchgeführt werden [1, PDF]:

  • Erkennung an Nachrichtengrenzen: Die zweite Nachricht beginnt direkt nach dem Ende der ersten. In diesem Fall funktioniert der Angriff aus dem Beispiel der letzten Woche.
  • Erkennung an Puffergrenzen: Die erste Nachricht wird stückweise in einen Puffer fester Länge kopiert. Nach der Verarbeitung der Nachricht werden alle Teile einschließlich des letzten verworfen. Dabei kann der letzte Teil Daten enthalten, die logisch zur nächsten Nachricht gehören. In diesem Fall funktioniert das Beispiel nicht. Die Daten müssen so angepasst werden, dass die Länge der ersten HTTP-Response ein Vielfaches der Pufferlänge beträgt.
  • Erkennung an Paketgrenzen: Die Nachrichten werden paketweise gelesen. Die Reste des letzten Pakets der ersten Nachricht werden ignoriert, der Beginn der zweiten Nachricht wird im nächsten Paket erwartet. Abhängig vom Timing können zusätzliche Response-Daten ignoriert werden, bis der zweite Request verarbeitet wurde. Für einen erfolgreichen Angriff müssen sowohl die Aufteilung in Pakete als auch das Timing stimmen.

Vergiften von Webcaches
Die vergiftete HTTP-Response muss meist einen Last-Modified-Header mit einem Datum in der Zukunft enthalten, um gecached zu werden. Beim Vergiften von Browser-Caches kommen weitere Anforderungen hinzu: Da der Browser einen If-Modified-Since-Header in seinem Request mitschickt, muss der Angreifer sicher stellen, dass der Server mit dem HTTP-Status 304 (Unmodified) antwortet. Außerdem muss die angeforderte Ressource existieren und cachebar sein. Beim Vergiften von Cacheservern ist die Situation einfacher, da diese Browser-Requests nur an den Webserver weiterleiten, wenn sie explizit dazu aufgefordert werden oder der Cacheinhalt veraltet ist. Auch können auf dem Webserver nicht existierende Ressourcen vergiftet werden.

Einige Proxy-Server aktualisieren ihren Cache in regelmäßigen Abständen, indem sie die Requests direkt an den Webserver weiterleiten. In diesem Fall muss der Angreifer seinen Angriff regelmäßig wiederholen, um seine vergifteten Daten in den Cache zu schreiben.

Soviel zu den Schwierigkeiten des HTTP Response Splitting. Nächste Woche geht es um die praktische Durchführung.

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


Ihre Meinung ist uns wichtig!
Mobile Computing Heute & Morgen!
Nehmen Sie an unserer Umfrage zum Thema Mobile Computing in Deutschland teil und nutzen Sie die Chance eine Casio Exilim EX-Z1050-Digitalkamera zu gewinnen!

Konferenzen

BASTA! 2008

BASTA! 2008

22.-26. September 2008
Rheingoldhalle, Mainz

SQLCON 2008

SQLCON 2008

22.-26. September 2008
Rheingoldhalle, Mainz

IPC 2008

IPC 2008

27.-31. Oktober 2008
Rheingoldhalle, Mainz

AJAX IN ACTION 2008

AJAX IN ACTION 2008

28.-31. Oktober 2008
Rheingoldhalle, Mainz

EKON 12

EKON 12

28.-31. Oktober 2008
Congress Centrum, Mainz

W-JAX 2008

W-JAX 2008

3.- 7. November 2008
ArabellaSheraton Hotel München

SOACON 2008

SOACON 2008

3.- 7. November 2008
Arabella Sheraton Hotel, München

JAX Asia 2008

JAX Asia 2008

25.-28. November 2008
Singapore, Kuala Lumpur, Jakarta

Werbung
Top-Jobs

Gebit Solutions

Java Profis gesucht (m/w)

OLYMPUS EUROPA Holding GmbH

Web-Entwickler (m/w)

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Hueber Verlag GmbH & Co. KG

Webdesigner/ Webprogrammierer (m/w)

Magazine

Entwickler Magazin - Enterprise Technologies & Business Solutions

Entwickler Magazin

Enterprise Technologies & Business Solutions

dot.net magazin - die unabhängige Quelle für .NET-Technologien

dot.net magazin

Die Quelle für .NET-Technologien

Eclipse Magazin

Eclipse Magazin

Weltweit erstes Magazin für Eclipse-Entwickler

Java Magazin - Internet & Enterprise Technology

Java Magazin

Internet & Enterprise Technology

CREATE OR DIE - Ein Leben für die Kreativität

CREATE OR DIE

Ein Leben für die Kreativität

Business Technology - Management Magazin

Business Technology

Management Magazin

PHP Magazin - Professional PHP Development

PHP Magazin

Professional PHP Development

Bücher


hosted by HostEurope