Ранливост во php-fpm што овозможува далечинско извршување на кодот на серверот

Достапни корективни изданија на 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;
}

Можете да го следите решавањето на проблемот во комплетите за дистрибуција на овие страници: Debian, RHEL, Ubuntu, SUSE/OPENSUSE, FreeBSD, Лак, Fedora. Како решение, можете да додадете проверка за постоењето на бараната PHP-датотека по линијата „fastcgi_split_path_info“:

try_files $fastcgi_script_name =404;

Проблемот е предизвикан од грешка при манипулирање со покажувачите во датотека sapi/fpm/fpm/fpm_main.c. При доделување на покажувач, се претпоставува дека вредноста на променливата на околината 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

Додадете коментар