
Scanner per la divulgazione del codice sorgente di Apache HTTP Server (CVE-2024-40725); sonda i percorsi diretti e di subrequest, rileva le versioni interessate e genera report JSON per CI/CD.
Uno strumento di rilevamento basato su Python per CVE-2024-40725, una vulnerabilità di divulgazione del codice sorgente del server Apache HTTP che interessa le versioni 2.4.0 e 2.4.61.
Nota legale: Esegui questo scanner solo su server di tua proprietà o per i quali disponi di esplicita autorizzazione scritta al test. L'uso non autorizzato può violare le leggi contro le frodi informatiche (ad es., CFAA, Computer Misuse Act).
CVE-2024-40725 è una regressione nella pipeline interna di elaborazione delle richieste di Apache, introdotta nella versione 2.4.0 (come correzione incompleta di CVE-2024-39884). Quando un server è configurato utilizzando direttive legacy AddType (ad es., AddType application/x-httpd-php .php), l'assegnazione interna dell'handler di Apache viene eliminata silenziosamente durante l'elaborazione delle subrequest (attivata da DirectoryIndex, mod_rewrite o mod_dir).
Di conseguenza, l'interprete degli script PHP non viene mai invocato. Al suo posto, il default-handler integrato di Apache apre il file dal disco e ne trasmette i byte grezzi, incluse credenziali del database, chiavi API e logica applicativa, direttamente al client.
Versioni interessate: Apache httpd 2.4.0 – 2.4.61
Corretto in: Apache httpd 2.4.62+
requestspip install requests
# Clona o scarica lo scanner
curl -O https://your-host/cve_2024_40725_scanner.py
# Rendi eseguibile (opzionale)
chmod +x cve_2024_40725_scanner.py
python3 cve_2024_40725_scanner.py --target <URL> [OPTIONS]
# Avvio rapido: scansiona localhost con i percorsi predefiniti integrati
python3 cve_2024_40725_scanner.py --target http://localhost
# Scansiona percorsi specifici
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--paths /index.php /admin/config.php /wp-config.php
# Usa un file wordlist
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt
# Combina wordlist + percorsi inline extra (uniti e deduplicati)
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt \
--paths /extra/secret.php
# HTTPS con certificato autofirmato
python3 cve_2024_40725_scanner.py \
--target https://myserver.local \
--no-verify-ssl
# Scansione discreta con ritardo di 1 secondo e report JSON
python3 cve_2024_40725_scanner.py \
--target http://myserver.local \
--wordlist php_paths.txt \
--delay 1.0 \
--output results.json \
--verbose
# Utilizzo in CI/CD (codice di uscita 1 = vulnerabile, 0 = pulito)
python3 cve_2024_40725_scanner.py --target http://localhost || echo "VULNERABLE"
Un percorso per riga. Le righe che iniziano con # vengono trattate come commenti e saltate. Le righe vuote vengono ignorate. Le barre iniziali vengono normalizzate automaticamente.
# Punti di ingresso PHP comuni
/index.php
/info.php
/phpinfo.php
# Pannelli di amministrazione
/admin/index.php
/admin/config.php
# File CMS
/wp-config.php
/wp-login.php
/configuration.php
# Dettagli interni delle API
/api/v1/status.php
Lo scanner esegue due probe per ogni percorso:
GET /index.php HTTP/1.1
Verifica se la richiesta diretta del file PHP restituisce il codice sorgente grezzo. Il problema interessa i server configurati in modo errato in cui AddType non funziona correttamente nemmeno per le richieste dirette.
GET / HTTP/1.1
Richiede la directory padre invece del file stesso. Apache risolve internamente DirectoryIndex → index.php, generando una subrequest. Questo è l'esatto percorso di codice in cui r->handler viene impostato a NULL in Apache 2.4.0–2.4.61.
Il Probe B è il test più importante e realistico. Molti server sono vulnerabili solo tramite il percorso di subrequest e non tramite la richiesta diretta del file.
Lo scanner controlla il corpo della risposta alla ricerca di firme di codice sorgente PHP:
<?php<?PHP<?=Quando viene trovata una corrispondenza, estrae un frammento di 150 caratteri attorno al punto della fuga per il triage, senza stampare l'intero corpo della risposta.
Legge l'header Server: della risposta per rilevare la versione di Apache. Segnala i server che riportano la versione 2.4.0 o 2.4.61 anche prima di una fuga confermata.
Nota: i server hardened possono sopprimere l'header
Server:(ServerTokens Prod). Lo scanner esegue comunque tutti i probe.
============================================================
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": [...]
}
| Codice | Significato |
|---|---|
0 | Nessun percorso vulnerabile rilevato |
1 | Trovati uno o più percorsi vulnerabili |
I codici di uscita rendono lo scanner adatto all'uso in pipeline CI/CD e ad audit automatizzati dell'infrastruttura.
# Debian / Ubuntu
sudo apt update && sudo apt install apache2
# RHEL / CentOS / AlmaLinux
sudo dnf update httpd
# Verifica la versione (deve essere >= 2.4.62)
apache2 -v
AddType con SetHandlerSostituisci tutte le direttive AddType utilizzate per l'esecuzione di PHP:
# ❌ Configurazioni vulnerabili
AddType application/x-httpd-php .php
# ✅ Configurazioni sicure
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# VULNERABILE
<VirtualHost *:80>
DocumentRoot /var/www/html
AddType application/x-httpd-php .php # ← innesca la CVE
DirectoryIndex index.php
</VirtualHost>
# SICURO
<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 | Versione | Descrizione |
|---|
| Flag | Tipo | Predefinito | Descrizione |
|---|
--target | URL | (obbligatorio) | URL di base del server Apache da testare |
--paths | PATH [PATH ...] | elenco integrato | Uno o più percorsi PHP da sondare direttamente |
--wordlist | FILE | — | Percorso di un file wordlist (un percorso per riga) |
--no-directory-check | flag | off | Salta il probe di subrequest/directory-index (Probe B) |
--timeout | int (secondi) | 10 | Timeout per richiesta |
--delay | float (secondi) | 0.0 | Ritardo tra le richieste (rate limiting) |
--no-verify-ssl | flag | off | Disabilita la verifica del certificato SSL |
--output | FILE | — | Scrive il report JSON completo in questo file |
--verbose | flag | off | Abilita l'output di debug |
| CVE-2024-39884 | 2.4.0 | Regressione originale di divulgazione del codice sorgente |
| CVE-2024-40725 | 2.4.61 | Correzione incompleta — stessa classe di bug |
| CVE-2024-40898 | 2.4.61 | SSRF separata in mod_rewrite (solo Windows) |