Montag, 20. August 2012


Topthema

Donnerstag, 18. August 2005 | Topthema

About Security #19: Spielarten des HTTP Request Smuggling, 2

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

Das in About Security #17 beschriebene HTTP Request Smuggling erlaubt auch die T�uschung von Firewalls und Intrusion-Detection- bzw. Prevention-Systemen. Wie das funktioniert, erfahren Sie in dieser Folge.

T�uschen der Firewall

Check Points Firewall FW-1 (FP4-R55W Beta) pr�ft eingehende HTTP-Requests auf vielf�ltige Weise, um m�gliche Angriffe zu erkennen. Dazu werden gespeicherte Signaturen unerw�nschter Aktionen mit den HTTP-Requests verglichen. Durch HTTP Request Smuggling k�nnen diese Schutzfunktionen umgangen werden.

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

Folgendes Beispiel (nach dem in About Security #17 erw�hnten Whitepaper von Watchfire (PDF) basiert auf einem IIS-5.0-Webserver, der von einer FW-1-Firewall gesch�tzt wird. Der IIS enth�lt einen Fehler bei der Verarbeitung von POST-Requests mit sehr langem Body: Nach 48 KByte (49152 Bytes) wird der Body abgeschnitten, wenn der Content-Type des Request nicht vom erwarteten Typ ist. Empf�ngt der IIS z.B. einen POST-Request f�r eine .asp-Seite mit einer Body-L�nge von 48 KByte + x Byte ohne passenden Content-Type, werden die x Bytes als neuer Request betrachtet, w�hrend die FW-1 sie als Bestandteil des Body betrachtet.

Im Folgenden soll /seite.asp eine .asp-Seite auf dem Webserver sein. Die folgenden Requests werden �ber die FW-1-Firewall an den IIS-Webserver gesendet:

 1 POST /seite.asp HTTP/1.1
2 Host: test
3 Connection: Keep-Alive
4 Content-Length: 49223
5 [CRLF]
6 aaa...aaa [49151 mal "a"]
7 POST /seite.asp HTTP/1.0
8 Connection: Keep-Alive
9 Content-Length: 36
10 [CRLF]
11 POST /seite.asp HTTP/1.0
12 Wegdamit:
13 POST /seite.asp?cmd.exe HTTP/1.0
14 Connection: Keep-Alive
15 [CRLF]

Jede Zeile mit Ausnahme der zw�lften endet mit einem CRLF ("\r\n"). In Zeile 12 befindet sich ein Leerzeichen hinter Wegdamit:, aber kein CRLF.

Die FW-1-Firewall parst diese Requests folgenderma�en: Der erste Request hat eine Content Length von 49.223 Bytes. Zeile 6 (49.151 mal a) und Zeile 7�10 (insgesamt 72 Bytes) werden als Body des ersten Request betrachtet. Als Zweites wird der Request ab Zeile 11 geparst. Das POST in Zeile 13 wird wegen des fehlenden CRLF in Zeile 12 als Wert des dortigen Wegdamit:-Headers betrachtet. Der zweite Request endet daher mit Zeile 15. Die Firewall w�rde das Muster cmd.exe in Zeile 13 als Nimda-Wurm erkennen, wenn es Bestandteil eines URL w�re. Da es hier aber als Teil des Headers betrachtet wird, wird es nicht erkannt. Daher wird cmd.exe durch die Firewall geschmuggelt.

About Security: Die komplette Serie

Der IIS-Webserver parst den ersten Request als POST-Request f�r eine .asp-Seite. Da der Request nicht den erwarteten Content-Type: application/x-www-form-urlencoded-Header enth�lt wird der Body nach 49.152 Bytes beendet. Der zweite Request beginnt daher in Zeile 7 und hat eine Content-Length von 36 Bytes. Als Body werden die Zeilen 11 und 12 betrachtet. Die Zeilen 13�15 werden danach als dritter Request geparst, sodass das cmd.exe durch die FW-1-Firewall zum IIS-Webserver geschmuggelt wurde. Genauso k�nnen andere b�sartige URLs durch die Firewall geschmuggelt werden.

Zuletzt noch eine �bersicht �ber die geparsten Header:

1. Request 2. Request 3. Request
IIS/5.0 Zeilen 1�6 Zeilen 7�12 Zeilen 13�15
FW-1 R55W Zeilen 1�10 Zeilen 11�15

Die Schwachstelle in FW-1 wurde von Check Point behoben.

Weitere Angriffsm�glichkeiten

Au�er den bisher vorgestellten M�glichkeiten f�r HTTP Request Smuggling hat Watchfire weitere Anomalien gefunden, die f�r einen Angriff ausgenutzt werden k�nnen (Quelle wie oben):

  • Bei Requests mit zwei Content-Length-Headern werden von verschiedenen Servern nicht dieselben Header verwendet (Beispiele in About Security #17 und #18).
  • Von einem als HTTP-Proxy eingesetzten Apache vor Version 2.1.6 wurden bei Requests, die sowohl einen Transfer-Encoding: chunked-Header als auch einen Content-Length-Header enthalten, die verschiedenen Body-Teile zu einem Body zusammengesetzt. Es wurde aber weder ein eigener Content-Length-Header hinzugef�gt noch ein bereits vorhandener Content-Length-Header angepasst oder gel�scht.
  • Eine Header-Zeile mit einem einzelnen CR, gefolgt von einem CRLF, wird von manchen Servern als HTTP-Header-Zeile betrachtet, w�hrend andere darin das Ende des Headers erkennen. Zusammen mit unterschiedlichen Interpretationen von Leerzeichen im Header k�nnen die Angriffe durchgef�hrt werden.
  • Bei GET-Requests mit Content-Length-Header wird vom DeleGate-Cache-Server kein Body verarbeitet, w�hrend manche Webserver einen erwarten.
  • CRLF Leerzeichen CRLF werden von der Check Point FW-1 und Squid in bestimmten F�llen als eine Fortsetzung des vorhergehenden Headers angesehen, w�hrend der IIS 5.0 darin das Ende des Headers erkennt.
  • Wie bereits im obigen Beispiel gezeigt, schneidet der IIS bei einem sehr langen Body ohne passenden Content-Type-Header den Body bei 49.152 Bytes ab.

Nachdem Sie nun wissen, was HTTP Request Smuggling ist und welche Angriffe dar�ber m�glich sind, geht es in der n�chsten Folge um das Erkennen und Verhindern des HTTP Request Smuggling.

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

Folgende Links könnten Sie auch interessieren