
Reproduzierbare KI-gestützte Wiederentdeckung des Heap-Pufferüberlaufs CVE-2026-42945 im nginx-Rewrite-Modul. Enthält Audit-Prompts, PoC-Trigger, ASan-Absturzreproduktion und technische Analyse für defensive Forschung.
Dieses Repository dokumentiert ein reproduzierbares, KI-gestütztes Schwachstellen-Wiederentdeckungsexperiment gegen das nginx ngx_http_rewrite_module, das später mit CVE-2026-42945 in Verbindung gebracht wurde.
Das Experiment ist bewusst eng gefasst. Die anfällige Datei src/http/ngx_http_script.c wurde dem Modell direkt zur Prüfung vorgelegt. Dies ist keine Behauptung, dass ein KI-System das Problem autonom im gesamten nginx-Codebase von Grund auf gefunden hat.
Der geprüfte Fehler ist ein Heap-Pufferüberlauf, der durch einen veralteten Zustand der Skript-Engine in der nginx-Rewrite-Verarbeitung verursacht wird.
Auf hoher Ebene:
rewrite-Ersatz, der ? enthält, setzt e->is_args = 1.e->is_args nach Abschluss des Rewrites nicht gelöscht.set-, if- oder Rewrite-Ausdruck, der einen unbenannten Regex-Capture wie $1 kopiert, kann den Zielpuffer so bemessen, als ob der Capture roh kopiert würde.e->is_args = 1 und führt URI-Escaping des Captures durch.Die lokale AddressSanitizer-Reproduktion bestätigt einen Heap-Pufferüberlauf in:
ngx_escape_uri
ngx_http_script_copy_capture_code
ngx_http_rewrite_handler
.
├── README.md
├── LICENSE
├── prompts/
│ ├── audit_prompt.md
│ └── poc_prompt.md
├── poc/
│ ├── trigger.py
│ ├── nginx.conf
│ ├── reproduce.sh
│ └── expected_output.txt
├── docs/
│ ├── technical-analysis.md
│ ├── vulnerability-breakdown.md
│ └── methodology.md
└── screenshots/
└── asan-crash.png
Der PoC ist für einen lokalen Laborbuild von anfälligem nginx mit aktiviertem AddressSanitizer ausgelegt. Er startet nginx auf 127.0.0.1:18080, sendet eine präparierte Anfrage an einen lokalen Server und gibt Absturznachweise aus.
Verwenden Sie einen betroffenen nginx-Quellbaum. Das Experiment wurde gegen nginx 1.30.0 validiert, das mit clang und ASan erstellt wurde:
./auto/configure \
--prefix=/tmp/nginx-asan-poc \
--with-cc-opt='-O0 -g -fsanitize=address -fno-omit-frame-pointer' \
--with-ld-opt='-fsanitize=address'
make -j"$(getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.ncpu)"
Aus diesem Repository:
NGINX_BIN=/path/to/vulnerable/nginx/objs/nginx ./poc/reproduce.sh
Wenn dieses Repository direkt im für die Validierung verwendeten nginx-Quellcheckout platziert wird, findet das Skript auch automatisch ../../objs/nginx.
Eine erfolgreiche Reproduktion gibt einen ASan-Bericht aus, der ähnlich aussieht wie:
ERROR: AddressSanitizer: heap-buffer-overflow
WRITE of size 1
#0 ngx_escape_uri ngx_string.c:1687
#1 ngx_http_script_copy_capture_code ngx_http_script.c:1399
#2 ngx_http_rewrite_handler ngx_http_rewrite_module.c:180
Siehe poc/expected_output.txt.

Die vom PoC verwendete nginx-Konfiguration ist bewusst klein:
location / {
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 "$myvar\n";
}
Der erste rewrite setzt e->is_args, da der Ersatz ? enthält. Der spätere set wertet $1 aus, während dieser veraltete Zustand noch vorhanden ist.
Der minimale Patch setzt das Argument-State-Flag der Skript-Engine zurück, wenn ein Regex-Rewrite abgeschlossen ist:
e->is_args = 0;
e->quote = 0;
Im für dieses Experiment verwendeten Quellbaum erscheint der Fix als Commit:
524977e7c534e87e5b55739fa74601c9f1102686
Rewrite: fixed escaping and possible buffer overrun
Der entscheidende Punkt ist nicht die Größe des Patches, sondern die Zustandsinvariante, die er wiederherstellt: Der Längendurchlauf und der Schreibdurchlauf müssen sich darüber einig sein, ob Captures als URI-Argumente kopiert werden.
Dieses Experiment verwendete einen hochmodernen Codierungsagenten als Prüfungsassistenten. Der Prompt wies das Modell explizit an, sich auf Speichersicherheitsprobleme in src/http/ngx_http_script.c zu konzentrieren und besonders auf Zweipass-Längen-/Schreibabweichungen zu achten.
Wichtige Einschränkungen:
Die genauen Prompts sind in prompts/audit_prompt.md und prompts/poc_prompt.md enthalten.
Dieses Repository ist für defensive Forschung, Patch-Validierung und Reproduzierbarkeit gedacht. Führen Sie den PoC nur gegen lokale Laborinstanzen aus, die Sie kontrollieren.
Die Dokumentation und das PoC-Framework in diesem Repository werden unter der MIT-Lizenz veröffentlicht. nginx selbst ist nicht enthalten und unterliegt seiner eigenen Lizenz.