
Modello Nuclei per rilevare server Apache vulnerabili a CVE-2024-38473

Template Nuclei progettato per rilevare server Apache vulnerabili a CVE-2024-38473. Identifica innanzitutto i server che eseguono Apache < 2.4.60 con impostazioni PHP-FPM predefinite. Successivamente, esegue fuzzing alla ricerca di potenziali file PHP protetti da ACL che potrebbero essere aggirati a causa di questa vulnerabilità.
Per utilizzare questo template Nuclei, devi clonare il repository. Puoi farlo eseguendo il seguente comando:
git clone https://github.com/juanschallibaum/CVE-2024-38473-Nuclei-Template
Spostati nella directory del repository clonato:
cd CVE-2024-38473-Nuclei-Template
Esegui il template Nuclei su un singolo host:
nuclei -t CVE-2024-38473.yaml -u http://example.com
Esegui il template Nuclei su un elenco di host:
nuclei -t CVE-2024-38473.yaml -l hosts.txt
Esegui il template Nuclei su un singolo host specificando un file .html o .php valido:
nuclei -t CVE-2024-38473.yaml -u http://example.com/valid.php
Eseguire Nuclei in questo modo può produrre un tasso di rilevamento più elevato. Puoi anche includere URL in questo formato nel file degli host per eseguire il template su tale elenco.
Per testare facilmente la vulnerabilità CVE-2024-38473, puoi impostare un ambiente vulnerabile usando Docker. Segui questi passaggi per verificare rapidamente l'efficacia del template Nuclei:
Assicurati che il Docker Daemon sia in esecuzione: assicurati che il daemon Docker sia in esecuzione sul tuo sistema. Puoi avviarlo con il seguente comando se non è già in esecuzione:
sudo systemctl start docker
Esegui il Container Docker: all'interno della directory del repository, usa il seguente comando Docker per avviare un container con una configurazione vulnerabile di Apache e PHP-FPM:
docker run -p 8787:80 -v "$(pwd)/test-env-webroot:/app" webdevops/php-apache:7.1
Testa la Vulnerabilità:
Manualmente: apri il tuo browser web e naviga su http://localhost:8787 per interagire con il server Apache in esecuzione nel container Docker. Accedi a http://localhost:8787/info.php per testare la vulnerabilità. Questo file è protetto da un ACL e, se il bypass dell'ACL ha successo, vedrai l'output di phpinfo():

Usando il Template Nuclei: esegui il seguente comando Nuclei per testare il server con il template:
nuclei -t CVE-2024-38473.yaml -u http://localhost:8787
L'8 agosto 2024, il ricercatore di sicurezza Orange Tsai ha tenuto una presentazione al Black Hat USA 2024 intitolata: Confusion Attacks: Exploiting Hidden Semantic Ambiguity in Apache HTTP Server!. In questa presentazione, ha riportato diverse vulnerabilità che interessano Apache HTTP Server. Ha spiegato che Apache ha un'architettura altamente modulare, composta da centinaia di moduli, ciascuno dei quali svolge la propria funzione mentre legge e scrive su una struttura condivisa chiamata request_rec, composta da quasi 100 campi.
La causa principale delle vulnerabilità riportate dal ricercatore di sicurezza risiede nell'incoerenza nel modo in cui i diversi moduli di Apache trattano i vari campi della struttura condivisa. Ad esempio, mod_authz_core tratta il campo r->filename come un file, mentre mod_proxy lo tratta come un URL, portando a discrepanze che determinano un'ampia gamma di vulnerabilità.
Nella sua presentazione, Orange Tsai definisce un tipo di attacco chiamato "Filename Confusion". Sebbene questo attacco abbia una superficie d'attacco variegata, CVE-2024-38473, che trattiamo in questo template, si riferisce a come possiamo applicare l'attacco "Filename Confusion" per bypassare le ACL di Apache e ottenere accesso a file ristretti.
Il problema sorge quando il modulo di autenticazione di Apache, mod_authz_core, tratta l'attributo r->filename come un file, mentre mod_proxy lo tratta come un URL. Per questo motivo, le installazioni Apache con PHP-FPM nella loro configurazione predefinita sono affette da questa vulnerabilità. Immagina che un server che esegue Apache e PHP-FPM abbia un'ACL configurata come la seguente per proteggere l'accesso al file admin.php con credenziali:
<Files "admin.php">
AuthType Basic
AuthName "Admin Panel"
AuthUserFile "/etc/apache2/.htpasswd"
Require valid-user
</Files>
A causa della vulnerabilità, è possibile bypassare ACL come quella sopra che implicano la protezione di un singolo file. In realtà, questo può essere fatto semplicemente inviando la seguente richiesta: http://server/admin.php%3fooo.php.
Per comprenderlo a fondo, è importante considerare che quando Apache elabora una richiesta come quella sopra, il modulo mod_authz_core legge il valore admin.php?fooo.php dal campo r->filename della struttura condivisa. Tratta questo valore come il nome del file richiesto e, quando lo confronta con l'ACL, non corrisponde perché admin.php?fooo.php è diverso da admin.php.
Quindi, poiché admin.php?fooo.php termina con .php, la richiesta viene gestita da PHP-FPM. PHP-FPM rimuove tutto ciò che segue ? nel nome file ricevuto da Apache prima di elaborarlo, trattandolo come un URL piuttosto che come un file. Di conseguenza, PHP-FPM elaborerà direttamente admin.php. Poiché il controllo ACL è stato superato in precedenza, l'attaccante può accedere a admin.php senza autenticazione.
Il template Nuclei attuale mira non solo a scoprire file protetti tramite forza bruta, ma include anche una logica per identificare quando un server ha una configurazione vulnerabile di Apache < 2.4.60 con PHP-FPM, anche se non vengono rilevati casi di file protetti da ACL. Nel flusso di base, tenta prima di identificare se il server ha una configurazione vulnerabile e, in caso affermativo, tenta di identificare file comuni che potrebbero essere protetti da ACL.
L'idea alla base del rilevamento di configurazioni vulnerabili con Apache < 2.4.60 e PHP-FPM si basa su due premesse fondamentali:
In una configurazione vulnerabile, se file.php esiste sul server, la richiesta a http://server/file.php%3fooo.php restituirebbe lo stesso codice di stato 200 e la stessa lunghezza del corpo della richiesta a http://server/file.php (perché dopo che PHP-FPM rimuove %3fooo.php, il file richiesto sarebbe lo stesso).
In una configurazione vulnerabile, se file.html esiste sul server, la richiesta a http://server/file.html%3fooo.php restituirebbe 403 Access Denied. Questo perché PHP-FPM tenterebbe di caricare un file con estensione .html invece di .php, che per impostazione predefinita non è consentito.
Il flusso del template consiste in 7 gruppi di richieste. Devono essere eseguite in ordine e devono soddisfare le rispettive condizioni di corrispondenza per procedere al gruppo successivo di richieste. Questo aiuta a minimizzare il numero di richieste inviate invano quando le condizioni sono già note come non soddisfatte.