коригиращи версии PHP 7.3.11, 7.1.33 и 7.2.24, в които критична (CVE-2019-11043) в разширението PHP-FPM (мениджър на процеси FastCGI), което позволява на отдалечен достъп до изпълнение на код в системата. За атака върху сървъри, използващи PHP-FPM в комбинация с Nginx, вече е публично достъпен .
Атаката е възможна в конфигурации на nginx, където предаването на PHP-FPM става с разделяне на частите на URL чрез „fastcgi_split_path_info“ и определяне на променливата среда PATH_INFO, но без предварителна проверка за съществуването на файла с директивата „try_files $fastcgi_script_name“ или конструкцията „if (!-f $document_root$fastcgi_script_name)“. Проблемът включва и в настройките, предлагани за платформата NextCloud. Например, уязвими конфигурации с конструкции от вида:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Проследяване на отстраняването на проблема в дистрибутивите може да се направи на следните страници: , , , , , , . Като обходен метод за защита след реда „fastcgi_split_path_info“ може да се добави проверка за съществуването на поискан PHP-файл:
try_files $fastcgi_script_name =404;
Проблемът е причинен от грешка при манипулирането на указателите в файла . При присвояването на указателите се предполага, че стойността на променливата среда PATH_INFO задължително съдържа префикс, съвпадащ с пътя към PHP-скрипта.
Ако в директивата fastcgi_split_path_info е посочено деление на пътя към скрипта с регулярния израз, чувствителен към предаването на символа за нов ред (например, в много примери се предлага да се използва „^(.+?\.php)(\/.*)$“), атакуващият може да накара да се запише в променливата среда PATH_INFO празна стойност. В този случай по-нататък в изпълнението запис в path_info[0] нула и извикване на FCGI_PUTENV.
Атакуващият, като изиска определен вид URL, може да постигне преместване на указателя path_info на първия байт от структурата „_fcgi_data_seg“, а записването на нула в този байт ще доведе до преместването на указателя „char* pos“ в предишна част от паметта. Последователно извикването на FCGI_PUTENV ще презапише данните в тази памет със стойност, която атакуващият може да контролира. В указаната памет също така се съхраняват стойности на други променливи FastCGI и записвайки собствените си данни атакуващият може да създаде фиктивна променлива PHP_VALUE и да постигне изпълнението на своя код.
Източник: opennet.ru
