Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-42533-Config-Scanner — Scanner statico di configurazione che segnala le configurazioni nginx vulnerabili al bug complex_value di capture-clobbering a due passaggi (regex map + cattura regex → heap overflow / info leak). | Kitploit
Strumenti/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
Analisi StaticaScanner di VulnerabilitàAnalisi del CodiceAudit di ConfigurazioneSicurezza WebDevSecOpsConfigurazione Errata
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

Scanner statico di configurazione che segnala le configurazioni nginx vulnerabili al bug complex_value di capture-clobbering a due passaggi (regex map + cattura regex → heap overflow / info leak).

Vedi Repository
295433 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

scanner capture-clobber per nginx

Uno scanner statico in sola lettura che segnala configurazioni nginx vulnerabili alla classe di bug di capture-clobbering a due passate complex_value (avviso F5/nginx SIRT, luglio 2026). Analizza la tua configurazione e segnala il pattern vulnerabile con il motivo e la posizione. Non sfrutta nulla e non tocca il server in esecuzione.

File singolo, solo libreria standard, Python 3.6+.

Analisi completa della vulnerabilità: https://cyberstan.co.uk/nginx-rce/

Il bug

nginx costruisce molti valori di direttiva in due passate. Una passata LEN misura la lunghezza e alloca un buffer, poi una passata VALUE vi scrive dentro. Le catture regex ($1 a $9, o quelle con nome (?P<name>...)) vengono lette da uno stato condiviso per-richiesta. Una map la cui chiave di corrispondenza è un'espressione regolare esegue una nuova corrispondenza PCRE nel momento in cui la sua variabile viene valutata, e quella corrispondenza sovrascrive lo stato condiviso delle catture. Se una cattura viene misurata nella passata LEN e poi una map regex viene eseguita prima che la passata VALUE riscriva quella cattura, le due passate non concordano:

  • il clobber rende il valore più lungo di quanto misurato: heap buffer overflow (scrittura fuori dai limiti controllata dall'attaccante)
  • il clobber rende il valore più corto di quanto misurato: heap non inizializzato restituito al client (fuga di informazioni di puntatori libc/heap)

Entrambe le direzioni sono attivabili da remoto quando l'input della map è influenzato dall'attaccante ($request_body, $http_*, $arg_*, $uri, $ssl_preread_server_name, e così via).

Cosa conta come vulnerabile

Lo scanner segnala una location o un server quando tutti questi elementi finiscono in un unico buffer a due passate, nell'ordine sfruttabile:

  1. Sorgente di cattura: una location ~ regex, server_name ~, rewrite, if (... ~ ...), o una map regex con un gruppo di cattura.
  2. Trigger del clobber: una map (http o stream) con una chiave di corrispondenza regex ~ o ~*, referenziata dalla sua variabile di output.
  3. Sink a due passate che usa sia un riferimento di cattura sia la variabile della map regex:
    • direttive a valore singolo (return, set, add_header, proxy_method, proxy_pass, rewrite, index, e altre): entrambi i riferimenti nello stesso valore.
    • le famiglie param/header (proxy_set_header, proxy_set_body, fastcgi_param, scgi_param, uwsgi_param, grpc_set_header): queste costruiscono un buffer per richiesta per l'intera famiglia, quindi i due riferimenti possono trovarsi in direttive separate nella stessa location.
  4. Ordine: la cattura deve essere valutata prima della map regex. Una map regex viene eseguita una volta e memorizzata nella cache, quindi map-prima-della-cattura legge uno stato coerente e non è vulnerabile. Lo scanner segnala questi casi come cleared (sicuri ma fragili, non riordinare).

Utilizzo

# 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

Opzioni

OpzioneEffetto
--jsonEmette un report JSON invece del testo.
--no-includesNon segue le direttive include.

Codici di uscita

CodiceSignificato
0Nessuna configurazione vulnerabile trovata.
1Almeno una configurazione vulnerabile trovata.
2Errore di utilizzo (nessun percorso fornito o nessuno trovato).

Utilizzabile in CI, poiché una configurazione vulnerabile esce con codice diverso da zero:

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

Output

La modalità testo stampa, per ogni rilevamento: file e riga, l'ambito contenitore, la direttiva sink, le variabili di capture e map coinvolte, la map che ha attivato il rilevamento e un motivo su una riga. Una sezione "cleared" elenca le coesistenze in ordine sicuro. --json produce:

{
  "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": []
}

Correzione di ciò che rileva

  1. Applicare la patch del fornitore (nginx 1.30.4 stable / 1.31.3 mainline, NGINX Plus R36 P7 / 37.0.3.1). Questa è l'unica correzione completa. La patch aggiunge una protezione sui limiti (ngx_http_script_check_length()) che impedisce al passaggio VALUE di scrivere oltre il buffer allocato, e calcola la lunghezza della stringa restituita dai byte effettivamente scritti anziché dalla misurazione del passaggio LEN, chiudendo sia la direzione dell'overflow sia quella dell'info-leak.
  2. Rafforzamento temporaneo della configurazione (difesa in profondità, non un sostituto della patch):
    • Non fare riferimento a una variabile map regex nella stessa location o nello stesso buffer di un riferimento $1-$9 o a un riferimento con nome di cattura.
    • Non riutilizzare lo stesso gruppo (?P<name>...) attraverso più map regex.
    • Tenere i riferimenti di cattura e i riferimenti a map regex fuori dalla stessa famiglia proxy_set_header o fastcgi_param.

Limitazioni

  • Analisi statica: legge la configurazione, non il comportamento a runtime. Non può risolvere valori prodotti da variabili impostate dinamicamente con set.
  • I target include non leggibili (ad esempio percorsi assoluti che non esistono localmente) vengono segnalati in missing_includes, non saltati silenziosamente. Eseguirlo sull'host in cui la configurazione viene risolta per una copertura completa.
  • Un rilevamento di cattura-prima-della-map segnalato può essere disinnescato a runtime se quella variabile map era già stata valutata in precedenza nella stessa richiesta (sarebbe già in cache). Lo scanner li segnala comunque, che è la scelta conservativa per un'auto-scansione di sicurezza.

Riferimento

Analisi della vulnerabilità e catena di exploit: https://cyberstan.co.uk/nginx-rce/

Scarica lo strumento