
Python-Toolkit zur Überprüfung des Apache HTTP Servers auf CVE-2026-23918 (HTTP/2 Double-Free RCE) und 4 zugehörige CVEs. Passiver Scanner mit ALPN-Verifizierung + schreibgeschützter lokaler Auditor. Keine Exploits.
Defensive Audit-Tools für CVE-2026-23918 (Apache HTTPD HTTP/2 Double-Free RCE) und vier verwandte CVEs, die im Sicherheitshinweis der Apache Software Foundation vom 4. Mai 2026 offengelegt wurden.
| CVE | Schweregrad | Komponente | Auswirkung | Betroffen |
|---|---|---|---|---|
| CVE-2026-23918 | Hoch (CVSS 8.8) | HTTP/2 | Double-Free / RCE | nur 2.4.66 |
| CVE-2026-24072 | Mittel | mod_rewrite (ap_expr) | Privilegieneskalation | ≤ 2.4.66 |
| CVE-2026-28780 | Niedrig | mod_proxy_ajp | Heap-Pufferüberlauf | ≤ 2.4.66 |
| CVE-2026-29168 | Niedrig | mod_md (OCSP) | Ressourcenerschöpfung | 2.4.30 – 2.4.66 |
| CVE-2026-29169 | Niedrig | mod_dav_lock | NULL-Ptr-Dereferenzierung / DoS | ≤ 2.4.66 |
Alle Probleme sind in Apache HTTP Server 2.4.67 behoben.
Diese Werkzeuge sind nur für den Einsatz gegen Systeme bestimmt, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Nicht autorisiertes Scannen kann in Ihrem Rechtsraum illegal sein.
Das Toolkit ist defensiv ausgelegt:
Server: HTTP-Header und verwendet standardmäßiges TLS ALPN — denselben Mechanismus, den jeder moderne Browser zur Aushandlung von HTTP/2 verwendet..
├── apache_passive_audit.py # External asset audit (banner-grab + ALPN)
├── apache_local_audit.py # On-host / SSH local audit
├── LICENSE # MIT
├── .gitignore
└── README.md
python3 von Ubuntu 18.04 und jeder späteren Version.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.pyLiest den HTTP-Server:-Header, um die Apache-Version zu erkennen, und gleicht sie mit der CVE-Tabelle ab. Zusätzlich führt es für HTTPS-Ziele eine standardmäßige TLS-ALPN-Aushandlung durch, um festzustellen, ob HTTP/2 exponiert ist — dies ist die wichtigste Vorbedingung für die Ausnutzbarkeit von CVE-2026-23918. Es werden keine Exploit-Payloads gesendet.
Das Skript bietet h2 und http/1.1 in der ALPN-Erweiterung des TLS-Handshakes (RFC 7301) an. Die Wahl des Servers ist die standardmäßige, eindeutige Antwort auf die Frage "Ist HTTP/2 aktiviert?" — verwendet von jedem modernen Browser und curl. Es löst weder die Schwachstelle noch ein ungewöhnliches Verhalten aus.
Das Risikourteil spiegelt dies wider:
# Einzelnes Ziel
python3 apache_passive_audit.py -t https://web.example.com
# Mehrere Ziele
python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com
# Zieldatei, parallel, CSV + JSON Ausgabe
python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json
# CI / protokollfreundlich (keine Farben)
python3 apache_passive_audit.py -f targets.txt --no-color
targets.txt-Format (ein Ziel pro Zeile, # für Kommentare):
https://www.example.com
intranet.example.local:8443
# old staging box
http://10.0.5.12
| Code | Bedeutung |
|---|---|
| 0 | Alle Ziele sicher |
| 1 | Mindestens ein Ziel UNKNOWN oder ERROR |
| 2 | Mindestens ein Ziel VULNERABLE oder |
ServerTokens Prod oder Minimal verstecken die Version — das Skript gibt ehrlich UNKNOWN zurück. Verwenden Sie die lokale Prüfung zur Bestätigung.apache_local_audit.pyWird auf dem Zielhost (oder über SSH) ausgeführt und überprüft die Apache-Binärdatei, Version, geladene Module und HTTP/2-Konfiguration. Es bewertet auch Ausnutzbarkeitsvorbedingungen: z.B. wenn die Version 2.4.66 ist, aber HTTP/2 deaktiviert ist, wird das Risiko für CVE-2026-23918 entsprechend herabgestuft.
sudo python3 apache_local_audit.py
# JSON-Bericht (für zentrales Inventar)
sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json
# Eigener Binärpfad
sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd
httpd -v / apache2 -v — Versionhttpd -V — Build-Informationen, HTTPD_ROOT, SERVER_CONFIG_FILEapache2ctl -M oder httpd -M — geladene Moduledpkg-query / rpm -q — PaketversionInclude/IncludeOptional eingebundenen Dateien (einschließlich Debian's sites-enabled/, mods-enabled/) → Protocols-Direktive (h2 / h2c / http/1.1)| Flag | Beschreibung |
|---|---|
--binary | Apache-Binärpfad (überschreibt automatische Erkennung) |
--json | JSON-Berichtsausgabe |
--no-color | Farbige Ausgabe deaktivieren |
| Code | Bedeutung |
|---|---|
| 0 | SAFE |
| 1 | PATCH_NEEDED oder UNKNOWN |
| 2 | VULNERABLE oder AT_RISK |
sudo/root wird für vollständige Konfigurationslesevorgänge empfohlen. Ohne sie sind möglicherweise einige Dateien in sites-enabled/, mods-enabled/ oder /etc/httpd/conf.d/ nicht lesbar.
Um die lokale Prüfung auf mehreren Hosts auszuführen und Berichte zentral zu sammeln, ein Ansible-Ad-hoc-Beispiel:
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"
Gesammelte JSON-Dateien können mit jq oder einem kleinen Python-Skript zusammengeführt werden.
Für CVE-2026-23918 (bis zum Patch):
h2 und h2c aus der Protocols-Direktive in Ihrer Konfiguration, oder sudo a2dismod http2 unter Debian/Ubuntu, und laden Sie den Dienst neu.mod_dav_lock, falls nicht in Verwendung (CVE-2026-29169)..htaccess (CVE-2026-24072).Offizieller Hinweis: https://httpd.apache.org/security/vulnerabilities_24.html
Pull-Requests sind willkommen. Beim Hinzufügen einer neuen CVE bitte:
CVE_TABLE mit dem betroffenen Versionsbereich und match-Lambda hinzu.needs-Feld für Vorbedingungsprüfungen (geladenes Modul, aktiviertes Protokoll usw.).from __future__ import annotations, PEP 585-Generika (list[int]), subprocess.run(capture_output=True) und @dataclass.MIT © 2026 SiberSAN
Diese Software wird "wie besehen" bereitgestellt, ohne jegliche Gewährleistung. Vor dem Produktiveinsatz in einer Testumgebung validieren. Der Benutzer übernimmt die gesamte rechtliche Verantwortung für jegliche Nutzung gegen nicht autorisierte Systeme.
| Flag | Beschreibung |
|---|
-t, --target | Einzelziel (kann wiederholt werden) |
-f, --file | Zieldatei |
-o, --csv | CSV-Berichtsausgabe |
--json | JSON-Berichtsausgabe |
--timeout | Anfrage-Timeout in Sekunden (Standard 10) |
-w, --workers | Parallele Arbeitsthreads (Standard 10) |
--no-color | Farbige Ausgabe deaktivieren |
AT_RISK| Stufe | Bedeutung |
|---|
VULNERABLE | Version entspricht einem CVE-Bereich und die Vorbedingung ist erfüllt (z.B. HTTP/2 aktiviert) |
AT_RISK | Nicht gepatchte Version, aber die kritische Vorbedingung ist NICHT erfüllt; andere CVEs gelten weiterhin |
SAFE | Version ≥ 2.4.67 |
UNKNOWN | Banner versteckt (ServerTokens Prod) oder durch Reverse-Proxy/WAF maskiert — mit dem lokalen Prüfskript überprüfen |
NOT_APACHE | Nicht Apache (nginx, IIS, etc.) |
ERROR | Verbindungsfehler |
| Stufe | Bedeutung |
|---|
VULNERABLE | Nicht gepatchte Version + Vorbedingungen für kritische CVEs erfüllt (z.B. HTTP/2 aktiviert) |
AT_RISK | Nicht gepatchte Version + mindestens eine CVE-Vorbedingung erfüllt |
PATCH_NEEDED | Nicht gepatchte Version, aber kein relevantes Modul/Protokoll aktiviert — trotzdem patchen |
SAFE | Version ≥ 2.4.67 |
UNKNOWN | Version konnte nicht erkannt werden |