rilasci correttivi per PHP 7.3.11, 7.1.33 e 7.2.24, in cui critica (CVE-2019-11043) nell'estensione PHP-FPM (gestore dei processi FastCGI), che consente l'esecuzione remota del proprio codice nel sistema. Per attaccare i server che utilizzano PHP-FPM in combinazione con Nginx per l'esecuzione di script PHP, è già disponibile pubblicamente .
L'attacco è possibile nelle 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 preliminare dell'esistenza del file tramite la direttiva 'try_files $fastcgi_script_name' o la costruzione 'if (!-f $document_root$fastcgi_script_name)'. Il problema interessa anche le impostazioni proposte per la piattaforma NextCloud. Ad esempio, sono vulnerabili le configurazioni con strutture come:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Puoi monitorare la risoluzione del problema nelle distribuzioni su 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 . Durante l'assegnazione del puntatore, si presume che il valore della variabile d'ambiente PATH_INFO debba necessariamente contenere un prefisso che corrisponde al percorso dello script PHP.
Se la direttiva fastcgi_split_path_info specifica la separazione del percorso dello script utilizzando un'espressione regolare sensibile al passaggio del carattere di nuova riga (ad esempio, in molti esempi viene proposto di utilizzare '^(.+?\.php)(\/.*)$'), l'attaccante può ottenere l'assegnazione di un valore vuoto alla variabile d'ambiente PATH_INFO. In questo caso, nel proseguimento dell'esecuzione l'assegnazione in path_info[0] di zero e la chiamata a FCGI_PUTENV.
Richiedendo un URL formattato in un certo modo, l'attaccante può ottenere uno spostamento del puntatore path_info al primo byte della struttura '_fcgi_data_seg', e l'assegnazione di zero a quel byte porterà a uno spostamento del puntatore 'char* pos' in un'area di memoria precedente. La chiamata successiva a FCGI_PUTENV sovrascriverà i dati in quella memoria con un valore che può essere controllato dall'attaccante. In quella memoria si trovano anche i valori di altre variabili FastCGI e scrivendo i propri dati, l'attaccante può creare una variabile PHP_VALUE fittizia e ottenere l'esecuzione del proprio codice.
Fonte: opennet.ru
