
Toolkit Python per auditare Apache HTTP Server contro CVE-2026-23918 (double-free RCE in HTTP/2) e altri 4 CVE correlati. Scanner passivo con verifica ALPN + auditor locale in sola lettura. Nessun exploit.
Strumenti di audit difensivo per CVE-2026-23918 (Apache HTTPD HTTP/2 double-free RCE) e quattro CVE correlate divulgate nell'avviso di sicurezza del 4 maggio 2026 della Apache Software Foundation.
| CVE | Gravità | Componente | Impatto | Versioni affette |
|---|---|---|---|---|
| CVE-2026-23918 | Alta (CVSS 8.8) | HTTP/2 | Double Free / RCE | Solo 2.4.66 |
| CVE-2026-24072 | Media | mod_rewrite (ap_expr) | Escalation di privilegi | ≤ 2.4.66 |
| CVE-2026-28780 | Bassa | mod_proxy_ajp | Heap Buffer Overflow | ≤ 2.4.66 |
| CVE-2026-29168 | Bassa | mod_md (OCSP) | Esaurimento risorse | 2.4.30 – 2.4.66 |
| CVE-2026-29169 | Bassa | mod_dav_lock | NULL Ptr Deref / DoS | ≤ 2.4.66 |
Tutti i problemi sono risolti in Apache HTTP Server 2.4.67.
Questi strumenti sono pensati per essere usati solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. La scansione non autorizzata potrebbe essere illegale nella tua giurisdizione.
La toolkit è difensiva per progettazione:
Server: standard e utilizza la normale ALPN TLS — lo stesso meccanismo usato da ogni browser moderno per negoziare HTTP/2..
├── apache_passive_audit.py # Audit esterno degli asset (banner-grab + ALPN)
├── apache_local_audit.py # Audit locale su host / via SSH
├── LICENSE # MIT
├── .gitignore
└── README.md
python3 predefinito di Ubuntu 18.04 e tutte le versioni successive.git clone https://github.com/sibersan/cve-2026-23918.git
cd cve-2026-23918
chmod +x apache_passive_audit.py apache_local_audit.py
apache_passive_audit.pyLegge l'intestazione HTTP Server: per rilevare la versione di Apache e la confronta con la tabella CVE. Inoltre, per target HTTPS, esegue una negoziazione ALPN TLS standard per determinare se HTTP/2 è esposto — questa è la precondizione chiave affinché CVE-2026-23918 sia sfruttabile. Nessun payload di exploit viene inviato.
Lo script offre h2 e http/1.1 nell'estensione ALPN dell'handshake TLS (RFC 7301). La scelta del server è la risposta standard e inequivocabile alla domanda "HTTP/2 è abilitato?" — usata da ogni browser moderno e curl. Non attiva la vulnerabilità né alcun comportamento anomalo.
Il verdetto di rischio riflette questo:
# Singolo target
python3 apache_passive_audit.py -t https://web.example.com
# Più target
python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com
# File di target, parallelo, output CSV + JSON
python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json
# CI / adatto ai log (senza colori)
python3 apache_passive_audit.py -f targets.txt --no-color
Formato targets.txt (un target per riga, # per commenti):
https://www.example.com
intranet.example.local:8443
# vecchio server di staging
http://10.0.5.12
| Codice | Significato |
|---|---|
| 0 | Tutti i target sicuri |
| 1 | Almeno un target SCONOSCIUTO o ERRORE |
| 2 | Almeno un target VULNERABILE o |
ServerTokens Prod o Minimal nascondono la versione — lo script restituisce onestamente SCONOSCIUTO. Usa l'audit locale per confermare.apache_local_audit.pyViene eseguito sul host target (o tramite SSH) e ispeziona il binario Apache, la versione, i moduli caricati e la configurazione HTTP/2. Valuta anche le precondizioni di sfruttabilità: ad esempio, se la versione è 2.4.66 ma HTTP/2 è disabilitato, il rischio per CVE-2026-23918 viene declassato di conseguenza.
sudo python3 apache_local_audit.py
# Report JSON (per inventario centralizzato)
sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json
# Percorso binario personalizzato
sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd
httpd -v / apache2 -v — versionehttpd -V — informazioni di build, HTTPD_ROOT, SERVER_CONFIG_FILEapache2ctl -M o httpd -M — moduli caricatidpkg-query / rpm -q — versione del pacchettoInclude/IncludeOptional (inclusi sites-enabled/, mods-enabled/ di Debian) → direttiva Protocols (h2 / h2c / http/1.1)| Flag | Descrizione |
|---|---|
--binary | Percorso del binario Apache (sovrascrive il rilevamento automatico) |
--json | Output report JSON |
--no-color | Disabilita output colorato |
| Codice | Significato |
|---|---|
| 0 | SICURO |
| 1 | PATCH NECESSARIO o SCONOSCIUTO |
| 2 | VULNERABILE o A RISCHIO |
sudo/root è raccomandato per la lettura completa della configurazione. Senza di esso, alcuni file in sites-enabled/, mods-enabled/ o /etc/httpd/conf.d/ potrebbero risultare illeggibili.
Per eseguire l'audit locale su più host e raccogliere i report centralmente, un esempio ad-hoc con Ansible:
ansible all -i inventory.ini -b -m script \
-a "apache_local_audit.py --json /tmp/apache_audit.json --no-color"
ansible all -i inventory.ini -b -m fetch \
-a "src=/tmp/apache_audit.json dest=./reports/ flat=no"
I file JSON raccolti possono essere uniti con jq o un piccolo script Python.
Per CVE-2026-23918 (fino alla patch):
h2 e h2c dalla direttiva Protocols nella configurazione, oppure sudo a2dismod http2 su Debian/Ubuntu, quindi ricaricare il servizio.mod_dav_lock se non in uso (CVE-2026-29169)..htaccess (CVE-2026-24072).Avviso ufficiale: https://httpd.apache.org/security/vulnerabilities_24.html
I pull request sono benvenuti. Quando si aggiunge una nuova CVE, si prega di:
CVE_TABLE con l'intervallo di versioni affette e la lambda match.needs appropriato per i controlli delle precondizioni (modulo caricato, protocollo abilitato, ecc.).from __future__ import annotations, generics PEP 585 (list[int]), subprocess.run(capture_output=True) e @dataclass.MIT © 2026 SiberSAN
Questo software è fornito "così com'è", senza alcuna garanzia. Validare in un ambiente di test prima dell'uso in produzione. L'utente si assume ogni responsabilità legale per qualsiasi utilizzo contro sistemi non autorizzati.
| Flag | Descrizione |
|---|
-t, --target | Singolo target (può essere ripetuto) |
-f, --file | File con lista di target |
-o, --csv | Output report CSV |
--json | Output report JSON |
--timeout | Timeout richiesta in secondi (default 10) |
-w, --workers | Thread worker paralleli (default 10) |
--no-color | Disabilita output colorato |
A RISCHIO| Livello | Significato |
|---|
VULNERABILE | La versione corrisponde a un intervallo CVE dell'avviso E la sua precondizione è soddisfatta (es. HTTP/2 abilitato) |
A RISCHIO | Versione non patchata ma la precondizione ad alta gravità NON è soddisfatta; altre CVE si applicano comunque |
SICURO | Versione ≥ 2.4.67 |
SCONOSCIUTO | Banner nascosto (ServerTokens Prod) o mascherato da reverse proxy/WAF — verifica con lo script di audit locale |
NON_APACHE | Non Apache (nginx, IIS, ecc.) |
ERRORE | Errore di connessione |
| Livello | Significato |
|---|
VULNERABILE | Versione non patchata + precondizioni CVE ad alta gravità soddisfatte (es. HTTP/2 abilitato) |
A RISCHIO | Versione non patchata + almeno una precondizione CVE soddisfatta |
PATCH NECESSARIO | Versione non patchata ma nessun modulo/protocollo rilevante abilitato — patchare comunque |
SICURO | Versione ≥ 2.4.67 |
SCONOSCIUTO | Versione non rilevabile |