Útok je možný v konfiguráciách nginx, v ktorých sa preposielanie do PHP-FPM vykonáva oddelením častí URL pomocou „fastcgi_split_path_info“ a definovaním premennej prostredia PATH_INFO, ale bez predchádzajúcej kontroly existencie súboru pomocou „try_files $fastcgi_script_name“ direktíva alebo „if (!-f $) document_root$fastcgi_script_name)“. Problém je tiež
umiestnenie ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Riešenie problému v distribučných súpravách môžete sledovať na týchto stránkach:
try_files $fastcgi_script_name =404;
Problém je spôsobený chybou pri manipulácii s ukazovateľmi v súbore
Ak direktíva fastcgi_split_path_info špecifikuje rozdelenie cesty skriptu pomocou regulárneho výrazu citlivého na nový riadok (napríklad mnoho príkladov navrhuje použiť "^(.+?\.php)(/.*)$"), útočník by mohol zabezpečiť, prázdna hodnota sa zapíše do premennej prostredia PATH_INFO. V tomto prípade ďalej po vykonaní
Požiadaním o adresu URL naformátovanú určitým spôsobom môže útočník dosiahnuť posun ukazovateľa path_info na prvý bajt štruktúry „_fcgi_data_seg“ a zápis nuly do tohto bajtu povedie k presunu pozície „char*“ ukazovateľ na predtým umiestnenú oblasť pamäte. Ďalší s názvom FCGI_PUTENV prepíše údaje v tejto pamäti hodnotou, ktorú môže útočník ovládať. Zadaná pamäť tiež ukladá hodnoty ďalších premenných FastCGI a zapísaním ich údajov môže útočník vytvoriť fiktívnu premennú PHP_VALUE a dosiahnuť vykonanie svojho kódu.
Zdroj: opennet.ru