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 è
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:
try_files $fastcgi_script_name =404;
Il problema è causato da un errore durante la manipolazione dei puntatori in un file
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
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