Napad je moguć u nginx konfiguracijama u kojima se prosljeđivanje na PHP-FPM vrši odvajanjem dijelova URL-a pomoću “fastcgi_split_path_info” i definiranjem varijable okruženja PATH_INFO, ali bez prethodne provjere postojanja datoteke pomoću “try_files $fastcgi_script_name” direktiva ili "if (!-f $) root_dokument$fastcgi_script_name)". Problem je takođe
lokacija ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Rješenje problema možete pratiti u distribucijskim kompletima na ovim stranicama:
try_files $fastcgi_script_name =404;
Problem je uzrokovan greškom prilikom manipulacije pokazivačima u datoteci
Ako direktiva fastcgi_split_path_info specificira podjelu putanje skripte pomoću regularnog izraza osjetljivog na novi red (na primjer, mnogi primjeri sugeriraju korištenje "^(.+?\.php)(/.*)$"), tada napadač može osigurati da prazna vrijednost se upisuje u varijablu okruženja PATH_INFO. U ovom slučaju, dalje uz izvršenje
Zahtjevom za URL formatiran na određeni način, napadač može postići pomak path_info pokazivača na prvi bajt strukture "_fcgi_data_seg", a upisivanje nule u ovaj bajt će dovesti do pomicanja "char* pos" pokazivač na prethodno locirano memorijsko područje. Sljedeći nazvani FCGI_PUTENV će prepisati podatke u ovoj memoriji vrijednošću koju napadač može kontrolirati. Navedena memorija također pohranjuje vrijednosti drugih FastCGI varijabli, a upisivanjem njihovih podataka napadač može kreirati fiktivnu PHP_VALUE varijablu i postići izvršenje svog koda.
izvor: opennet.ru