Útok je možný v konfiguracích nginx, ve kterých se předávání v PHP-FPM provádí rozdělením částí URL pomocí "fastcgi_split_path_info" a definováním proměnné prostředí PATH_INFO, ale bez předchozí kontroly existence souboru pomocí "try_files $fastcgi_script_name" direktiva nebo "if (!-f $ kořenový_adresář_dokumentu$fastcgi_script_name)". problém včetně
umístění ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Řešení problémů v distribucích můžete sledovat na těchto stránkách:
try_files $fastcgi_script_name =404;
Problém je způsoben chybou při manipulaci s ukazateli v souboru
Pokud direktiva fastcgi_split_path_info určuje rozdělení cesty ke skriptu pomocí regulárního výrazu, který je citlivý na přenos znaku nového řádku (například v mnoha příkladech se doporučuje použít "^(.+?\.php)(/. *)$"), pak může útočník dosáhnout zapsání prázdné hodnoty do proměnné prostředí PATH_INFO. V tomto případě dále po provedení
Požadováním adresy URL naformátované určitým způsobem může útočník přesunout ukazatel path_info na první bajt struktury „_fcgi_data_seg“ a zápis nuly do tohoto bajtu přesune ukazatel „char * pos“ do oblasti paměti dříve. FCGI_PUTENV volané jako další přepíše data v této paměti hodnotou, kterou může útočník ovládat. Zadaná paměť také ukládá hodnoty dalších proměnných FastCGI a zapsáním jejich dat může útočník vytvořit fiktivní proměnnou PHP_VALUE a dosáhnout spuštění svého kódu.
Zdroj: opennet.ru