
Trigger-bewusstes CVE-Audit für die Webserver nginx und Apache. Geht über den Versionsabgleich hinaus, indem geprüft wird, ob der anfällige Codepfad in Ihrer Konfiguration tatsächlich erreichbar ist. Klassifiziert Ergebnisse als Aktiv / Latent / Unverifiziert. Einzeldatei, Python 3.5+, keine Abhängigkeiten.
Frag nicht, ob du verwundbar bist. Frag, ob du ausnutzbar bist.
Ein Python-Tool in einer einzigen Datei, das nginx und Apache gegen bekannte CVEs prüft, indem es sowohl die installierte Version als auch die Frage untersucht, ob der verwundbare Codepfad über deine Konfiguration tatsächlich erreichbar ist.
Die meisten CVE-Scanner begnügen sich mit dem Versionsabgleich: „nginx 1.18.0 — CVE-2026-42945, Schweregrad HIGH, du bist verwundbar.“ Doch viele CVEs erfordern ein bestimmtes Konfigurationsmuster, um ausnutzbar zu sein. Ein Scanner, der die Konfiguration ignoriert, überschwemmt dich mit roten Warnungen, die kein echtes Risiko widerspiegeln – und schlimmer noch: Er kann die latenten Risiken verbergen, die Wirklichkeit werden würden, wenn sich deine Konfiguration morgen änderte.
web_server_audit beantwortet pro CVE zwei getrennte Fragen:
In der Kombination ergeben sich drei ehrliche Einstufungen:
| Einstufung | Bedeutung |
|---|---|
| 🔴 Aktives Ausnutzungsrisiko | Verwundbare Version und Auslöser vorhanden. Heute ausnutzbar. |
| 🟡 Latentes Risiko | Verwundbare Version, kein Auslöser. Wird ausnutzbar, wenn Konfigurationsänderungen das Muster einführen. |
| ⚪ Nicht verifiziert | Konfiguration nicht lesbar; Status unbekannt. |
git clone https://github.com/YOUR_USERNAME/web-server-audit.git
cd web-server-audit
sudo python3 web_server_audit.py
Die Apache-CVE-Liste ist derzeit leer, aber die Struktur ist vorhanden – siehe Erweitern weiter unten.
Über CVEs hinaus meldet das Tool außerdem:
/proc/sys/kernel/randomize_va_space) – vollständiges ASLR reduziert die RCE-Ausnutzbarkeit von Speicherfehlern erheblichesm-infra und esm-appsnginx, apache2, systemctl, ss, journalctl, sofern verfügbar; überspringt die Prüfungen anderenfalls ohne Fehler# 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
| Code | Bedeutung |
|---|---|
| 0 | Keine Probleme |
| 1 | Nur Warnungen oder kritische Befunde ohne CVE-Bezug |
| 2 | Mindestens ein CVE ist aktiv ausnutzbar |
Exit-Code 2 ist ein natürliches Signal für CI/CD-Fehler.
========================================================================
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
========================================================================
Das Hinzufügen eines neuen CVE erfordert zwei Schritte.
1. Schreibe eine Trigger-Funktion, die den vollständigen Konfigurationstext (nginx -T-Ausgabe) entgegennimmt und (triggered: bool, evidence: str) zurückgibt:
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. Füge den Eintrag zu NGINX_CVES (oder APACHE_CVES) hinzu:
{
"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,
},
Das war's. Das Framework übernimmt automatisch Klassifizierung, Ausgabeformatierung, JSON, Exit-Codes und die Zusammenfassung.
--verbose, um die Details zu prüfen.Pull Requests, Issues, neue CVE-Erkennungen und Unterstützung für weitere Webserver (lighttpd, Caddy, HAProxy usw.) sind alle willkommen.
Wenn du eine neue CVE-Erkennung vorschlägst, füge bitte Folgendes hinzu:
Veröffentlicht unter der MIT-Lizenz.
Copyright (c) 2026 SiberSAN
| CVE | Schweregrad | Auslösemuster |
|---|
| CVE-2026-42945 (Rift) | HIGH | rewrite + unbenannte Erfassungsgruppe ($1,$2) + ? im Ersetzungstext |
| CVE-2026-42946 | MEDIUM | scgi_pass oder uwsgi_pass in Verwendung |
| CVE-2026-40701 | MEDIUM | ssl_stapling on + resolver zusammen |
| CVE-2026-42934 | LOW | charset/charset_types/source_charset-Direktiven |