URL dieser Newsmeldung:

18.08.2005

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


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"




© 2008 Software & Support Verlag GmbH. Vervielfältigung nur mit Genehmigung des Verlags. Fragen?