
Kontrolliertes NGINX-HTTP/2-Frame-Injektionslabor zur Validierung des CVE-2026-42926-Patches und für defensive Forschung.
Ein kontrolliertes Cybersicherheits-Labor zum Validieren und Vergleichen von Verhalten im Zusammenhang mit CVE-2026-42926, einem HTTP/2-Frame-Injection-Problem, das bestimmte NGINX- Versionen bei Verwendung einer verwundbaren Proxy-Konfiguration betrifft.
Dieses Repository ist ausschließlich für defensive Forschung, Patch-Validierung, Konfigurationsprüfung und kontrollierte Labor-Reproduktion bestimmt.
Klassifizierung: HTTP/2-Frame-Injection
Betroffene Versionen: NGINX1.29.4bis1.30.0
Behobene Versionen: NGINX1.30.1+/1.31.0+
Verwenden Sie dieses Projekt nur in einer isolierten Laborumgebung, die Ihnen gehört oder für die Sie ausdrücklich zum Testen autorisiert sind.
Führen Sie dieses Projekt nicht gegen Systeme Dritter, öffentliche Infrastruktur, gemeinsame Umgebungen oder Produktionsdienste ohne schriftliche Genehmigung aus.
Empfohlene Isolierung:
Das Labor prüft, ob eine Ziel-NGINX-Binärdatei und -Konfiguration die Bedingungen erfüllen, die zur Reproduktion des Problems erforderlich sind, sendet eine präparierte Anfrage an die Test- Location und untersucht einen kontrollierten Upstream-Logger auf Hinweise, dass injizierte HTTP/2-frame-ähnliche Bytes die Upstream-Seite erreicht haben.
Das normale Validierungsmuster ist:
Erwartetes Ergebnis:
| Datei | Beschreibung |
|---|---|
README.md | Projektdokumentation. |
LICENSE | MIT-Lizenz. |
Dockerfile | Erstellt ein in sich geschlossenes Labor-Image mit NGINX 1.29.4, PHP CLI/cURL, Python und den Projekt-Skripten. |
docker-compose.yml | Startet den verwundbaren NGINX-Dienst, den Upstream-Frame-Logger und einen optionalen Validierungs-Runner. |
cve_2026_42926_lab.php | Hauptskript zur Labor-Validierung. Es prüft Versions-/Konfigurationsvoraussetzungen, sendet die präparierte Anfrage, untersucht Upstream-Logs und gibt einen Befund zurück. |
nginx_vulnerable.conf | Beispielhafte NGINX-Konfiguration, die das verwundbare Proxy-Muster enthält, das sowohl für verwundbare als auch für gepatchte Vergleichsläufe verwendet wird. |
docker/nginx_vulnerable.docker.conf | Docker-spezifische NGINX-Konfiguration, die dasselbe verwundbare Muster und die Compose-Dienstermittlung verwendet. |
nginx_config_verify.sh | Helfer, der prüft, ob eine Ziel-NGINX-Konfiguration das erforderliche verwundbare Proxy-Muster enthält. |
upstream_frame_logger.py | Kontrollierter Raw-HTTP/2-Upstream-Logger zum Erfassen und Untersuchen der von NGINX empfangenen Frames. |
run_lab_comparison.sh | Orchestriert Vergleichsläufe zwischen verwundbarer und gepatchter Version. |
.dockerignore | Hält generierte Logs und IDE-Metadaten aus dem Docker-Build-Kontext heraus. |
bashpython3phpFür den containerisierten Workflow:
Die Beispielkonfiguration lauscht auf Port 80, was üblicherweise Root-Rechte erfordert.
Für ein unprivilegiertes lokales Labor ändern Sie listen 80; in nginx_vulnerable.conf auf
einen verfügbaren hohen Port wie 8080 und verwenden Sie dann die passende Ziel-URL im
PHP-Befehl.
Machen Sie die Shell-Skripte ausführbar:
chmod +x nginx_config_verify.sh run_lab_comparison.sh
Bestätigen Sie, dass PHP cURL-Unterstützung hat:
php -m | grep -i curl
Bestätigen Sie, dass jede NGINX-Binärdatei ihre Version ausgeben kann:
/path/to/nginx -V
Die bereitgestellte nginx_vulnerable.conf enthält das erforderliche Testmuster:
location /exploit {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 2;
proxy_set_body $request_body;
proxy_set_header Host $host;
proxy_set_header Content-Length $content_length;
}
Wichtige Details:
proxy_http_version 2 aktiviert HTTP/2-Proxying zum Upstream-Logger.proxy_set_body $request_body verwendet einen clientgesteuerten Anforderungstext.client_max_body_size 20m erlaubt den präparierten 16-MiB-Anforderungstext, der vom
Validierungsskript verwendet wird.127.0.0.1:8081.Die Docker-spezifische Konfiguration in docker/nginx_vulnerable.docker.conf behält dasselbe
verwundbare Proxy-Muster bei, lauscht jedoch auf Container-Port 8080 und leitet als Proxy
an den Compose-Dienstnamen upstream:8081 weiter.
Das Dockerfile erstellt NGINX 1.29.4 aus dem Quellcode und installiert die für das Labor erforderlichen PHP/Python-
Werkzeuge. Compose führt dann drei Dienste aus demselben
Image aus:
upstream: Raw-HTTP/2-Frame-Loggernginx: verwundbares NGINX 1.29.4 unter Verwendung von docker/nginx_vulnerable.docker.confrunner: einmaliger PHP-ValidierungsbefehlErstellen Sie das Labor-Image:
docker compose build
Starten Sie den Upstream-Logger und das verwundbare NGINX:
docker compose up -d upstream nginx
Bestätigen Sie die gebündelte NGINX-Version:
docker compose exec nginx nginx -V
Führen Sie das Validierungsskript im Compose-Netzwerk aus:
docker compose --profile run run --rm runner
Der Runner verwendet diese Argumente im Container:
php /lab/cve_2026_42926_lab.php \
http://nginx:8080/exploit \
/lab/upstream_logs \
/lab/nginx_config_verify.sh \
/usr/local/nginx/sbin/nginx \
/lab/docker/nginx_vulnerable.docker.conf \
/exploit
Generierte Upstream-Logs werden in das Host-Verzeichnis geschrieben:
./upstream_logs/
Der NGINX-Dienst ist auch für den Host verfügbar unter:
http://localhost:8080/version
Stoppen und entfernen Sie die Labor-Container:
docker compose down
Starten Sie den kontrollierten Upstream-Logger:
python3 upstream_frame_logger.py 8081 ./upstream_logs
Starten Sie in einem anderen Terminal NGINX mit der Beispielkonfiguration:
/path/to/nginx -c "$PWD/nginx_vulnerable.conf"
Führen Sie das Validierungsskript aus:
php cve_2026_42926_lab.php \
http://localhost/exploit \
./upstream_logs \
./nginx_config_verify.sh \
/path/to/nginx \
"$PWD/nginx_vulnerable.conf" \
/exploit
Stoppen Sie NGINX nach dem Lauf:
/path/to/nginx -s stop
Wenn Sie NGINX so geändert haben, dass es auf einem anderen Port lauscht, aktualisieren Sie das erste Argument. Zum Beispiel:
php cve_2026_42926_lab.php http://localhost:8080/exploit ./upstream_logs ./nginx_config_verify.sh /path/to/nginx "$PWD/nginx_vulnerable.conf" /exploit
Legen Sie Pfade zu den beiden NGINX-Binärdateien fest und führen Sie das Vergleichs-Harness aus:
VULNERABLE_NGINX=/usr/local/nginx_1.29.4/sbin/nginx \
PATCHED_NGINX=/usr/local/nginx_1.30.1/sbin/nginx \
bash run_lab_comparison.sh
Optionale Konfigurationsüberschreibungen:
VULNERABLE_NGINX=/path/to/vulnerable/nginx \
PATCHED_NGINX=/path/to/patched/nginx \
VULNERABLE_CONFIG="$PWD/nginx_vulnerable.conf" \
PATCHED_CONFIG="$PWD/nginx_vulnerable.conf" \
bash run_lab_comparison.sh
Das Vergleichsskript schreibt: