Vulnerabilità PHP-fpm che consente l'esecuzione di codice remoto sul server

Disponibile versioni correttive di PHP 7.3.11, 7.1.33 e 7.2.24, in cui eliminato critico vulnerabilità (CVE-2019-11043) nell'estensione PHP-FPM (FastCGI Process Manager), che ti consente di eseguire in remoto il tuo codice sul sistema. Per attaccare i server che utilizzano PHP-FPM insieme a Nginx per eseguire script PHP, è già disponibile pubblicamente lavoro impresa.

L’attacco è possibile in configurazioni nginx in cui l’inoltro a PHP-FPM viene effettuato separando parti dell’URL tramite “fastcgi_split_path_info” e definendo la variabile d’ambiente PATH_INFO, ma senza prima verificare l’esistenza del file tramite “try_files $fastcgi_script_name” direttiva o "if (!-f $) document_root$fastcgi_script_name)". Anche il problema è si manifesta nelle impostazioni offerte per la piattaforma NextCloud. Ad esempio, configurazioni con strutture come:

posizione ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_passphp:9000;
}

Puoi monitorare la risoluzione del problema nei kit di distribuzione in queste pagine: Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, Arco, Fedora. Come soluzione alternativa, puoi aggiungere un controllo per l'esistenza del file PHP richiesto dopo la riga "fastcgi_split_path_info":

try_files $fastcgi_script_name =404;

Il problema è causato da un errore durante la manipolazione dei puntatori in un file sapi/fpm/fpm/fpm_main.c. Quando si assegna un puntatore, si presuppone che il valore della variabile d'ambiente PATH_INFO debba contenere un prefisso che corrisponda al percorso dello script PHP.
Se la direttiva fastcgi_split_path_info specifica la suddivisione del percorso dello script utilizzando un'espressione regolare sensibile alla nuova riga (ad esempio, molti esempi suggeriscono di utilizzare "^(.+?\.php)(/.*)$"), un utente malintenzionato potrebbe garantire che un il valore vuoto viene scritto nella variabile di ambiente PATH_INFO. In questo caso, più avanti nell'esecuzione è scrivendo path_info[0] su zero e chiamando FCGI_PUTENV.

Richiedendo un URL formattato in un certo modo, un utente malintenzionato può ottenere uno spostamento del puntatore path_info sul primo byte della struttura "_fcgi_data_seg", e scrivere uno zero su questo byte porterà allo spostamento del "char* pos" puntatore ad un'area di memoria precedentemente individuata. Il successivo chiamato FCGI_PUTENV sovrascriverà i dati in questa memoria con un valore che l'aggressore può controllare. La memoria specificata memorizza anche i valori di altre variabili FastCGI e, scrivendo i propri dati, un utente malintenzionato può creare una variabile PHP_VALUE fittizia e ottenere l'esecuzione del proprio codice.

Fonte: opennet.ru

Aggiungi un commento