
Scanner für CVE-2024-40725 Apache HTTP Server Quellcode-Offenlegung; prüft direkte und Subrequest-Pfade, identifiziert betroffene Versionen anhand von Fingerabdrücken und gibt JSON-Berichte für CI/CD aus.
Ein Python-basiertes Erkennungstool für CVE-2024-40725, eine Schwachstelle zur Offenlegung von Quellcode im Apache HTTP Server, die die Versionen 2.4.0 und 2.4.61 betrifft.
Rechtlicher Hinweis: Führen Sie diesen Scanner nur gegen Server aus, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen besitzen. Unbefugte Nutzung kann gegen Gesetze zur Computerkriminalität verstoßen (z. B. CFAA, Computer Misuse Act).
CVE-2024-40725 ist eine Regression in der internen Anfrage-Pipeline von Apache, die in
Version 2.4.0 eingeführt wurde (als unvollständiger Fix für CVE-2024-39884). Wenn ein
Server mit veralteten AddType-Direktiven konfiguriert ist (z. B. AddType application/x-httpd-php .php),
wird die interne Handler-Zuweisung von Apache während der Subrequest-Verarbeitung
stillschweigend verworfen (ausgelöst durch DirectoryIndex, mod_rewrite oder mod_dir).
Dadurch wird der PHP-Skript-Interpreter nie aufgerufen. Stattdessen öffnet der
integrierte default-handler von Apache die Datei von der Festplatte und streamt ihre
Rohbytes – einschließlich Datenbank-Zugangsdaten, API-Schlüsseln und Anwendungslogik –
direkt an den Client.
Betroffene Versionen: Apache httpd 2.4.0 – 2.4.61
Behoben in: Apache httpd 2.4.62+
requests-Bibliothekpip install requests
# Clone or download the scanner
curl -O https://your-host/cve_2024_40725_scanner.py
# Make executable (optional)
chmod +x cve_2024_40725_scanner.py
python3 cve_2024_40725_scanner.py --target <URL> [OPTIONS]
| Flag | Typ | Standard | Beschreibung |
|---|---|---|---|
--target | URL | (erforderlich) | Basis-URL des zu testenden Apache-Servers |
--paths | Pfad [Pfad ...] | integrierte Liste | Ein oder mehrere PHP-Pfade, die direkt untersucht werden sollen |
--wordlist | Datei | — | Pfad zu einer Wordlist-Datei (ein Pfad pro Zeile) |
--no-directory-check | Flag | aus | Subrequest-/Directory-Index-Probe (Probe B) überspringen |
--timeout | int (Sekunden) | 10 | Timeout pro Anfrage |
--delay | float (Sekunden) | 0.0 | Verzögerung zwischen Anfragen (Ratenbegrenzung) |
--no-verify-ssl | Flag | aus | SSL-Zertifikatsprüfung deaktivieren |
--output | Datei | — | Vollständigen JSON-Bericht in diese Datei schreiben |
--verbose | Flag | aus | Debug-Ausgabe aktivieren |
# Quickstart: scan localhost with built-in default paths
python3 cve_2024_40725_scanner.py --target http://localhost
# Scan specific paths
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--paths /index.php /admin/config.php /wp-config.php
# Use a wordlist file
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt
# Combine wordlist + extra inline paths (merged, deduplicated)
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt \
--paths /extra/secret.php
# HTTPS with self-signed certificate
python3 cve_2024_40725_scanner.py \
--target https://myserver.local \
--no-verify-ssl
# Polite scan with 1 second delay and JSON report
python3 cve_2024_40725_scanner.py \
--target http://myserver.local \
--wordlist php_paths.txt \
--delay 1.0 \
--output results.json \
--verbose
# CI/CD usage (exit code 1 = vulnerable, 0 = clean)
python3 cve_2024_40725_scanner.py --target http://localhost || echo "VULNERABLE"
Ein Pfad pro Zeile. Zeilen, die mit # beginnen, werden als Kommentare behandelt
und übersprungen. Leere Zeilen werden ignoriert. Führende Schrägstriche werden
automatisch normalisiert.
# Common PHP entrypoints
/index.php
/info.php
/phpinfo.php
# Admin panels
/admin/index.php
/admin/config.php
# CMS files
/wp-config.php
/wp-login.php
/configuration.php
# API internals
/api/v1/status.php
Der Scanner führt zwei Proben pro Pfad aus:
GET /index.php HTTP/1.1
Prüft, ob das direkte Anfordern der PHP-Datei deren rohen Quellcode zurückgibt.
Betroffen sind falsch konfigurierte Server, bei denen AddType selbst bei direkten Anfragen nicht funktioniert.
GET / HTTP/1.1
Fragt das übergeordnete Verzeichnis statt der Datei selbst an. Apache löst
intern DirectoryIndex → index.php auf und erzeugt einen Subrequest. Dies ist exakt
der Codepfad, in dem r->handler in Apache 2.4.0–2.4.61 auf NULL gesetzt wird.
Probe B ist der wichtigere und realistischere Test. Viele Server sind nur über den Subrequest-Pfad angreifbar, nicht über den direkten Dateipfad.
Der Scanner prüft den Antwortkörper auf Signaturen von PHP-Quellcode:
<?php<?PHP<?=Wird ein Treffer gefunden, extrahiert er einen 150-Zeichen-Ausschnitt um die Leckstelle zur Sichtung, ohne den gesamten Antwortkörper auszugeben.
Liest den Server:-Antwortheader, um die Apache-Version zu erkennen. Markiert Server,
die Version 2.4.0 oder 2.4.61 melden, bereits vor einem bestätigten Leck.
Hinweis: Gehärtete Server können den
Server:-Header unterdrücken (ServerTokens Prod). Der Scanner führt unabhängig davon weiterhin alle Proben aus.
============================================================
CVE-2024-40725 -- Apache Source Code Disclosure Scanner
============================================================
Target : http://localhost
Paths : 6
Time : 2024-08-01T12:00:00
[*] Fingerprinting server: http://localhost
Server Header : Apache/2.4.61 (Debian)
Apache Version: 2.4.61
[!] Version is in vulnerable range (2.4.0 - 2.4.61)
[*] Testing 6 path(s)...
--- /index.php
Direct (HTTP 200): OK
Subreq (HTTP 200): LEAKED
[!] VULNERABLE via: subrequest (directory index)
Leaked snippet: '<?php\n$db_pass = "supersecretpassword";'
--- /info.php
Direct (HTTP 404): OK
Subreq (HTTP 404): OK
[+] Safe
============================================================
SCAN SUMMARY
============================================================
Target : http://localhost
Apache Version : 2.4.61
Paths Tested : 6
Vulnerable Paths : 1
Safe Paths : 5
[!] RESULT: VULNERABLE
Vulnerable paths:
* /index.php (trigger: subrequest (directory index))
Remediation:
1. Upgrade to Apache httpd >= 2.4.62
2. Replace 'AddType' with 'SetHandler' in <FilesMatch> blocks
============================================================
--output results.json){
"target": "http://localhost",
"scan_time": "2024-08-01T12:00:00",
"apache_version": "2.4.61",
"apache_in_range": true,
"paths_tested": 6,
"vulnerable_paths": [
{
"path": "/index.php",
"direct_url": "http://localhost/index.php",
"directory_url": "http://localhost/",
"direct_status": 200,
"direct_leaked": false,
"direct_snippet": null,
"directory_status": 200,
"directory_leaked": true,
"directory_snippet": "<?php\n$db_pass = \"supersecretpassword\";",
"server_header": "Apache/2.4.61 (Debian)",
"vulnerable": true,
"trigger": "subrequest (directory index)"
}
],
"safe_paths": [...]
}
| Code | Bedeutung |
|---|---|
0 | Keine verwundbaren Pfade erkannt |
1 | Ein oder mehrere verwundbare Pfade gefunden |
Dank der Exit-Codes eignet sich der Scanner für den Einsatz in CI/CD-Pipelines und automatisierte Infrastruktur-Audits.
# Debian / Ubuntu
sudo apt update && sudo apt install apache2
# RHEL / CentOS / AlmaLinux
sudo dnf update httpd
# Verify version (must be >= 2.4.62)
apache2 -v
AddType durch SetHandler ersetzenErsetzen Sie alle AddType-Direktiven, die für die PHP-Ausführung verwendet werden:
# ❌ Vulnerable Configs
AddType application/x-httpd-php .php
# ✅ Safe Configs
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# VULNERABLE
<VirtualHost *:80>
DocumentRoot /var/www/html
AddType application/x-httpd-php .php # ← triggers CVE
DirectoryIndex index.php
</VirtualHost>
# SAFE
<VirtualHost *:80>
DocumentRoot /var/www/html
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
DirectoryIndex index.php
</VirtualHost>
| CVE | Version | Beschreibung |
|---|---|---|
| CVE-2024-39884 | 2.4.0 | Ursprüngliche Regression mit Quellcode-Offenlegung |
| CVE-2024-40725 | 2.4.61 | Unvollständiger Fix — gleiche Fehlerklasse |
| CVE-2024-40898 | 2.4.61 | Separate SSRF in mod_rewrite (nur Windows) |