Дайджесты новостей
Сюрреалистический натюрморт с цепочкой потоковых фильтров PHP: защитные барьеры безопасности перекрывают опасную уязвимость php2shell.

Уязвимость php2shell: экстренные релизы безопасности PHP 8.2–8.5 с защитой от RCE

Ядро языка PHP получило скоординированные обновления безопасности для всех поддерживаемых версий. Поводом для экстренных релизов стала критическая уязвимость, получившая в сообществе кодовое имя php2shell, которая ставит под удар миллионы веб-серверов по всему миру.

Брешь затрагивает механизм работы встроенных потоковых оберток (Stream Wrappers) и фильтров данных, присутствующий в языке с незапамятных времен.

Давай разберем, как устроена уязвимость и как защитить свои боевые серверы.

В чем суть атаки через потоковые фильтры?

В PHP встроен мощный механизм потоков, позволяющий налету трансформировать данные при операциях ввода-вывода с помощью псевдо-протокола php://filter.

Например, разработчик может прочитать файл, автоматически перекодировав его из одной кодировки в другую: php://filter/read=convert.iconv.utf-8.utf-16le/resource=input.txt.

Уязвимость php2shell эксплуатирует тонкий дефект в связке встроенного декодера iconv и механизма выделения буферов памяти в куче (Zend Memory Manager):

  1. Цепочки фильтров: атакующий выстраивает длинную цепочку фильтров перекодирования.
  2. Некорректный расчет емкости буфера: при передаче специально подобранной последовательности невалидных байтов декодер ошибается в оценке размера выходного буфера памяти.
  3. Переполнение кучи (Heap Buffer Overflow): происходит перезапись указателей системных функций в куче процесса PHP-FPM, что приводит к перехвату потока управления и исполнению произвольного shell-кода.

Особая опасность заключается в том, что для эксплуатации уязвимости злоумышленнику достаточно найти любое место в приложении, где путь к файлу контролируется пользователем (например, невалидированный вызов file_get_contents($path), include($file) или механизм обработки временных файлов при загрузке картинок).

Экстренные версии и защитные меры

Команда мейнтейнеров ядра PHP выпустила корректирующие обновления:

  • PHP 8.2.27
  • PHP 8.3.16
  • PHP 8.4.2
  • Патчи для ветки в разработке PHP 8.5

В коде движка были внедрены жесткие лимиты:

  • Ограничена максимальная глубина вложенности цепочек потоковых фильтров.
  • Добавлена строгая проверка границ буферов при конвертации кодировок через библиотеку iconv.
  • Заблокирована возможность бесконечного раздувания памяти при обработке поврежденных байтовых последовательностей.

Что делать разработчикам и DevOps?

  1. Немедленно обновите системные пакеты PHP: на всех серверах с PHP-FPM или Apache обновите установленные пакеты до версий 8.2.27, 8.3.16 или 8.4.2.
  2. Аудит файловых операций: проверьте кодовую базу на предмет использования конструкций вида include $page или file_get_contents($url). Никогда не передавайте пользовательские строки напрямую в файловые функции без валидации по строгому белому списку (allowlist).
  3. Отключение неиспользуемых оберток: если приложению не требуются сетевые обертки, отключите директивы allow_url_fopen и allow_url_include в файле php.ini.

Своевременная установка системных обновлений — единственный надежный щит против автоматизированных эксплойтов.