IIS in Gefahr über die HTTP Protokoll-Stack Schwachstelle

Originalartikel von Virendra Bisht, Vulnerability Researcher

Ungepatchte Versionen von Microsofts Internet Information Services (IIS)-Webserver sind anfällig für Remote Denial-of-Service-Angriffe, die besonders schwerwiegend sind, wenn es sich um kritische Systeme handelt. Die Sicherheitslücke, die in MS15-034 im Rahmen des April Patch Tuesday geschlossen wurde, kann zu einem Bluescreen-Fehler, auch bekannt als Blue Screen of Death (BSOD), führen.

Es gibt zwar keine Hinweise auf eine mögliche Remote-Codeausführung, doch ist es dennoch sehr wichtig, den Update einzuspielen, vor allem auf Systeme, die 100prozentige Verfügbarkeit fordern.

Folgende Windows-Versionen sind in Gefahr:

  • Windows 7
  • Windows Server 2008 R2
  • Windows 8/8.1
  • Windows Server 2012/2012 R2

Der HTTP Protokoll-Stack

Der IIS-Webserver hat einen HTTP Listener, der Teil des Networking Subsystems von Windows ist. Er wird als Gerätetreiber im Kernel-Modus implementiert und als HTTP Protokoll-Stack (HTTP.sys) bezeichnet. Seine Aufgabe ist es, den HTTP Request zu parsen und eine Antwort an den Client zu liefern.

HTTP.sys bietet folgende Vorteile:

  • Kernel-Modus Caching: Requests für gecachte Antworten werden geliefert, ohne in den User-Modus umzuschalten.
  • Kernel-Modus Request Queuing: Requests verursachen weniger Overhead beim Kontextwechsel, weil der Kernel Anfragen direkt an den richtigen Worker-Prozess weiterleitet. Ist kein solcher Prozess zur Annahme einer Anfrage verfügbar, so wird sie in die Kernel-Modus Request Queue gestellt, bis ein Worker-Prozess sie aufnimmt.
  • Request-Vorverarbeitung und Sicherheitsfilterung.

Die Sicherheitslücke ist dann riskant, wenn Kernel Caching in IIS aktiviert ist. Dies ist in IIS standardmäßig der Fall. Einige Module in IIS führen Aufgaben aus, die in Zusammenhang mit Caching in der Request-Verarbeitungs-Pipeline stehen. Caching verbessert die Performance durch Speichern der verarbeiteten Informationen (etwa von Webseiten) im Hauptspeicher des Servers. Dieselben Daten werden wiederverwendet, wenn sie in anderen Anfragen erforderlich sind. IIS Manager besitzt eine Fähigkeit namens „Output Caching”, die folgende Einstellungen verwendet:


Bild 1. http-Anfrage, die die Sicherheitslücke anstößt

Exploit und Angriffsszenario

Die Sicherheitslücke wird mithilfe des Range HTTP Headers ausgenutzt. Der HTTP Header erlaubt es Clients, bestimmte Inhalte vom Server anzufordern. Beispielsweise kann ein Client, der nur wenige Bytes einer Datei benötigt, bestimmte Teile anfordern statt der gesamten Datei. RFC 2616 (definiert HTTP) erklärt die Range Header. Es gibt einen entsprechenden Header (Accept-Ranges), den Server dazu verwenden, um Clients darüber zu benachrichtigen, dass sie den Range Header unterstützen.

Der Range Header umfasst üblicherweise Werte wie die folgenden:

Range: bytes=124-5656

Range: bytes=0-

Gibt es keine Obergrenze im Range Header, so erhält der Client die gesamte Datei. Damit ist aber der Header eigentlich unnütz. Doch was geschieht, wenn ein Angreifer eine sehr hohe Obergrenze setzt?

Ein Angreifer müsste lediglich eine speziell erstellte http-Anfrage mit einem speziellen Range-Wert senden, und könnte damit einen Overflow der Range-Variablen auf dem Server auslösen. Dies wurde bereits von öffentlich erhältlichem Exploit Code getan:


Bild 2. HTTP Request, der die Sicherheitslücke anstößt

Der cURL-Befehl kann ebenfalls zum Versenden desselben Exploit genutzt werden:

$ curl -v example.com  -H „Host: example.com“ -H „Range: bytes=0-18446744073709551615“

Die Obergrenze des Range Headers ist 0xFFFFFFFFFFFFFFFF, der höchste 64-Bit unsignierte Integer. Dieser hohe Wert verursacht einen Integer-Overflow. Ein auf diese Art von Anfragen anfälliger Server antwortet mit der http-Statuszeile “Requested Range Not Satisfiable”.


Bild 3. Antwort eines nicht gepatchten Servers auf Exploit Code

Dies bedeutet, dass der Client einen Teil der Datei anfordert, der über der Obergrenze der Datei auf dem Server liegt. Ein erfolgreicher Angriff könnte einen BSOD verursachen und zu einem DoS führen. Microsoft erklärte, dass diese Sicherheitslücke auch eine Remote-Codeausführung ermöglichte, obwohl kein Exploit bekannt ist, der das tun kann.

Nach dem Update werden nun die HTTP Header auf Fehler geprüft:


Bild 4. Antwort an Exploit Code durch einen nicht gepatchten Server

Eine Antwort, die die Zeile “The request has an invalid header name” umfasst, bedeutet, dass der Server gepatcht ist und der Angriff fehlschlägt. Proof-of-Concept Code nutzt diese Information bereits:


Bild 5. Proof of Concept-Quellcode

Fazit

Diese Schwachstelle lässt sich sehr einfach ausnutzen. Ein nicht authentifizierter Angreifer könnte leicht aus der Ferne einen DoS-Angriff auf Webserver mit einer angreifbaren Version von IIS starten. Auch wenn es derzeit keine bekannten Exploits gibt, die Remote Codeausführung möglich machen, so kann sich das künftig ändern. Deshalb ist es empfehlenswert, den Patch aufzuspielen, und wenn dies im Moment nicht möglich ist, so sollte IIS-Caching deaktiviert werden.

Deep Security schützt die Kunden mit folgender Regel:

  • 1006620 – Microsoft Windows HTTP.sys Remote Code Execution Vulnerability (CVE-2015-1635)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*