
NGINX RCE Exploits
RCE-Proof-of-Concept für CVE-2026-42945, einen kritischen Heap-Pufferüberlauf in NGINX' ngx_http_rewrite_module, der 2008 eingeführt wurde. Der Fehler ermöglicht nicht authentifizierte Remote-Codeausführung gegen Server, die rewrite- und set-Direktiven verwenden.
Diese Schwachstelle — zusammen mit drei weiteren Speicherkorruptionsproblemen (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — wurde autonom vom Sicherheitsanalysesystem von depthfirst nach einem einzigen Klick zum Onboarding des NGINX-Quellcodes entdeckt.
Möchten Sie solche Probleme in Ihrem eigenen Code finden? Probieren Sie dasselbe System unter https://depthfirst.com/open-defense aus.
Die Skript-Engine von NGINX verwendet einen zweistufigen Prozess: Zuerst wird die benötigte Puffergröße berechnet, dann werden die Daten kopiert. Das is_args-Flag wird auf der Haupt-Engine gesetzt, wenn ein rewrite-Ersatz ? enthält, aber der Längenberechnungslauf läuft auf einer frisch genullten Unter-Engine. Also:
is_args = 0 → gibt die rohe Erfassungslänge zurück.is_args = 1 → ruft ngx_escape_uri mit NGX_ESCAPE_ARGS auf und erweitert jedes escapbare Byte auf 3 Bytes.Der Kopiervorgang überläuft den zu kleinen Heap-Puffer mit angreiferkontrollierten URI-Daten. Die Ausnutzung verwendet Cross-Request-Heap-Feng-Shui, um den cleanup-Zeiger eines angrenzenden ngx_pool_t zu korrumpieren (gesprüht über POST-Bodies, da URI-Bytes keine Nullbytes enthalten können), und leitet ihn auf ein gefälschtes ngx_pool_cleanup_s um, das bei der Pool-Zerstörung system() aufruft.
Lesen Sie mehr über diesen Fehler in unserem technischen Bericht.
| Produkt | Betroffen | Behoben in |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Vollständige Herstellerberatung: https://my.f5.com/manage/s/article/K000160932
K000161616: NGINX ngx_http_v3_module-Schwachstelle — HTTP/3 QPACK weist den Sitzungs-insert_buffer aus dem Pool eines unidirektionalen Encoder-Streams zu. Das Schließen dieses Streams gibt den Pool frei, während die Sitzung einen baumelnden Zeiger behält, sodass ein späterer Encoder-Stream einen Heap-Use-after-Free im NGINX-Worker auslöst.
K000162097: NGINX map-Direktive und Regex-Abgleich-Schwachstelle — Der Regex-Abgleich der map-Direktive mit Erfassungsvariablen kann einen Heap-Pufferüberlauf im NGINX-Worker-Prozess verursachen.
Der Fehler liegt in der zweistufigen Bewertung komplexer Werte der Stream-Skript-Engine. In einer anfälligen stream-Konfiguration mit ssl_preread wird angreiferkontrolliertes TLS-SNI in regexgestützte Variablen eingespeist. NGINX berechnet zuerst die Länge des Ausgabepuffers und kopiert dann die Ausgabe. Ein map-Regex kann den globalen Erfassungszustand zwischen diesen beiden Läufen aktualisieren: Der Längenlauf berücksichtigt einen kleinen Wert, während der Kopierlauf eine größere Regex-Erfassung wie $1 liest, was zu einem Heap-Schreibzugriff außerhalb der Grenzen im Worker führt.
Das zugehörige CVE-2026-42533/-PoC ist ein Exploit der vollständigen Kette. Es verwendet das Stream-Leak-Primitiv, um Heap- und libc-Basen für die ASLR-Umgehung wiederherzustellen, sprüht gefälschte ngx_pool_cleanup_s-Datensätze über HTTP-Anfrage-Bodies und verwendet dann den Überlauf, um einen angrenzenden NGINX-Pool-Cleanup-Zeiger zu korrumpieren. Wenn der korrumpierte Pool zerstört wird, wird die Cleanup-Verteilung auf libc system() umgeleitet, das den bereitgestellten Befehl ausführt.