Uzbrukums ir iespējams nginx konfigurācijās, kurās pārsūtīšana uz PHP-FPM tiek veikta, atdalot URL daļas, izmantojot “fastcgi_split_path_info” un definējot vides mainīgo PATH_INFO, taču iepriekš nepārbaudot faila esamību, izmantojot “try_files $fastcgi_script_name”. direktīva vai “if (!-f $) document_root$fastcgi_script_name)”. Problēma arī ir
atrašanās vieta ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Problēmas risinājumam varat izsekot izplatīšanas komplektos šajās lapās:
try_files $fastcgi_script_name =404;
Problēmu izraisa kļūda, manipulējot ar norādes failā
Ja direktīvā fastcgi_split_path_info ir norādīts skripta ceļa sadalīšana, izmantojot regulāro izteiksmi, kas ir jutīga pret jaunām rindiņām (piemēram, daudzi piemēri iesaka izmantot "^(.+?\.php)(/.*)$", tad uzbrucējs var nodrošināt, ka tukša vērtība tiek ierakstīta vides mainīgajā PATH_INFO. Šajā gadījumā tālāk izpildes gaitā
Pieprasot noteiktā veidā formatētu URL, uzbrucējs var panākt path_info rādītāja nobīdi uz pirmo struktūras “_fcgi_data_seg” baitu, un, ierakstot šim baitam nulli, tiks pārvietots “char* pos”. norādiet uz iepriekš atrastu atmiņas apgabalu. Nākamais FCGI_PUTENV pārrakstīs šajā atmiņā esošos datus ar vērtību, ko uzbrucējs var kontrolēt. Norādītajā atmiņā tiek saglabātas arī citu FastCGI mainīgo vērtības, un, ierakstot to datus, uzbrucējs var izveidot fiktīvu PHP_VALUE mainīgo un panākt sava koda izpildi.
Avots: opennet.ru