коригиращи версии на PHP 7.3.11, 7.1.33 и 7.2.24, в които критична (CVE-2019-11043) в разширението PHP-FPM (FastCGI Process Manager), което ви позволява дистанционно да изпълнявате своя код в системата. За да атакувате сървъри, които използват PHP-FPM във връзка с Nginx за изпълнение на PHP скриптове, той вече е публично достъпен .
Атаката е възможна в конфигурации на nginx, в които пренасочването към PHP-FPM се извършва чрез разделяне на части от URL с помощта на „fastcgi_split_path_info“ и дефиниране на променливата на средата PATH_INFO, но без първо да се провери съществуването на файла с помощта на „try_files $fastcgi_script_name“ директива или „if (!-f $) document_root$fastcgi_script_name)“. Проблемът също е в настройките, предлагани за платформата NextCloud. Например конфигурации със структури като:
местоположение ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Можете да проследите разрешаването на проблема в комплекти за разпространение на тези страници: , , , , , , . Като заобиколно решение можете да добавите проверка за съществуването на искания PHP файл след реда „fastcgi_split_path_info“:
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
