Angrebet er muligt i nginx-konfigurationer, hvor videresendelse i PHP-FPM udføres ved at opdele dele af URL'en ved hjælp af "fastcgi_split_path_info" og definere PATH_INFO miljøvariablen, men uden først at kontrollere eksistensen af filen med "try_files $fastcgi_script_name" direktivet eller "if (!-f $ document_root$fastcgi_script_name)". problem inklusiv
placering ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Du kan følge fejlfindingen i distributioner på disse sider:
try_files $fastcgi_script_name =404;
Problemet er forårsaget af en fejl under manipulation af pointere i filen
Hvis fastcgi_split_path_info-direktivet specificerer at opdele stien til scriptet ved hjælp af et regulært udtryk, der er følsomt over for transmissionen af newline-tegnet (for eksempel, i mange eksempler foreslås det at bruge "^(.+?\.php)(/. *)$"), så kan angriberen opnå at skrive en tom værdi til miljøvariablen PATH_INFO. I dette tilfælde længere hen ad udførelsen
Ved at anmode om en URL formateret på en bestemt måde, kan en angriber flytte path_info-markøren til den første byte af "_fcgi_data_seg"-strukturen, og skrivning af nul til denne byte vil flytte "char * pos"-markøren til det tidligere hukommelsesområde. FCGI_PUTENV kaldet næste vil overskrive dataene i denne hukommelse med en værdi, som angriberen kan kontrollere. Den angivne hukommelse gemmer også værdierne af andre FastCGI-variabler, og ved at skrive deres data kan angriberen oprette en dummy PHP_VALUE-variabel og opnå eksekvering af sin kode.
Kilde: opennet.ru