Red Hot Cyber

Sicurezza informatica, cybercrime, hack
news, e altro ancora
  • English

Apache server: exploit online per una RCE clamorosa.

Autore: Mario Rossano

Data Pubblicazione: 7/10/2021

Apache è uno dei webserver più diffusi al mondo. A marzo 2021 il numero di host in rete superava il miliardo e la percentuale di questi gestita con Apache è del 25%, quindi oltre 250 milioni di host nel mondo (fonte Netcraft).

Advertisements

Ne deriva che ogni problematica legata ad Apache ha un impatto numericamente notevole.

L’exploit è stato pubblicato in data 6 ottobre 2021 ed è particolarmente grave, in quanto la vulnerabilità consente non solo la lettura di files all’esterno della directory del virtual host (path trasversal attack) – come inizialmente ipotizzato – ma anche l’esecuzione arbitraria di processi sul server (RCE – remote code execution).

Advertisements

Occorre dire che la problematica non riguarda tutte le versioni di Apache, ma “solo” le versione 2.4.49 (che è stata rilasciata il 16 settembre 2021) e la più recente 2.4.50.

Verificando tramite Shodan risultano, nel momento in cui scrivo (7 ottobre 2021), oltre 110’000 host con questa versione di Apache, quindi oltre 110’000 siti potenzialmente vulnerabili nel mondo.

Advertisements

La vulnerabilità è dovuta ad un bug introdotto nella versione 2.4.49 e solo parzialmente risolto nella versione 2.4.50, relativo all’operazione di normalizzazione degli URI – Uniform Resource Identifier (v. anche URI normalization https://en.wikipedia.org/wiki/URI_normalization) ovvero alla trasformazione degli indirizzi secondo lo standard.

L’esecuzione arbitraria di codice può avvenire a condizione che su Apache 2.4.49/2.4.50 sia attivo mod_cgi ove non sia specificata la direttiva “Require all denied” per tutti i files esterni alla document root, impostazione che evita il path trasversal, letteralmente l’attraversamento del percorso, evitando che l’attaccante possa accedere a directory cui non dovrebbe poter avere accesso.

La modalità di attraversamento del path con l’obiettivo di leggere il file con gli utenti sul server, può ottenersi ad esempio da terminale tramite curl:

Advertisements

curl -v –path-as-is https://sitotarget/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

ma si potrebbe lanciare anche /bin/sh e relativi parametri di esecuzione…

Per verificare se il proprio host gira con Apache 2.4.49 o 2.4.50, anche in questo caso è possibile usare curl:


curl –head https://sitotarget

Advertisements

Per cui si riceverà una risposta del tipo seguente:

HTTP/1.1 200 OKDate: Thu, 07 Oct 2021 18:26:44 GMTServer: Apache/2.4.49 (Debian)X-Powered-By: PHP/5.6.6-1~dotdeb.1…

Come si vede l’host è potenzialmente a rischio ed è possibile tentare, tramite curl, l’esecuzione di codice invocando la shell.

In altri casi il webserver non dichiara il numero di versione (quando è specificato ServerSignature Off nel file di configurazione apache2.conf oppure httpd.conf). In questo caso si potrebbe contattare il fornitore del servizio per avere informazioni più dettagliate.

Advertisements

Il codice dell’exploit è reperibile sul NIST all’URL seguente

https://nvd.nist.gov/vuln/detail/CVE-2021-41773.

Le vulnerabilità sono pubblicate su CVE (Common Vulnerability and Exposures) agli indirizzi seguenti:

Advertisements
  1. Apache 2.4.49 – https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
  2. Apache 2.4.50 – https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42013

Cosa fare?

Innanzitutto occorre aggiornare la propria versione di Apache qualora quella in uso sia una delle due vulnerabili. Apache ha rilasciato in data 07 ottobre 2021 (data in cui scrivo) la versione 2.4.51 che risolve i problemi di attraversamento del percorso e di esecuzione arbitraria di codice rilevati nella versione 2.4.49 e solo parzialmente risolti dalla versione 2.4.50.

Qualora non fosse possibile aggiornare il software, occorrerà impostare la direttiva Require all denied per tutti i files esterni alla document root del webserver in apache2.conf o httpd.conf e quindi riavviare il daemon.

Advertisements

Ad esempio:

sudo nano /etc/apache2/apache2.conf…… AllowOverride none Require all denied

e quindi dopo aver salvato il file, riavviare il servizio:

./apache2 restart

Advertisements