Suicide
28.10.2019, 20:09
Доступны (https://www.php.net/archive/2019.php) корректирующие релизы PHP 7.3.11, 7.1.33 и 7.2.24, в которых устранена (https://bugs.php.net/bug.php?id=78599) критическая уязвимость (https://lab.wallarm.com/php-remote-code-execution-0-day-discovered-in-real-world-ctf-exercise/) (CVE-2019-11043) в расширении PHP-FPM (менеджер процессов FastCGI), позволяющая удалённо выполнить свой код в системе. Для атаки на серверы, использующие для запуска PHP-скриптов PHP-FPM в связке с Nginx, уже публично доступен рабочий (https://github.com/jas502n/CVE-2019-11043) эксплоит (https://github.com/neex/phuip-fpizdam).
Атака возможна в конфигурациях nginx, в которых проброс в PHP-FPM осуществляется c разделением частей URL при помощи "fastcgi_split_path_info" и определением переменной окружения PATH_INFO, но без предварительной проверки существования файла директивой "try_files $fastcgi_script_name" или конструкцией "if (!-f $document_root$fastcgi_script_name)". Проблема в том числе проявляется (https://nextcloud.com/blog/urgent-security-issue-in-nginx-php-fpm/) в настройках, предлагаемых для платформы NextCloud. Например, уязвимы конфигурации с конструкциями вида:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Проследить за устранением проблемы в дистрибутивах можно на данных страницах: Debian (https://security-tracker.debian.org/tracker/CVE-2019-11043), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2019-11043), Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-11043.html), SUSE/openSUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2019-11043), FreeBSD (http://www.vuxml.org/freebsd/), Arch (https://security.archlinux.org/CVE-2019-11043), Fedora (https://bodhi.fedoraproject.org/updates/FEDORA-2019-7bb07c3b02). В качестве обходного метода защиты после строки "fastcgi_split_path_info" можно добавить проверку существования запрошенного PHP-файла:
try_files $fastcgi_script_name =404;
Проблема вызвана ошибкой при манипуляции с указателями в файле sapi/fpm/fpm/fpm_main.c (https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1140). При присвоении указателя предполагается, что значение переменной окружения PATH_INFO обязательно содержит префикс, совпадающий с путём к PHP-скрипту. Если в директиве fastcgi_split_path_info указано разделение пути к скрипту с использованием регулярного выражения, чувствительного к передаче символа перевода строки (например, во многих примерах предлагается использовать "^(.+?\.php)(/.*)$"), то атакующий может добиться записи в переменную окружения PATH_INFO пустого значения. В этом случае далее по ходу выполнения осуществляется (https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150) запись в path_info[0] нуля и вызов FCGI_PUTENV.
Запросив определённым образом оформленный URL атакующий может добиться смещения указателя path_info на первый байт структуры "_fcgi_data_seg", а запись нуля в этот байт приведёт к перемещению указателя "char* pos" на ранее идущую область памяти. Вызываемый следом FCGI_PUTENV перезапишет данные в этой памяти значением, которое может контролировать атакующий. В указанной памяти в том числе хранятся значения других переменных FastCGI и записав свои данные атакующий может создать фиктивную переменную PHP_VALUE и добиться выполнения своего кода.
24.10.2019
http://www.opennet.ru/opennews/art.shtml?num=51749
Атака возможна в конфигурациях nginx, в которых проброс в PHP-FPM осуществляется c разделением частей URL при помощи "fastcgi_split_path_info" и определением переменной окружения PATH_INFO, но без предварительной проверки существования файла директивой "try_files $fastcgi_script_name" или конструкцией "if (!-f $document_root$fastcgi_script_name)". Проблема в том числе проявляется (https://nextcloud.com/blog/urgent-security-issue-in-nginx-php-fpm/) в настройках, предлагаемых для платформы NextCloud. Например, уязвимы конфигурации с конструкциями вида:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Проследить за устранением проблемы в дистрибутивах можно на данных страницах: Debian (https://security-tracker.debian.org/tracker/CVE-2019-11043), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2019-11043), Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-11043.html), SUSE/openSUSE (https://bugzilla.suse.com/show_bug.cgi?id=CVE-2019-11043), FreeBSD (http://www.vuxml.org/freebsd/), Arch (https://security.archlinux.org/CVE-2019-11043), Fedora (https://bodhi.fedoraproject.org/updates/FEDORA-2019-7bb07c3b02). В качестве обходного метода защиты после строки "fastcgi_split_path_info" можно добавить проверку существования запрошенного PHP-файла:
try_files $fastcgi_script_name =404;
Проблема вызвана ошибкой при манипуляции с указателями в файле sapi/fpm/fpm/fpm_main.c (https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1140). При присвоении указателя предполагается, что значение переменной окружения PATH_INFO обязательно содержит префикс, совпадающий с путём к PHP-скрипту. Если в директиве fastcgi_split_path_info указано разделение пути к скрипту с использованием регулярного выражения, чувствительного к передаче символа перевода строки (например, во многих примерах предлагается использовать "^(.+?\.php)(/.*)$"), то атакующий может добиться записи в переменную окружения PATH_INFO пустого значения. В этом случае далее по ходу выполнения осуществляется (https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150) запись в path_info[0] нуля и вызов FCGI_PUTENV.
Запросив определённым образом оформленный URL атакующий может добиться смещения указателя path_info на первый байт структуры "_fcgi_data_seg", а запись нуля в этот байт приведёт к перемещению указателя "char* pos" на ранее идущую область памяти. Вызываемый следом FCGI_PUTENV перезапишет данные в этой памяти значением, которое может контролировать атакующий. В указанной памяти в том числе хранятся значения других переменных FastCGI и записав свои данные атакующий может создать фиктивную переменную PHP_VALUE и добиться выполнения своего кода.
24.10.2019
http://www.opennet.ru/opennews/art.shtml?num=51749