Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
NGINX-ngx_http_rewrite_module-heap-buffer-overflow-CVE-2026-9256 — Proof-of-Concept für CVE-2026-9256, einen Heap-Pufferüberlauf in NGINX's ngx_http_rewrite_module. Demonstriert Worker-Absturz und Denial-of-Service über manipulierte URI mit überlappenden PCRE-Erfassungsgruppen. Enthält mehrstufige Verifizierung und Keep-Alive-Sondierung. | Kitploit
Tools/GitHubGitHub/w5m1n9/nginx-ngx_http_rewrite_module-heap-buffer-overflow-cve-2026-9256
SchwachstellenanalyseExploitationWebsicherheitFuzzingPenetrationstests
GitHubw5m1n9/nginx-ngx_http_rewrite_module-heap-buffer-overflow-cve-2026-9256

NGINX-ngx_http_rewrite_module-heap-buffer-overflow-CVE-2026-9256

Proof-of-Concept für CVE-2026-9256, einen Heap-Pufferüberlauf in NGINX's ngx_http_rewrite_module. Demonstriert Worker-Absturz und Denial-of-Service über manipulierte URI mit überlappenden PCRE-Erfassungsgruppen. Enthält mehrstufige Verifizierung und Keep-Alive-Sondierung.

Repository anzeigen
27vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-9256 NGINX ngx_http_rewrite_module PoC – Ableitung und Überlegungen

Anwendungsbereich: Nur für lokale Testumgebungen, autorisierte Replikationsumgebungen, Schwachstellenverifizierung und Analyse von Schutzregeln. Nicht gegen nicht autorisierte Ziele verwenden. Die PoC-Strategie in diesem Dokument verifiziert nur das aus der Ferne sichtbare Verhalten eines NGINX-Worker-Crashs, enthält keine RCE, ASLR-Umgehung oder stabile Exploit-Kette.

1. Hintergrund der Schwachstelle

CVE-2026-9256 ist eine Heap-basierte Pufferüberlauf-Schwachstelle im NGINX ngx_http_rewrite_module. Die Schwachstelle wird nicht einfach durch den Zugriff auf eine bestimmte URI ausgelöst, sondern hängt von einem spezifischen Rewrite-Konfigurationsmuster ab: Es gibt sich überschneidende PCRE-Erfassungsgruppen im Rewrite-Regex, und der Replacement-Teil referenziert mehrere Erfassungsvariablen, wie z. B. $1, $2.

Wenn ein Angreifer eine spezielle URI konstruiert, die die Rewrite-Logik in den relevanten Pfad führt, kann es bei der Verarbeitung des erfassten Inhalts, der Verkettung des Rewrite-Ergebnisses oder der URI/Parameter-Escape zu einer Diskrepanz zwischen der berechneten Länge und dem tatsächlichen Schreibvorgang kommen, was letztendlich zur Zerstörung des Heap-Speichers des Worker-Prozesses führt.

Daher liegt der Schlüssel dieser Schwachstelle nicht im Pfad /api selbst, sondern darin, ob in der Ziel-NGINX-Konfiguration eine anfällige Rewrite-Regel existiert, die durch eine Anfrage getroffen werden kann. Der im PoC standardmäßig verwendete /api-Pfad ist nur ein Beispielpfad in der aktuellen Replikationsumgebung. Bei tatsächlichen Tests muss der Anforderungspfad basierend auf der Rewrite-Regel in der NGINX-Konfiguration angepasst werden, die sich überschneidende Erfassungsgruppen enthält und mehrere Erfassungsvariablen referenziert.

Das aktuelle Ziel des PoC ist die Verifizierung des Worker-Crashs / Denial-of-Service-Verhaltens. Es wird nicht versucht, ein präzises Heap-Layout zu konstruieren, Rücksprungadressen oder Funktionszeiger zu überschreiben oder eine Remotecodeausführung nachzuweisen. Das auf der entfernten Seite stabil beobachtbare Indiz ist hauptsächlich: Die Trigger-Anforderungsverbindung wird abnormal getrennt, danach nimmt der NGINX-Dienst die Antwort wieder auf, und die Keep-Alive-Verbindung wird nach dem Auslösen durch den Worker-Crash unterbrochen.

2. Warum reicht ein einzelner HTTP-Statuscode nicht aus?

Nach dem Auslösen dieser Schwachstelle zeigt sich nicht zwangsläufig ein fester HTTP-Statuscode wie 500, 502 oder 400. Der Grund ist das Master-Worker-Modell von NGINX: Wenn ein Worker-Prozess abstürzt, startet der Master einen neuen Worker. Was der Angreifer auf der entfernten Seite sieht, ist normalerweise nicht, dass der gesamte Dienst vollständig unerreichbar ist, sondern dass eine bestimmte Verbindung plötzlich getrennt wird, ein Lese-Timeout auftritt, die Verbindung zurückgesetzt wird, und ein erneuter Zugriff auf / wieder eine normale Antwort liefert.

Daher kann der PoC nicht allein anhand des HTTP-Statuscodes einer einzelnen Anfrage entscheiden, ob die Schwachstelle existiert. Wenn nur eine lange URI gesendet wird, die Verbindung getrennt wird und dann direkt "Schwachstelle vorhanden" gefolgert wird, ist das Fehlalarmrisiko hoch. Eine getrennte Verbindung kann auch von Netzwerkfluktuationen, Proxy-Zeitüberschreitungen, Abfangen durch ein Zwischengerät, serverseitigem Rate-Limiting oder aktivem Schließen der Verbindung durch den Server herrühren.

Daher muss der PoC als mehrstufige Verifikation ausgelegt sein:

  1. Zunächst bestätigen, dass das Ziel aktiv ist.
  2. Dann bestätigen, dass der Beispiel-Rewrite-Pfad möglicherweise wirksam ist.
  3. Eine Überlauf-Trigger-Anfrage senden und beobachten, ob die Verbindung abnormal getrennt wird oder ein Timeout auftritt.
  4. Sofort eine normale Anfrage senden, um zu bestätigen, ob NGINX die Antwort wieder aufgenommen hat.
  5. Über Keep-Alive wiederholt verifizieren, ob die Worker-Verbindung nach dem Auslösen stabil ausfällt.

Nur wenn "Trigger-Verbindungsanomalie + anschließende Dienstwiederherstellung + mehrfacher Keep-Alive-Ausfall" gleichzeitig auftreten, kann zuverlässiger auf das Vorhandensein eines CVE-2026-9256-artigen Worker-Crash-Verhaltens geschlossen werden.

3. PoC-Konstruktionsansatz

Der zentrale Trigger-Pfad des aktuellen PoC ist:

GET /api/++++++++++++++++++++++++++++++++... HTTP/1.1
Host: 127.0.0.1:19321

Wobei /api/ das Beispiel-Routing in der aktuellen Testumgebung ist, um die Rewrite-Regel zu treffen, gefolgt von einer großen Anzahl von +-Zeichen. Die Standardanzahl beträgt 4096.

Die Wahl von + hat drei Hauptgründe:

Erstens ist + ein legales URI-Zeichen. Bei Verwendung mit einem normalen HTTP-Client wird es normalerweise nicht wie Leerzeichen, # usw. abgeschnitten oder zwangsweise umgeschrieben. Daher benötigt der aktuelle PoC nicht, wie bei einigen Request-Target-Bypass-Schwachstellen, einen Raw Socket, um eine illegale Request-Zeile zu konstruieren.

Zweitens kann eine große Anzahl sich wiederholender Zeichen den Rewrite-Erfassungsgruppen eine ausreichend lange Eingabe liefern, was den Ausgabeumfang der nachfolgenden Replacement-Verkettung oder Escape-Verarbeitung vergrößert und es so einfacher macht, eine Diskrepanz zwischen der berechneten Länge und dem tatsächlichen Schreibvorgang auszulösen.

Drittens ist die Payload-Struktur mit sich wiederholenden +-Zeichen einfach, was die Beobachtung in Paketmitschnitten, Logs und IDS-Regeln erleichtert und auch die Anpassung der Länge für Schwellenwerttests vereinfacht.

Es ist jedoch zu beachten, dass + nicht das einzige theoretische Auslöserzeichen der Schwachstelle ist. Die wahren Auslösebedingungen bleiben: "Treffen einer anfälligen Rewrite-Konfiguration + Eingabe, die in die relevanten Erfassungsgruppen gelangt + Rewrite-Ausgabeverarbeitung löst Heap-Überlauf aus". In verschiedenen Umgebungen müssen der Auslöserpfad, der Zeichentyp und der Längenschwellenwert möglicherweise angepasst werden.

3.1 Erläuterung anderer möglicher Auslöserzeichen

Der aktuelle PoC verwendet standardmäßig eine große Anzahl von + als Auslöserzeichen, aber das bedeutet nicht, dass nur + das Problem auslösen kann. + ist nur das Zeichen, das sich am besten für einen allgemeinen PoC eignet, da es in URIs relativ stabil ist, leicht von normalen HTTP-Clients gesendet werden kann und seine Charakteristik in Paketmitschnitten klar ist.

Vom Prinzip der Schwachstelle her, solange ein Zeichen während der NGINX-Rewrite-Verarbeitung in die NGX_ESCAPE_ARGS-Escape-Logik gelangt und von einem ursprünglichen 1-Byte-Zeichen auf eine %XX-Form mit 3 Bytes expandiert wird, kann es zu einer Diskrepanz zwischen "berechnetem Längenwert und tatsächlichem Schreibwert" kommen. Das heißt, der Auslösepunkt ist nicht + selbst, sondern "das dichte Auftreten von Zeichen, die durch den Args-Modus escaped werden können".

Neben + sollten theoretisch besonders folgende Zeichen berücksichtigt werden:

Leerzeichen: 0x20
#: 0x23
%: 0x25
&: 0x26
?: 0x3F
Steuerzeichen: 0x00-0x1F
High-Byte-Zeichen: 0x7F-0xFF

Wenn diese Zeichen in die relevante Erfassung gelangen und im Rewrite-Replacement als Args-Inhalt für die Escape-Verarbeitung behandelt werden, erzeugen sie alle einen ähnlichen Expansionseffekt. Zum Beispiel:

+      -> %2B
&      -> %26
%      -> %25
#      -> %23
?      -> %3F
Leerzeichen -> %20

Jedes Auftreten eines solchen Zeichens expandiert theoretisch von 1 Byte auf 3 Bytes, was die tatsächliche Schreiblänge um 2 Bytes erhöht. Wenn die Eingabe viele solcher Zeichen enthält, kann die tatsächliche Schreiblänge die zuvor falsch berechnete Pufferlänge deutlich überschreiten, was das Auslösen eines Heap-Buffer-Overflows erleichtert.

Allerdings ist die Verwendbarkeit verschiedener Zeichen in einem PoC nicht identisch.

Tool herunterladen