
Scanner pour CVE-2024-40725 (divulgation de code source du serveur Apache HTTP) ; sonde les chemins directs et les sous-requêtes, identifie les versions affectées et génère des rapports JSON pour les pipelines CI/CD.
Un outil de détection basé sur Python pour CVE-2024-40725, une vulnérabilité de divulgation de code source du serveur Apache HTTP affectant les versions 2.4.0 et 2.4.61.
Avis juridique : N'exécutez ce scanner que sur des serveurs dont vous êtes propriétaire ou pour lesquels vous disposez d'une autorisation écrite explicite de test. Toute utilisation non autorisée peut enfreindre les lois sur la fraude informatique (par exemple, CFAA, Computer Misuse Act).
CVE-2024-40725 est une régression dans le pipeline interne de requêtes d'Apache, introduite dans la version 2.4.0 (en tant que correctif incomplet pour CVE-2024-39884). Lorsqu'un serveur est configuré avec des directives AddType héritées (par exemple, AddType application/x-httpd-php .php), l'affectation interne du gestionnaire d'Apache est silencieusement abandonnée pendant le traitement des sous-requêtes (déclenché par DirectoryIndex, mod_rewrite ou mod_dir).
Par conséquent, l'interpréteur de scripts PHP n'est jamais invoqué. À la place, le default-handler intégré d'Apache ouvre le fichier depuis le disque et en diffuse les octets bruts, y compris les identifiants de base de données, les clés API et la logique applicative, directement au client.
Versions affectées : Apache httpd 2.4.0 – 2.4.61
Corrigé dans : Apache httpd 2.4.62+
requestspip 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]
| Option | Type | Défaut | Description |
|---|---|---|---|
--target | URL | (obligatoire) | URL de base du serveur Apache à tester |
--paths | CHEMIN [CHEMIN ...] | liste intégrée | Un ou plusieurs chemins PHP à sonder directement |
--wordlist | FICHIER | — | Chemin vers un fichier de liste de mots (un chemin par ligne) |
--no-directory-check | drapeau | désactivé | Ignorer la sonde de sous-requête/index de répertoire (sonde B) |
--timeout | int (secondes) | 10 | Délai d'expiration par requête |
--delay | float (secondes) | 0.0 | Délai entre les requêtes (limitation de débit) |
--no-verify-ssl | drapeau | désactivé | Désactiver la vérification des certificats SSL |
--output | FICHIER | — | Écrire un rapport JSON complet dans ce fichier |
--verbose | drapeau | désactivé | Activer la sortie de débogage |
# 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"
Un chemin par ligne. Les lignes commençant par # sont traitées comme des commentaires et ignorées. Les lignes vides sont ignorées. Les barres obliques initiales sont normalisées automatiquement.
# 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
Le scanner exécute deux sondes par chemin :
GET /index.php HTTP/1.1
Vérifie si une requête directe du fichier PHP renvoie son code source brut. Le serveur est affecté dans les configurations où AddType est cassé, même pour les requêtes directes.
GET / HTTP/1.1
Envoie une requête au répertoire parent au lieu du fichier lui-même. Apache résout en interne DirectoryIndex → index.php, ce qui génère une sous-requête. C'est exactement le chemin de code où r->handler est remis à NULL dans Apache 2.4.0–2.4.61.
La sonde B est le test le plus important et le plus réaliste. De nombreux serveurs ne sont vulnérables que par le chemin de sous-requête, pas par le chemin de fichier direct.
Le scanner examine le corps de la réponse à la recherche de signatures de code source PHP :
<?php<?PHP<?=Lorsqu'une correspondance est trouvée, il extrait un extrait de 150 caractères autour de l'emplacement de la fuite pour le triage, sans imprimer l'intégralité du corps de la réponse.
Lit l'en-tête de réponse Server: pour détecter la version d'Apache. Signale les serveurs annonçant la version 2.4.0 ou 2.4.61, même avant qu'une fuite ne soit confirmée.
Remarque : Les serveurs durcis peuvent supprimer l'en-tête
Server:(ServerTokens Prod). Le scanner exécute néanmoins toutes les sondes.
============================================================
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 | Signification |
|---|---|
0 | Aucun chemin vulnérable détecté |
1 | Un ou plusieurs chemins vulnérables trouvés |
Les codes de sortie rendent le scanner adapté à une utilisation dans les pipelines CI/CD et les audits automatisés d'infrastructure.
# 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 par SetHandlerRemplacez toutes les directives AddType utilisées pour l'exécution de PHP :
# ❌ 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 | Description |
|---|---|---|
| CVE-2024-39884 | 2.4.0 | Régression originale de divulgation de code source |
| CVE-2024-40725 | 2.4.61 | Correctif incomplet — même classe de bug |
| CVE-2024-40898 | 2.4.61 | SSRF distincte dans mod_rewrite (Windows uniquement) |