Am 14. April veröffentlichte Microsoft eine Warnung zu einer Sicherheitslücke (mittlerweile als CVE-2015-1635 bezeichnet) über ein Problem, das möglicherweise eine Remotecodeausführung ermöglicht, wenn ein Angreifer eine speziell gestaltete HTTP-Anfrage an ein betroffenes Windows-System sendet. Wenn das sofortige Patchen Ihrer Windows-Produktionsserver keine Option ist, können NGINX und NGINX Plus Sie vor Angriffen schützen.
Zum Zeitpunkt des Schreibens dieses Artikels wurden noch keine spezifischen Details zu dieser Sicherheitslücke veröffentlicht. Berichten zufolge versuchen Angreifer jedoch, anfällige Systeme zu finden, indem sie HTTP-Anfragen mit sehr großen Range-Requests senden, die einen Pufferüberlauf auslösen und einen Absturz des Windows-Systems verursachen können.
Benutzern wird dringend empfohlen, den Patch von Microsoft anzuwenden, um diese Sicherheitslücke zu schließen. Wenn Sie den Patch jedoch nicht auf allen Ihren Produktionssystemen anwenden können und NGINX oder NGINX Plus zum Lastenausgleich oder zur Weiterleitung des Datenverkehrs zu diesen Systemen verwenden, reicht eine einfache Konfigurationsänderung aus, um die an anfällige Systeme gesendeten Sonderanforderungen abzufangen und zu beheben.
Mattias Geniar hat den Angriffsverkehr analysiert und berichtet, dass HTTP-Anfragen mit einem großen Byte-Bereich im Range
-Header den Absturz auslösen:
GET / HTTP/1.1rnHost: stuffrn
Bereich: Bytes=0-18446744073709551615rn
rn
Die einfachste Lösung besteht darin, mit der Direktive „proxy_set_header“
den Range
-Header auf „“
(die leere Zeichenfolge) zu setzen. Dadurch wird der Header effektiv gelöscht, bevor die HTTP-Anforderung an den in der Direktive „proxy_pass“
genannten Windows-Server weitergeleitet wird:
Server { abhören 80;
Standort / {
Proxy_Set_Header Bereich "";
Proxy_Pass http://windowsserver:80;
}
}
Wenn Ihre Anwendung Bytebereichsunterstützung erfordert, können Sie die Map-
Direktive verwenden, um alle Zeichenfolgen, die einer großen Ganzzahl ähneln, durch die leere Zeichenfolge zu ersetzen, bevor Sie mit der Direktive proxy_set_header
den Range
-Header festlegen:
map $http_range $saferange { "~d{10,}" ""; # wenn es mit einer Zeichenfolge aus 10 oder mehr Ganzzahlen übereinstimmt, entfernen Sie es
default $http_range;
}
server {
listen 80;
location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}
Alternativ können Sie HTTP-Code zurückgeben444
wenn der Wert in der Bereichsüberschrift
einer großen Ganzzahl ähnelt. Code444
weist NGINX und NGINX Plus an, die Client-Verbindung sofort zu schließen, ohne etwas zurückzugeben.
Server { abhören 80;
wenn ($http_range ~ "d{9,}") {
return 444;
}
Standort / {
Proxy-Passwort http://windowsserver:80;
}
}
Gehen Sie auf Nummer sicher und wenden Sie den Patch an. Wenn Sie dazu jedoch nicht sofort in der Lage sind, können NGINX und NGINX Plus dabei helfen, die potenzielle Lücke zu schließen.
Um NGINX Plus auszuprobieren, starten Sie noch heute Ihre kostenlose 30-Tage-Testversion oder kontaktieren Sie uns für eine Demo.
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."