Уязвимость PHP-FPM - CVE-2019-11043
Доступны корректирующие релизы PHP 7.3.11, 7.2.24 и 7.1.33, в которых устранена критическая уязвимость (CVE-2019-11043) в расширении PHP-FPM
Для исправления уязвимости CVE-2019-11043 в расширении PHP-FPM выпущены корректирующие релизы PHP 7.3.11, 7.2.24 и 7.1.33, как было сказано уязвимость позволяет пользователю, выполнить свой код извне.
Для атаки на серверы, использующие для запуска PHP-скриптов PHP-FPM в связке с Nginx, уже публично доступен рабочий эксплоит.
Строка 1140 в файле sapi /fpm/fpm/fpm_main.c (https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1140) содержит манипуляции с указателями, которые предполагают что env_path_info имеет префикс, равный пути к php скрипту. Тем не менее, код не проверяет выполняется ли это предположение. Отсутствие проверки может привести к неверному указателю в переменной «path_info».
Если веб-сервер запускает Nginx + PHP-FPM, а Nginx имеет такую конфигурацию, как
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;
Технические детали уязвимости
Запросив определённым образом оформленный URL атакующий может добиться смещения указателя path_info на первый байт структуры "_fcgi_data_seg", а запись нуля в этот байт приведёт к перемещению указателя "char* pos" на ранее идущую область памяти. Вызываемый следом FCGI_PUTENV перезапишет данные в этой памяти значением, которое может контролировать атакующий. В указанной памяти в том числе хранятся значения других переменных FastCGI и записав свои данные атакующий может создать фиктивную переменную PHP_VALUE и добиться выполнения своего кода.
Разве это не было ранее известно?
Давным-давно php-fpm не ограничивал расширения скриптов, а это означало, что что-то подобное /avatar.png/some-fake-shit.php может выполнить avatar.png как скрипт PHP. Эта проблема была исправлена в 2010 году. Текущая версия не требует загрузки файла, работает в самых последних версиях (пока не появилось исправление), и, что наиболее важно, в этот раз эксплоит намного круче.
Так что, из-за наличия готового PoC-эксплоита и простоты использования уязвимости владельцам сайтов рекомендуется проверить настройки серверов и не откладывать обновление PHP.
Что думаешь?