Napad je moguć u nginx konfiguracijama u kojima se prosljeđivanje u PHP-FPM-u provodi dijeljenjem dijelova URL-a pomoću "fastcgi_split_path_info" i definiranjem varijable okruženja PATH_INFO, ali bez prethodne provjere postojanja datoteke s "try_files $fastcgi_script_name" direktiva ili "if (!-f $ document_root$fastcgi_script_name)". problem uključujući
lokacija ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Rješavanje problema u distribucijama možete pratiti na ovim stranicama:
try_files $fastcgi_script_name =404;
Problem je uzrokovan pogreškom tijekom manipuliranja pokazivačima u datoteci
Ako direktiva fastcgi_split_path_info specificira dijeljenje staze do skripte pomoću regularnog izraza koji je osjetljiv na prijenos znaka novog retka (na primjer, u mnogim primjerima predlaže se korištenje "^(.+?\.php)(/. *)$"), tada napadač može postići pisanje prazne vrijednosti u varijablu okruženja PATH_INFO. U ovom slučaju, dalje uz izvršenje
Zahtijevanjem URL-a formatiranog na određeni način, napadač može premjestiti pokazivač path_info na prvi bajt strukture “_fcgi_data_seg”, a pisanje nule u ovaj bajt premjestit će pokazivač “char * pos” na prethodno išlo memorijsko područje. FCGI_PUTENV pozvan sljedeći će prebrisati podatke u ovoj memoriji s vrijednošću koju napadač može kontrolirati. Navedena memorija također pohranjuje vrijednosti drugih FastCGI varijabli, a pisanjem njihovih podataka napadač može kreirati lažnu PHP_VALUE varijablu i postići izvršenje svog koda.
Izvor: opennet.ru