La atako estas ebla en nginx-agordoj en kiuj plusendado al PHP-FPM estas farata disigante partojn de la URL uzante "fastcgi_split_path_info" kaj difinante la mediovariablon PATH_INFO, sed sen unue kontroli la ekziston de la dosiero uzante la "try_files $fastcgi_script_name" direktivo aŭ la "se (!-f $) dokument_radiko$fastcgi_script_name)". La problemo ankaŭ estas
loko ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Vi povas spuri la solvon de la problemo en distribuaj iloj sur ĉi tiuj paĝoj:
provi_dosieroj $fastcgi_script_name =404;
La problemo estas kaŭzita de eraro dum manipulado de montriloj en dosiero
Se la direktivo fastcgi_split_path_info specifas disigi la skriptovojon per novlinio-sentema regula esprimo (ekzemple, multaj ekzemploj sugestas uzi "^(.+?\.php)(/.*)$"), tiam atakanto povus certigi ke malplena valoro estas skribita al la mediovariablo PATH_INFO. En ĉi tiu kazo, plu laŭ la ekzekuto
Petante URL formatitan en certa maniero, atakanto povas atingi movon de la path_info-montrilo al la unua bajto de la "_fcgi_data_seg" strukturo, kaj skribi nulon al ĉi tiu bajto kondukos al la movado de la "char* pos" montrilo al antaŭe lokita memorareo. La sekva nomita FCGI_PUTENV anstataŭigos la datumojn en ĉi tiu memoro kun valoro, kiun la atakanto povas kontroli. La specifita memoro ankaŭ konservas la valorojn de aliaj FastCGI-variabloj, kaj skribante iliajn datumojn, atakanto povas krei fikcian PHP_VALUE-variablon kaj atingi ekzekuton de sia kodo.
fonto: opennet.ru