Atacul este posibil în configurațiile nginx în care redirecționarea către PHP-FPM este efectuată prin separarea părților URL folosind „fastcgi_split_path_info” și definirea variabilei de mediu PATH_INFO, dar fără a verifica mai întâi existența fișierului folosind „try_files $fastcgi_script_name” directiva sau „dacă (!-f $) document_root$fastcgi_script_name)”. Problema este de asemenea
locație ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Puteți urmări rezolvarea problemei în kiturile de distribuție pe aceste pagini:
try_files $fastcgi_script_name =404;
Problema este cauzată de o eroare la manipularea pointerilor dintr-un fișier
Dacă directiva fastcgi_split_path_info specifică împărțirea căii de script folosind o expresie regulată sensibilă la noua linie (de exemplu, multe exemple sugerează utilizarea „^(.+?\.php)(/.*)$”), atunci un atacator s-ar putea asigura că un valoarea goală este scrisă în variabila de mediu PATH_INFO. În acest caz, mai departe de-a lungul execuției
Prin solicitarea unui URL formatat într-un anumit fel, un atacator poate realiza o deplasare a pointerului path_info la primul octet al structurii „_fcgi_data_seg”, iar scrierea unui zero la acest octet va duce la mișcarea „char* pos” pointer către o zonă de memorie localizată anterior. Următorul numit FCGI_PUTENV va suprascrie datele din această memorie cu o valoare pe care atacatorul o poate controla. Memoria specificată stochează, de asemenea, valorile altor variabile FastCGI, iar prin scrierea datelor acestora, un atacator poate crea o variabilă PHP_VALUE fictivă și poate realiza execuția codului lor.
Sursa: opennet.ru