CVE-2019-11043
PHP FastCGI Process Manager (FPM)
2022-03-25
In some versions of PHP in certain configurations of FPM setup, it is possible to cause FPM module to write past allocated buffers allowing the possibility of remote code execution.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (CVE-2019-11043) в PHP-FPM позволяет удаленному злоумышленнику выполнить произвольный код на сервере. Атака возможна при определенных конфигурациях Nginx + PHP-FPM.
Как это работает:
* Злоумышленник отправляет специально сформированный HTTP-запрос к серверу Nginx.
* При обработке запроса с определенными параметрами (например, содержащими множество символов = и & в пути) возникает ошибка в логике парсинга в PHP-FPM.
* Эта ошибка приводит к переполнению буфера в пуле процессов FPM (fpm_main.c).
* В результате атакующий может записать данные за пределы выделенной памяти, что в конечном итоге позволяет выполнить произвольный код на сервере с привилегиями рабочего процесса PHP-FPM (обычно www-data или nginx).
Условия для эксплуатации:
* Версия PHP 7.x до 7.1.31, 7.2.x до 7.2.21 или 7.3.x до 7.3.8.
* Используется связка Nginx + PHP-FPM.
* В конфигурации Nginx для обработки PHP используется директива fastcgi_split_path_info с регулярным выражением, содержащим ^ и $.
* Часть пути (PATH_INFO) передается через скрипт PHP (например, index.php/foo/bar).
Как исправить
Основное решение — обновить PHP до безопасной версии.
Для Debian/Ubuntu:
# Обновите индекс пакетов
sudo apt update
# Узнайте текущую установленную версию PHP
php -v
# Обновите все пакеты PHP (замените '7.4' на вашу основную версию)
sudo apt install php7.4-fpm php7.4-common php7.4-cli --only-upgrade
# Или обновите всю систему
sudo apt upgrade
Безопасные версии: * PHP 7.1.31 или выше * PHP 7.2.21 или выше * PHP 7.3.8 или выше
Для RHEL/CentOS/Fedora:
# Для CentOS/RHEL 7 с Remi репозиторием (пример для PHP 7.2)
sudo yum update php72-php-fpm php72-php-common
# Для CentOS/RHEL 8
sudo dnf update php-fpm php-common
Для Windows: Уязвимость не затрагивает Windows-сборки PHP, так как PHP-FPM не используется в стандартной среде Windows. Основной вектор — Unix-подобные системы.
После обновления обязательно перезапустите службу PHP-FPM:
sudo systemctl restart php7.4-fpm # Укажите вашу версию
Временное решение
Если немедленное обновление невозможно, примените одно из следующих решений:
-
Измените конфигурацию Nginx. Уберите зависимость от
PATH_INFOв правилахlocation.- Найдите в конфигах сайтов (обычно в
/etc/nginx/sites-available/) блоки вида:nginx location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; ... } - Закомментируйте или удалите строки:
nginx # fastcgi_split_path_info ^(.+?\.php)(/.*)$; # fastcgi_param PATH_INFO $fastcgi_path_info; - Проверьте конфигурацию и перезагрузите Nginx:
bash sudo nginx -t sudo systemctl reload nginx
- Найдите в конфигах сайтов (обычно в
-
Настройте WAF (Web Application Firewall).
- Для ModSecurity: Добавьте правило, блокирующее запросы, содержащие в пути множество символов
=и&перед расширением.php. - Cloud-based WAF (Cloudflare, AWS WAF): Создайте правило для блокировки шаблонов пути, соответствующих эксплойту (например,
index.php?a=с длинной строкой параметров).
- Для ModSecurity: Добавьте правило, блокирующее запросы, содержащие в пути множество символов
-
Ограничьте доступ. Если приложение не требует публичного доступа, ограничьте его корпоративным VPN или firewall-правилами.
Важно: Временные решения могут нарушить работу легитимных приложений, использующих PATH_INFO. Протестируйте изменения на staging-окружении перед применением на production.