Безопасность 3815 ~ 1 мин.

Уязвимость PHP-FPM - CVE-2019-11043

Уязвимость 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.


Что думаешь?

Категории
  • PHP 64
  • Заметки 15
  • Безопасность 3
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.4

Дата Релиз
8 Июня 2024 Альфа 1
20 Июня 2024 Альфа 2
04 Июля 2024 Альфа 3
16 Июля 2024 Feature freeze
18 Июля 2024 Бета 1
01 Августа 2024 Бета 2
15 Августа 2024 Бета 3
29 Августа 2024 RC 1
12 Сентября 2024 RC 2
26 Сентября 2024 RC 3
10 Октября 2024 RC 4
24 Октября 2024 RC 5
07 Ноября 2024 RC 6
21 Ноября 2024 GA

Что нового?