Атака можлива в конфігураціях nginx, в яких прокидання в PHP-FPM здійснюється з поділом частин 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