NGINX Rift – neuer NGINX-Exploit
(github.com/DepthFirstDisclosures)- NGINX Rift ist ein Remote-Code-Execution-PoC für CVE-2026-42945, einen kritischen Heap-Buffer-Overflow in NGINX
ngx_http_rewrite_module - Die Schwachstelle ermöglicht unauthentifizierte Remote Code Execution auf Servern, die die Direktiven
rewriteundsetverwenden - Das Problem ist ein 2008 eingeführter Bug, der dadurch entsteht, dass der Längenberechnungs-Pass und der Kopier-Pass der NGINX-Skript-Engine das Flag
is_argsunterschiedlich behandeln - Wenn der
rewrite-Ersetzungsstring ein?enthält, wird im Haupt-Engineis_argsgesetzt, die Längenberechnung läuft jedoch in einer neu mit 0 initialisierten Sub-Engine und gibt daher nur die Länge der ursprünglichen Captures zurück - In der Kopierphase werden
ngx_escape_uriundNGX_ESCAPE_ARGSmitis_args = 1aufgerufen, wodurch jedes escapebare Byte auf 3 Byte erweitert wird und der zu klein allokierte Heap-Puffer mit vom Angreifer kontrollierten URI-Daten überläuft - Der Exploit verwendet Heap Feng Shui über mehrere Requests hinweg, um den
cleanup-Pointer eines benachbartenngx_pool_tzu korrumpieren; da in URI-Bytes keine Null-Bytes eingebracht werden können, erfolgt das Sprayen über den POST-Body - Der korrumpierte Pointer wird auf ein gefälschtes
ngx_pool_cleanup_sumgeleitet und so vorbereitet, dass bei der Zerstörung des Poolssystem()aufgerufen wird - Neben CVE-2026-42945 wurden auch drei weitere Memory-Corruption-Probleme – CVE-2026-42946, CVE-2026-40701 und CVE-2026-42934 – vom Sicherheitsanalyse-System von depthfirst nach einmaligem Onboarding des NGINX-Quellcodes autonom entdeckt
- Betroffen sind NGINX Open Source 0.6.27–1.30.0 und NGINX Plus R32–R36; als behobene Versionen werden Open Source 1.31.0/1.30.1 sowie Plus R36 P4/R35 P2/R32 P6 genannt
- Die vollständige Herstellerwarnung steht unter https://my.f5.com/manage/s/article/K000160932, technische Details im technical write-up
- Der PoC wurde unter Ubuntu 24.04.3 LTS getestet und beschreibt den Ablauf zum Starten eines verwundbaren NGINX-Containers und zum Öffnen einer Shell in der Reihenfolge
./setup.sh,docker compose -f env/docker-compose.yml up,python3 poc.py --shell
1 Kommentare
Hacker-News-Kommentare
Als Sicherheitsverantwortlicher bin ich es leid, wie viele Reaktionen ausdrücklich oder implizit davon ausgehen, dass dieses Problem viel weniger beängstigend sei, nur weil der veröffentlichte Exploit ASLR nicht umgeht
Im Originaltext wird behauptet, dass es eine Möglichkeit gibt, ASLR bei diesem Angriff zuverlässig zu umgehen, und ich halte das auch ohne Belege für eine plausible Standardannahme
ASLR ist nur eine Defense-in-Depth-Technik, die Exploits erschweren soll, und in den meisten Fällen wird mit genug Zeit und Können irgendwann ein ASLR-Bypass hinzugefügt
Wegen LLM-Agenten sinkt auch die Hürde bei Zeit und Können alle paar Wochen, daher ist es nur eine Frage der Zeit, bis ein vollständig weaponisierter Exploit auftaucht, ob öffentlich oder privat
Die Aussage „Wenn ASLR aktiviert ist, ist es nicht gefährlich“ ist eindeutig falsch und für Menschen, die so etwas glauben, sehr schädlich
Der falsche Glaube, dass man sich um Sicherheitslücken nicht kümmern müsse, weil Mitigations Exploits erschweren können, hat in der Vergangenheit bereits großen Schaden angerichtet
Moderne Mitigations sind zwar erfreulich, aber man sollte trotzdem so schnell wie möglich patchen, und als Vendor sollte man einen Vulnerability-Report nicht als ungültig abtun, nur weil der Forscher keinen ASLR-Bypass gezeigt hat, sondern die eigentliche Ursache beheben
Im Moment wirken die Voraussetzungen allerdings etwas speziell
Ich habe nginx zehn Jahre lang in verschiedenen Konfigurationen verwendet, aber
rewriteundsetnie gemeinsam eingesetztUnd sie sagen natürlich auch immer „cyber“
ASLR ist wie ein zusätzliches Passwort, das getroffen werden muss, hat eine gewisse Entropie und ist normalerweise stabil
Wenn die Schwachstelle keinen Information-Disclosure-Teil hat, dann mitigiert ASLR sie entweder vollständig, oder es wird eine zweite Schwachstelle benötigt
Das ist eine andere Diskussion
ASLR kann einzelne Schwachstellen vollständig mitigieren, auch wenn es keine ganze Exploit-Chain verhindern kann
Um schnelles Patchen zu begründen, wäre es meiner Meinung nach trotzdem besser, auf die Möglichkeit einer zweiten Schwachstelle zu verweisen, die ein Information Leak erzeugt
Exploit-Chains sind bei allen Arten von Schwachstellen riskant
Wirklich schädlich ist es, zufälligen Internetkommentaren mit voller Überzeugung zu glauben
Wenn man die Fähigkeit entwickelt, so etwas zu durchschauen, hilft das nicht nur in der Sicherheit, sondern auch anderswo
Genau deshalb lese ich solche Berichte, und man sollte sie ernst nehmen
Sonst wird die Maschine bald kompromittiert
In letzter Zeit wirkt es so, als würden viele veröffentlichte Remote-Code-Execution-Exploits ohne Vorwarnung erscheinen, und ich wünschte, man würde einem zumindest ein paar Minuten zum Upgrade geben
Das erinnert an die Zeit ohne Sicherungsmechanismen bei Veröffentlichungen Ende der 1980er und Anfang der 1990er, als remote ausnutzbare sendmail-Bugs nur so herauskamen
Wenn man solche Berichte nicht liest oder zu spät liest, können Millionen Systeme kompromittiert werden
nginx hat derzeit etwa 39–43 % Marktanteil bei öffentlich zugänglichen Webservern, daher ist das ziemlich ernst
Das hier ist ziemlich übel, hat aber Voraussetzungen
Es ist eine
rewrite-Direktive mit einem Fragezeichen im Ersetzungsstring nötig, gefolgt von einerset-Direktive, die auf eine Regex-Capture-Group verweistBeispiel:
set $var $1Außerdem setzt der Proof of Concept deaktiviertes ASLR voraus
Selbst wenn man es manuell abschaltet, wäre nginx für mich nicht der naheliegende Kandidat dafür
rewriteheutzutage nicht kaum noch verwendet?Das wirkt wie etwas aus den alten PHP- und Apache-Zeiten
Hier ist die offizielle F5-Seite: https://my.f5.com/manage/s/article/K000161019
Wie auch anderswo geschrieben wurde, schützt ASLR
Als Mitigation, bis korrigierte Builds für die betroffenen Plattformen vorliegen, wird empfohlen, in
rewrite-Definitionen benannte Captures statt unbenannter Captures zu verwendenDort steht sinngemäß: „Um die Schwachstelle in diesem Beispiel zu mitigieren, ersetzen Sie
$1und$2durch passende benannte Captures wie$user_idund$section“F5 hat 1.31.0 und 1.30.1 gepatcht
OpenResty hat Patches für 1.27 und 1.29: https://github.com/openresty/openresty/commit/ee60fb9cf645c9...
Den Fortschritt bei OpenResty, dem auf Nginx basierenden Lua-Anwendungsserver, kann man hier verfolgen: https://github.com/openresty/openresty/issues/1119
Der Proof of Concept deaktiviert ASLR: https://github.com/DepthFirstDisclosures/Nginx-Rift/blob/mai...
forkerzeugt und erhalten daher das gleiche Memory LayoutGegen die Worker kann man unbegrenzt Crashes auslösen
Wahrscheinlich lässt sich das nutzen, um eine Read-Oracle zu bauen
Zumindest ist ein zuverlässiger Denial of Service möglich
Die vollständige Analyse von Depth First: https://depthfirst.com/research/nginx-rift-achieving-nginx-r...
Gibt es unter den guten Alternativen zu Apache und Nginx etwas, das in einer speichersicheren Sprache geschrieben ist und nicht viele Sicherheitslücken hat?
Ich habe mir kurz Jetty in Java und Caddy in Go angesehen, aber Jetty hat eine Historie anderer Schwachstellenarten wie Shell Injection, daher bin ich nicht sicher, ob das wirklich besser ist
Infrastrukturbetreiber sollten sich heute an aktive Verteidigung durch MAC gewöhnen, also SELinux und AppArmor
Früher war das mit mehr Reibung verbunden, aber heute gibt es mehr Werkzeuge, die die Nutzung erleichtern
https://presentations.nordisch.org/apparmor/
https://github.com/nobody43/apparmor-profiles/blob/master/ng...
https://github.com/nobody43/apparmor-suggest
Zur Einordnung: Beide Repositories stammen von mir
Dass beide so lange ihren Marktanteil halten konnten, ist eher ein gutes Zeichen
Das Modell, statt eines ordentlichen Plugin-Systems je nach gewünschter Plugin-Kombination Tausende Binärdateien zu erzeugen, gefällt mir aber nicht besonders
Wenn man aus dem Source baut, ist es trotzdem ziemlich sauber und einfach
Alternative HTTP-Server reduzieren den Umfang meist stark, daher muss man zuerst entscheiden, welche Funktionen man braucht
Ich habe nicht viele Diskussionen über HTTP-Server in speichersicheren Sprachen gesehen
Die drei großen C-basierten Server Apache, nginx und lighttpd sind alle ziemlich solide, und es scheint nicht viele zu geben, die allein wegen der Sprache auf ein neues Projekt wechseln wollen
Außerdem akzeptiert man bei den meisten speichersicheren Sprachen oft auch deren teils umfangreiche Runtime oder Virtual Machine samt Zubehör
Bei einem Java-Webserver besteht die Chance, dass er log4j verwendet, wie so oft bei beliebigen Java-Projekten
„Der Exploit verwendet request-übergreifendes Heap Feng Shui“, zum ersten Mal sehe ich feng shui in diesem Zusammenhang so verwendet
Ist das in Debian 12 gepatcht?
Und wenn man nirgends
rewriteodersetverwendet, kann man dann davon ausgehen, dass man nicht betroffen ist?Bei Debian scheint trixie noch nicht gepatcht zu sein
seteinzusetzenDie meisten nginx-Anwendungsfälle terminieren TLS und leiten Anfragen an node/php/go usw. weiter
Daher dachte ich, es gäbe wahrscheinlich irgendwo eine
set-Zeile mit von Angreifern kontrollierten Daten, etwaproxy_set_header X-Host $host;Korrektur: Benannte Captures scheinen nicht betroffen zu sein
Wenn es nirgendwo ein
$1gibt, sollte es in Ordnung seinBessere Links:
https://depthfirst.com/research/nginx-rift-achieving-nginx-r... (https://news.ycombinator.com/item?id=48126029)
https://depthfirst.com/nginx-rift (https://news.ycombinator.com/item?id=48123365)