
Audit CVE per server web nginx e Apache basato sui trigger. Va oltre il semplice confronto delle versioni verificando se il percorso di codice vulnerabile è effettivamente raggiungibile nella tua configurazione. Classifica i risultati come Attivi / Latenti / Non verificati. File singolo, Python 3.5+, nessuna dipendenza.
Non chiederti se sei vulnerabile. Chiediti se sei sfruttabile.
Uno strumento Python in un singolo file che controlla nginx e Apache rispetto a CVE note verificando sia la versione installata sia se il percorso di codice vulnerabile è effettivamente raggiungibile tramite la tua configurazione.
La maggior parte degli scanner CVE si ferma al confronto delle versioni: "nginx 1.18.0 — CVE-2026-42945, gravità HIGH, sei vulnerabile." Ma molte CVE richiedono uno specifico pattern di configurazione per essere sfruttabili. Uno scanner che ignora la configurazione ti inonda di avvisi rossi che non riflettono il rischio reale — e, peggio, può nascondere i rischi latenti che diventerebbero reali se la tua configurazione cambiasse domani.
web_server_audit risponde a due domande distinte per ogni CVE:
Combinando queste risposte si ottengono tre classificazioni oneste:
| Classificazione | Significato |
|---|
| 🔴 Rischio di sfruttamento attivo | Versione vulnerabile e trigger presente. Sfruttabile oggi. |
| 🟡 Rischio latente | Versione vulnerabile, nessun trigger. Diventa sfruttabile se modifiche alla configurazione introducono il pattern. |
| ⚪ Non verificato | Configurazione non leggibile; stato sconosciuto. |
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
| CVE | Gravità | Pattern di trigger |
|---|---|---|
| CVE-2026-42945 (Rift) | HIGH | rewrite + capture senza nome ($1,$2) + ? nella sostituzione |
| CVE-2026-42946 | MEDIUM | scgi_pass o uwsgi_pass in uso |
| CVE-2026-40701 | MEDIUM | ssl_stapling on + resolver insieme |
| CVE-2026-42934 | LOW | direttive charset/charset_types/source_charset |
L'elenco delle CVE Apache è attualmente vuoto ma la struttura è pronta — vedi Estensione qui sotto.
Oltre alle CVE, lo strumento riporta anche:
/proc/sys/kernel/randomize_va_space) — l'ASLR completo riduce materialmente la sfruttabilità RCE dei bug di memoriaesm-infra e esm-appsnginx, apache2, systemctl, ss, journalctl quando disponibili; altrimenti salta i controlli in modo pulito# Compact report (default — hides OK lines)
sudo python3 web_server_audit.py
# All findings including OK lines
sudo python3 web_server_audit.py --verbose
# No ANSI colors (good for pipes, logs, CI output)
sudo python3 web_server_audit.py --no-color
# Machine-readable JSON
sudo python3 web_server_audit.py --json
| Codice | Significato |
|---|---|
| 0 | Nessun problema |
| 1 | Solo avvisi o risultati critici non CVE |
| 2 | Almeno una CVE è attivamente sfruttabile |
Il codice di uscita 2 è un naturale segnale di errore CI/CD.
========================================================================
Web Server Audit - 2026-05-16T01:24:55
Host: web-prod-01
web_server_audit.py v1.0.0 - SiberSAN - MIT License
========================================================================
[system]
------------------------------------------------------------------------
[OK] OK ASLR fully enabled (randomize_va_space=2)
[i] INFO OS: Ubuntu 18.04.6 LTS
[!] WARN Ubuntu 18.04 is in ESM-only support
[nginx] version 1.18.0 (active)
------------------------------------------------------------------------
[i] INFO nginx listening on: 0.0.0.0:80, 0.0.0.0:443
[i] INFO CVE-2026-42945 (HIGH): version vulnerable but NOT triggered
Trigger: rewrite + unnamed capture ($1,$2) + '?' in replacement
Evidence: No rewrite directives in configuration
[i] INFO CVE-2026-42946 (MEDIUM): version vulnerable but NOT triggered
[!] WARN nginx installed from PPA (1.18.0-3ubuntu1+bionic1)
========================================================================
Real-risk summary
------------------------------------------------------------------------
ACTIVE EXPLOITATION RISK: none detected.
LATENT RISK - vulnerable version, no trigger in config (3):
- [nginx] CVE-2026-42945 (HIGH)
- [nginx] CVE-2026-42946 (MEDIUM)
- [nginx] CVE-2026-42934 (LOW)
These become exploitable if config changes introduce the trigger.
Mitigation: config-change discipline + plan upgrade.
========================================================================
Findings: 0 critical, 2 warnings
========================================================================
Aggiungere una nuova CVE richiede due passaggi.
1. Scrivi una funzione di trigger che riceve l'intero testo di configurazione (output di nginx -T) e restituisce (triggered: bool, evidence: str):
def _trigger_my_cve(conf):
hits = [l for l in conf.splitlines() if re.search(r'risky_directive', l)]
if hits:
return True, "Found: " + hits[0]
return False, "Pattern not present"
2. Aggiungi la voce a NGINX_CVES (o APACHE_CVES):
{
"id": "CVE-XXXX-NNNNN",
"name": "Descriptive name",
"severity": "HIGH",
"affected": ("1.10.0", "1.25.0"),
"fixed_in": ["1.25.1"],
"trigger_desc": "Human-readable trigger description",
"trigger_fn": _trigger_my_cve,
},
Tutto qui. Il framework gestisce automaticamente classificazione, formattazione dell'output, JSON, codici di uscita e riepilogo esecutivo.
--verbose per ispezionare i dettagli in caso di dubbi.Pull request, issue, nuovi rilevatori di CVE e supporto per ulteriori server web (lighttpd, Caddy, HAProxy, ecc.) sono tutti benvenuti.
Quando proponi un nuovo rilevatore di CVE, includi:
Rilasciato sotto la Licenza MIT.
Copyright (c) 2026 SiberSAN