
Escáner para la divulgación de código fuente de Apache HTTP Server (CVE-2024-40725); sondea rutas directas y de subpetición, identifica las versiones afectadas y genera informes JSON para CI/CD.
Una herramienta de detección basada en Python para CVE-2024-40725, una vulnerabilidad de divulgación de código fuente del servidor HTTP Apache que afecta a las versiones 2.4.0 y 2.4.61.
Aviso legal: Ejecute este escáner únicamente contra servidores de su propiedad o para los que tenga autorización explícita por escrito para realizar pruebas. El uso no autorizado puede violar las leyes de fraude informático (p. ej., CFAA, Computer Misuse Act).
CVE-2024-40725 es una regresión en la canalización interna de solicitudes de Apache introducida en la versión 2.4.0 (como corrección incompleta de CVE-2024-39884). Cuando un servidor está configurado con directivas AddType heredadas (p. ej., AddType application/x-httpd-php .php), la asignación interna del manejador de Apache se descarta silenciosamente durante el procesamiento de subpeticiones (provocado por DirectoryIndex, mod_rewrite o mod_dir).
Como resultado, el intérprete de scripts PHP nunca se invoca. En su lugar, el default-handler integrado de Apache abre el archivo desde el disco y transmite sus bytes sin procesar, incluidas credenciales de bases de datos, claves de API y lógica de la aplicación, directamente al cliente.
Versiones afectadas: Apache httpd 2.4.0 – 2.4.61
Corregido en: 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]
| Indicador | Tipo | Por defecto | Descripción |
|---|---|---|---|
--target | URL | (obligatorio) | URL base del servidor Apache a probar |
--paths | RUTA [RUTA ...] | lista integrada | Una o más rutas PHP para probar directamente |
--wordlist | ARCHIVO | — | Ruta a un archivo de wordlist (una ruta por línea) |
--no-directory-check | indicador | desactivado | Omitir la sonda de subpetición/índice de directorio (Sonda B) |
--timeout | int (segundos) | 10 | Tiempo de espera por solicitud |
--delay | float (segundos) | 0.0 | Retraso entre solicitudes (límite de tasa) |
--no-verify-ssl | indicador | desactivado | Deshabilitar la verificación de certificados SSL |
--output | ARCHIVO | — | Escribir el informe JSON completo en este archivo |
--verbose | indicador | desactivado | Habilitar la salida de depuración |
# 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"
Una ruta por línea. Las líneas que comienzan con # se tratan como comentarios y se omiten. Las líneas en blanco se ignoran. Las barras diagonales iniciales se normalizan automáticamente.
# 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
El escáner ejecuta dos sondas por ruta:
GET /index.php HTTP/1.1
Comprueba si al solicitar directamente el archivo PHP se devuelve su código fuente sin procesar. Afecta a servidores mal configurados donde AddType falla incluso en solicitudes directas.
GET / HTTP/1.1
Solicita el directorio principal en lugar del archivo en sí. Apache resuelve internamente DirectoryIndex → index.php, generando una subpetición. Esta es la ruta de código exacta donde r->handler queda en NULL en Apache 2.4.0–2.4.61.
La sonda B es la prueba más importante y realista. Muchos servidores solo son vulnerables a través de la ruta de subpetición, no de la ruta directa del archivo.
El escáner comprueba el cuerpo de la respuesta en busca de firmas de código fuente PHP:
<?php<?PHP<?=Cuando se encuentra una coincidencia, extrae un fragmento de 150 caracteres alrededor de la ubicación de la fuga para su triaje, sin imprimir todo el cuerpo de la respuesta.
Lee la cabecera de respuesta Server: para detectar la versión de Apache. Marca los servidores que reportan la versión 2.4.0 o 2.4.61 incluso antes de confirmar una fuga.
Nota: Los servidores endurecidos pueden suprimir la cabecera
Server:(ServerTokens Prod). El escáner ejecuta todas las sondas independientemente de ello.
============================================================
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": [...]
}
| Código | Significado |
|---|---|
0 | No se detectaron rutas vulnerables |
1 | Se encontraron una o más rutas vulnerables |