L'atac és possible en configuracions nginx en què el reenviament a PHP-FPM es realitza separant parts de l'URL mitjançant "fastcgi_split_path_info" i definint la variable d'entorn PATH_INFO, però sense comprovar abans l'existència del fitxer mitjançant el "try_files $fastcgi_script_name" directiva o el "if (!-f $) arrel_document$nom_script_fastcgi)". El problema també ho és
ubicació ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Podeu fer un seguiment de la resolució del problema als kits de distribució en aquestes pàgines:
try_files $fastcgi_script_name =404;
El problema és causat per un error en manipular els punters d'un fitxer
Si la directiva fastcgi_split_path_info especifica dividir el camí de l'script mitjançant una expressió regular sensible a la nova línia (per exemple, molts exemples suggereixen utilitzar "^(.+?\.php)(/.*)$"), un atacant podria assegurar-se que un el valor buit s'escriu a la variable d'entorn PATH_INFO. En aquest cas, més enllà de l'execució
En sol·licitar una URL formatada d'una manera determinada, un atacant pot aconseguir un desplaçament del punter path_info al primer byte de l'estructura "_fcgi_data_seg" i escriure un zero en aquest byte provocarà el moviment del "char* pos" punter a una àrea de memòria ubicada anteriorment. El següent anomenat FCGI_PUTENV sobreescriurà les dades d'aquesta memòria amb un valor que l'atacant pugui controlar. La memòria especificada també emmagatzema els valors d'altres variables FastCGI, i escrivint les seves dades, un atacant pot crear una variable PHP_VALUE fictícia i aconseguir l'execució del seu codi.
Font: opennet.ru