rilasci correttivi di PHP 7.3.11, 7.1.33 e 7.2.24, in cui critica (CVE-2019-11043) nell'estensione PHP-FPM (gestore di processi FastCGI), che consente di eseguire codice a distanza nel sistema. Per attaccare i server che utilizzano PHP-FPM in combinazione con Nginx per l'esecuzione di script PHP, sono già disponibili pubblicamente .
L'attacco è possibile in configurazioni di nginx in cui il passaggio a PHP-FPM avviene con la separazione delle parti dell'URL tramite «fastcgi_split_path_info» e la definizione della variabile d'ambiente PATH_INFO, ma senza un controllo preventivo dell'esistenza del file tramite la direttiva «try_files $fastcgi_script_name» o la costruzione «if (!-f $document_root$fastcgi_script_name)». Il problema riguarda anche le impostazioni suggerite per la piattaforma NextCloud. Ad esempio, sono vulnerabili configurazioni con costruzioni del tipo:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Puoi seguire la risoluzione del problema nelle distribuzioni a queste pagine: , , , , , , . Come metodo alternativo di protezione, dopo la riga «fastcgi_split_path_info» puoi aggiungere un controllo dell'esistenza del file PHP richiesto:
try_files $fastcgi_script_name =404;
Il problema è causato da un errore nella manipolazione dei puntatori nel file . Nell'assegnazione del puntatore si presume che il valore della variabile d'ambiente PATH_INFO contenga necessariamente un prefisso che corrisponde al percorso dello script PHP.
Se nella direttiva fastcgi_split_path_info è specificata la separazione del percorso dello script utilizzando un'espressione regolare sensibile al passaggio del carattere di nuova riga (ad esempio, in molti esempi si propone di utilizzare «^(.+?\.php)(\/.*)$»), l'attaccante può ottenere la registrazione di un valore vuoto nella variabile d'ambiente PATH_INFO. In questo caso, il seguito dell'esecuzione consentirebbe di scrivere in path_info[0] zero e chiamare FCGI_PUTENV.
Richiedendo un URL confezionato in un certo modo, l'attaccante può ottenere uno spostamento del puntatore path_info al primo byte della struttura «_fcgi_data_seg», e scrivere zero in questo byte porterà a uno spostamento del puntatore «char* pos» in un'area di memoria precedente. La successiva chiamata a FCGI_PUTENV sovrascriverà i dati in questa memoria con un valore che può essere controllato dall'attaccante. Nella memoria specificata sono memorizzati anche i valori di altre variabili FastCGI e scrivendo i propri dati, l'attaccante può creare una variabile fittizia PHP_VALUE e ottenere l'esecuzione del proprio codice.
Fonte: opennet.ru
