
Scanner para divulgação de código-fonte do Apache HTTP Server (CVE-2024-40725); testa caminhos diretos e de subrequest, identifica versões afetadas e gera relatórios JSON para CI/CD.
Uma ferramenta de detecção baseada em Python para CVE-2024-40725, uma vulnerabilidade de divulgação de código-fonte do Apache HTTP Server que afeta as versões 2.4.0 e 2.4.61.
Aviso legal: Execute este scanner apenas em servidores que você possui ou para os quais tenha autorização explícita por escrito para testar. O uso não autorizado pode violar leis de fraude computacional (por exemplo, CFAA, Computer Misuse Act).
O CVE-2024-40725 é uma regressão no pipeline interno de requisições do Apache, introduzida na versão 2.4.0 (como uma correção incompleta para o CVE-2024-39884). Quando um servidor é configurado usando diretivas legadas AddType (por exemplo, AddType application/x-httpd-php .php), a atribuição do handler interno do Apache é silenciosamente descartada durante o processamento de subrequisições (acionado por DirectoryIndex, mod_rewrite ou mod_dir).
Como resultado, o interpretador de scripts PHP nunca é invocado. Em vez disso, o default-handler integrado do Apache abre o arquivo a partir do disco e transmite seus bytes brutos, incluindo credenciais de banco de dados, chaves de API e lógica da aplicação, diretamente para o cliente.
Versões afetadas: Apache httpd 2.4.0 – 2.4.61
Corrigido em: 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]
# 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"
Um caminho por linha. Linhas que começam com # são tratadas como comentários e ignoradas. Linhas em branco são ignoradas. Barras iniciais são normalizadas automaticamente.
# 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
O scanner executa duas sondagens por caminho:
GET /index.php HTTP/1.1
Verifica se a requisição direta do arquivo PHP retorna seu código-fonte bruto. Afetada em servidores mal configurados onde o AddType está quebrado até mesmo para requisições diretas.
GET / HTTP/1.1
Solicita o diretório pai em vez do próprio arquivo. O Apache resolve internamente DirectoryIndex → index.php, gerando uma subrequisição. Este é exatamente o caminho de código onde r->handler é definido como NULL no Apache 2.4.0–2.4.61.
A Sondagem B é o teste mais importante e realista. Muitos servidores são vulneráveis apenas pelo caminho de subrequisição, não pelo caminho direto de arquivo.
O scanner verifica o corpo da resposta em busca de assinaturas de código-fonte PHP:
<?php<?PHP<?=Quando uma correspondência é encontrada, ele extrai um trecho de 150 caracteres ao redor do local do vazamento para triagem, sem imprimir o corpo inteiro da resposta.
Lê o cabeçalho de resposta Server: para detectar a versão do Apache. Sinaliza servidores que relatam a versão 2.4.0 ou 2.4.61 mesmo antes de um vazamento confirmado.
Nota: Servidores reforçados podem suprimir o cabeçalho
Server:(ServerTokens Prod). O scanner ainda executa todas as sondagens independentemente disso.
============================================================
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 | Nenhum caminho vulnerável detectado |
1 | Um ou mais caminhos vulneráveis encontrados |
Os códigos de saída tornam o scanner adequado para uso em pipelines de CI/CD e auditorias automatizadas de infraestrutura.
# 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 por SetHandlerSubstitua quaisquer diretivas AddType usadas para execução 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 | Versão | Descrição |
|---|
| Flag | Tipo | Padrão | Descrição |
|---|
--target | URL | (obrigatório) | URL base do servidor Apache a ser testado |
--paths | PATH [PATH ...] | lista integrada | Um ou mais caminhos PHP para sondar diretamente |
--wordlist | FILE | — | Caminho para um arquivo de wordlist (um caminho por linha) |
--no-directory-check | flag | desativado | Ignorar a sondagem de subrequisição/índice de diretório (Sondagem B) |
--timeout | int (segundos) | 10 | Tempo limite por requisição |
--delay | float (segundos) | 0.0 | Atraso entre requisições (limite de taxa) |
--no-verify-ssl | flag | desativado | Desabilitar a verificação do certificado SSL |
--output | FILE | — | Gravar o relatório JSON completo neste arquivo |
--verbose | flag | desativado | Habilitar a saída de depuração |
| CVE-2024-39884 | 2.4.0 | Regressão original de divulgação de código-fonte |
| CVE-2024-40725 | 2.4.61 | Correção incompleta — mesma classe de bug |
| CVE-2024-40898 | 2.4.61 | SSRF separado em mod_rewrite (somente Windows) |