Freitag, 21. November 2008

News

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

About Security #22: HTTP Response Splitting, 2

Welche Schwierigkeiten es beim in About Security #21 vorgestellten HTTP Response Splitting gibt, erfahren Sie in dieser Folge.

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

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
About Security: Die komplette Serie

In manchen Fällen wird eine sehr lange HTTP-Response benötigt. Bei einem Angriff über HTTP-GET-Requests kann der 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 ein URL für einen GET-Request 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 in About Security #21 aussieht. Der Erfolg hängt davon ab, wie die Antwort interpretiert und das Ende bzw. der Anfang einer HTTP-Response erkannt werden. In folgenden drei Fällen konnten HTTP-Response-Splitting-Angriffe erfolgreich durchgeführt werden (Amit Klein, "Divide and Conquer - HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics", (PDF)):

  • Erkennung an Nachrichtengrenzen: Die zweite Nachricht beginnt direkt nach dem Ende der ersten. In diesem Fall funktioniert der Angriff aus dem Beispiel in About Security #21.
  • 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 sicherstellen, 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.

Nachdem die Grundlagen und Schwierigkeiten des HTTP Response Splittings beschrieben wurden, geht es in der nächsten Folge um die praktische Durchführung eines solchen Angriffs.

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"

Kommentare

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!
OpenOffice.org Spezial

Konferenzen

JAX Asia 2008

JAX Asia 2008

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

BASTA! Spring 2009

BASTA! Spring 2009

23.-27. Februar 2009
Maritim Rhein-Main Hotel Wissenschaftsstadt Darmstadt

BASTA! Italia 2009

BASTA! Italia 2009

16.-18. März 2009
Holiday Inn EUR Parco dei Medici, Roma

PHPCon Italia 2009

PHPCon Italia 2009

18.-20. März 2009
Holiday Inn EUR Parco dei Medici, Roma

webinale 09

webinale 09

25.-27. Mai 2009
Berlin

Werbung
Top-Jobs

Signsoft GmbH

Java-Entwickler (m/w)

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (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