Атака магчымая ў канфігурацыях nginx, у якіх пракід у PHP-FPM ажыццяўляецца c падзелам частак URL пры дапамозе "fastcgi_split_path_info" і вызначэннем зменнай асяроддзя PATH_INFO, але без папярэдняй праверкі існавання файла дырэктывай "try_files $fastcgi_script_name"! document_root$fastcgi_script_name)». Праблема ў тым ліку
размяшчэнне ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Прасачыць за ўхіленнем праблемы ў дыстрыбутывах можна на дадзеных старонках:
try_files $fastcgi_script_name =404;
Праблема выклікана памылкай пры маніпуляцыі з паказальнікамі ў файле
Калі ў дырэктыве fastcgi_split_path_info паказаны падзел шляху да скрыпту з выкарыстаннем рэгулярнага выраза, адчувальнага да перадачы знака перакладу радка (напрыклад, у шматлікіх прыкладах прапануецца выкарыстоўваць "^(.+?\.php)(/.*)$"), то атакуючы можа дамагчыся запісы ў зменную асяроддзі PATH_INFO пустога значэння. У гэтым выпадку далей па ходзе выканання
Запытаўшы вызначанай выявай аформлены URL атакавалы можа дамагчыся зрушэнні паказальніка path_info на першы байт структуры «_fcgi_data_seg», а запіс нуля ў гэты байт прывядзе да перасоўвання паказальніка «char* pos» на раней ідучую вобласць памяці. Выкліканы следам FCGI_PUTENV перазапіша дадзеныя ў гэтай памяці значэннем, якое можа кантраляваць атакавалы. У паказанай памяці ў тым ліку захоўваюцца значэнні іншых зменных FastCGI і запісаўшы свае дадзеныя атакавалы можа стварыць фіктыўную зменную PHP_VALUE і дамагчыся выкананні свайго кода.
Крыніца: opennet.ru