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
CVE-2026-42533-Config-Scanner — Statischer Konfigurationsscanner, der nginx-Konfigurationen markiert, die anfällig für den complex_value two-pass capture-clobbering Bug sind (Regex-Map + Regex-Capture → Heap-Überlauf / Informationsleck). | Kitploit
Tools/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
Statische AnalyseSchwachstellenscannerCode-AnalyseKonfigurationsprüfungWebsicherheitDevSecOpsFehlkonfiguration
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

Statischer Konfigurationsscanner, der nginx-Konfigurationen markiert, die anfällig für den complex_value two-pass capture-clobbering Bug sind (Regex-Map + Regex-Capture → Heap-Überlauf / Informationsleck).

Repository anzeigen
29543vor 3 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

nginx capture-clobber Scanner

Ein schreibgeschützter statischer Scanner, der nginx-Konfigurationen kennzeichnet, die für die Fehlerklasse complex_value des Zwei-Pass-Capture-Clobbering anfällig sind (F5/nginx SIRT Advisory, Juli 2026). Er parst deine Konfiguration und meldet das anfällige Muster mit Begründung und Fundstelle. Er nutzt nichts aus und berührt den laufenden Server nicht.

Einzelne Datei, nur Standardbibliothek, Python 3.6+.

Vollständige Ausarbeitung der Schwachstelle: https://cyberstan.co.uk/nginx-rce/

Der Fehler

nginx erzeugt viele Direktivenwerte in zwei Durchgängen. Ein LEN-Durchgang misst die Länge und reserviert einen Puffer, dann schreibt ein VALUE-Durchgang hinein. Regex-Captures ($1 bis $9 oder benannte (?P<name>...)) werden aus einem pro Request geteilten Zustand gelesen. Eine map, deren Match-Schlüssel ein regulärer Ausdruck ist, führt in dem Moment, in dem ihre Variable ausgewertet wird, einen frischen PCRE-Match aus, und dieser Match überschreibt den geteilten Capture-Zustand. Wenn ein Capture im LEN-Durchgang gemessen wird und dann eine Regex-map läuft, bevor der VALUE-Durchgang dieses Capture neu schreibt, stimmen die beiden Durchgänge nicht überein:

  • Clobber macht den Wert länger als gemessen: Heap-Pufferüberlauf (vom Angreifer kontrollierter Out-of-Bounds-Schreibzugriff)
  • Clobber macht den Wert kürzer als gemessen: nicht initialisierter Heap wird an den Client zurückgegeben (Info-Leak von libc-/Heap-Zeigern)

Beide Richtungen sind remote auslösbar, wenn die Map-Eingabe vom Angreifer beeinflussbar ist ($request_body, $http_*, $arg_*, $uri, $ssl_preread_server_name und so weiter).

Was als anfällig gilt

Der Scanner kennzeichnet eine Location oder einen Server, wenn all dies in einem einzigen Zwei-Pass-Puffer in der ausnutzbaren Reihenfolge zusammentrifft:

  1. Capture-Quelle: eine Regex-location ~, server_name ~, rewrite, if (... ~ ...) oder eine Regex-map mit einer Capture-Gruppe.
  2. Clobber-Auslöser: eine map (http oder stream) mit einem ~- oder ~*-Regex-Match-Schlüssel, referenziert über ihre Ausgabevariable.
  3. Zwei-Pass-Senke, die sowohl eine Capture-Referenz als auch die Regex-Map-Variable verwendet:
    • Einzelwert-Direktiven (return, set, add_header, proxy_method, proxy_pass, rewrite, index und andere): beide Referenzen im selben Wert.
    • die Param-/Header-Familien (proxy_set_header, proxy_set_body, fastcgi_param, scgi_param, uwsgi_param, grpc_set_header): diese erzeugen einen Puffer pro Request für die gesamte Familie, sodass die beiden Referenzen in separaten Direktiven derselben Location stehen können.
  4. Reihenfolge: Das Capture muss vor der Regex-Map ausgewertet werden. Eine Regex-Map läuft einmal und cached, daher liest map-vor-capture einen konsistenten Zustand und ist nicht anfällig. Der Scanner meldet diese als cleared (sicher, aber fragil, nicht umsortieren).

Verwendung

# scan a single config (follows include directives by default)
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf

# scan a directory (uses nginx.conf if present, else all *.conf)
python3 nginx_capture_clobber_scan.py /etc/nginx/

# scan several roots
python3 nginx_capture_clobber_scan.py site-a.conf site-b.conf

# machine-readable output
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --json

# do not expand include directives
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --no-includes

Optionen

OptionWirkung
--jsonGibt einen JSON-Bericht statt Text aus.
--no-includesFolgt keinen include-Direktiven.

Exit-Codes

CodeBedeutung
0Keine verwundbare Konfiguration gefunden.
1Mindestens eine verwundbare Konfiguration gefunden.
2Verwendungsfehler (kein Pfad angegeben oder keiner gefunden).

In CI verwendbar, da eine verwundbare Konfiguration mit einem Nicht-Null-Code beendet wird:

python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf || echo "review needed"

Ausgabe

Der Textmodus gibt für jeden Fund Folgendes aus: Datei und Zeile, den umschließenden Gültigkeitsbereich, die Sink-Direktive, die beteiligten Capture- und Map-Variablen, die auslösende Map sowie eine einzeilige Begründung. Ein als sicher eingestufter Abschnitt listet Koexistenzen in sicherer Reihenfolge auf. --json erzeugt:

{
  "vulnerable": true,
  "findings": [
    {
      "file": "/etc/nginx/conf.d/api.conf",
      "line": 12,
      "scope": "location ~ ^/api/(.+)$",
      "directive": "proxy (family buffer)",
      "captures": ["$1"],
      "map_vars": ["$is_bot"],
      "triggers": ["$is_bot <- regex-map on $http_user_agent [nginx.conf:30]"],
      "reason": "..."
    }
  ],
  "cleared_safe_order": [],
  "regex_maps": [],
  "missing_includes": []
}

Behebung der gefundenen Probleme

  1. Den Vendor-Patch anwenden (nginx 1.30.4 stable / 1.31.3 mainline, NGINX Plus R36 P7 / 37.0.3.1). Dies ist die einzige vollständige Behebung. Der Patch fügt einen Boundary-Guard (ngx_http_script_check_length()) hinzu, der verhindert, dass der VALUE-Pass über den zugewiesenen Puffer hinausschreibt, und berechnet die zurückgegebene String-Länge aus den tatsächlich geschriebenen Bytes statt aus der Messung des LEN-Passes, wodurch sowohl die Overflow- als auch die Info-Leak-Richtung geschlossen wird.
  2. Zwischenzeitliche Config-Härtung (Defence in Depth, kein Ersatz für den Patch):
    • Referenzieren Sie keine Regex-map-Variable in derselben Location oder demselben Puffer wie eine $1- bis $9- oder Named-Capture-Referenz.
    • Verwenden Sie nicht dieselbe (?P<name>...)-Gruppe über mehrere Regex-Maps hinweg.
    • Halten Sie Capture-Refs und Regex-Map-Refs aus derselben proxy_set_header- oder fastcgi_param-Familie heraus.

Einschränkungen

  • Statische Analyse: Sie liest die Config, nicht das Laufzeitverhalten. Sie kann keine Werte auflösen, die durch dynamisch set-Variablen erzeugt werden.
  • Nicht lesbare include-Ziele (zum Beispiel absolute Pfade, die lokal nicht existieren) werden unter missing_includes gemeldet und nicht stillschweigend übersprungen. Führen Sie das Tool auf dem Host aus, auf dem die Config aufgelöst wird, um vollständige Abdeckung zu erhalten.
  • Ein gemeldeter Capture-before-Map-Treffer kann zur Laufzeit entschärft sein, wenn diese Map- Variable bereits früher in derselben Anfrage ausgewertet wurde (sie wäre dann bereits gecacht). Der Scanner meldet diese dennoch, was die konservative Wahl für einen Security-Self-Scan ist.

Referenz

Schwachstellen-Write-up und Exploit-Kette: https://cyberstan.co.uk/nginx-rce/

Tool herunterladen