21 октября разработчики PHP выпустили обновления, которые устраняют две критические уязвимости. Ошибки нашли в самом PHP — программе, которая выполняет код сайтов на сервере. Поэтому обновить нужно именно PHP: обновления системы управления сайтом и её плагинов проблему не решат.
Чем уязвимости опасны для компаний и пользователей
При успешной атаке злоумышленник может выполнять вредоносный код с правами процесса, который обрабатывает запросы к сайту. Эти права определяют, к каким данным и ресурсам он получит доступ. Такой результат атаки подтвердили разработчики PHP.
Например, на сервере интернет-магазина атакующий может прочитать доступные приложению данные клиентов, изменить страницы или нарушить работу сайта. Для покупателей это риск раскрытия персональных данных и потери доступа к сервису, для компании — простоя и финансовых потерь.
Ошибки находятся в самом PHP, поэтому даже сайт, который проверяет права пользователей и введённые данные, может оставаться уязвимым.
Наибольший риск команда PHP отмечает для серверов Apache с модулем mod_php. Исследователи продемонстрировали атаку, которая срабатывает ещё до запуска кода приложения. В этом случае встроенные в сайт проверки безопасности не успевают проверить опасный запрос.
Как работают уязвимости
Ошибка CVE-2026-109618 связана с нехваткой памяти: если память заканчивается в момент, когда PHP ещё подготавливает служебные данные для запроса, он прерывает работу. Но затем, при очистке памяти, обращается к этим данным так, будто они уже готовы. Из-за этого PHP неправильно читает или изменяет память. При определённых условиях атакующий может использовать ошибку, чтобы запустить свой код.
Исследователи показали, что вызвать такой сбой можно специально составленными HTTP-запросами. Один из способов связан с multipart/form-data — форматом, в котором браузер передаёт поля формы и прикреплённые файлы на сервер.
Ошибка CVE-2026-109619 относится к классу use-after-free — использованию памяти после её освобождения. Один процесс PHP может последовательно обрабатывать много запросов. Когда запрос завершён, PHP освобождает память с его временными данными: теперь этот участок можно использовать для других задач.
Из-за ошибки PHP иногда сохраняет старую ссылку — адрес уже освобождённого участка памяти. При обработке следующего запроса тот же процесс может обратиться по этому адресу. Там уже могут находиться другие данные, но PHP принимает их за прежние. Если злоумышленнику удастся повлиять на содержимое этого участка памяти, он может добиться выполнения своего кода.
Что нужно обновить и перезапустить
Исправления выпустили для четырёх веток PHP: 8.2.35, 8.3.36, 8.4.27 и 8.5.12. После установки нужно перезапустить процессы, которые выполняют код, чтобы они начали использовать исправленную версию.
Если PHP работает внутри контейнера, обновления операционной системы сервера недостаточно: в контейнере может остаться старый интерпретатор. Нужно обновить образ и запустить контейнеры на его основе. Если PHP входит в состав серверной платформы, наличие исправлений следует проверить у её поставщика.
PHP 8.1 и более ранние ветки больше не получают обновления безопасности от разработчиков проекта. Исправления для них могут предоставлять поставщики Linux-дистрибутивов и услуг расширенной поддержки. Если поставщик не предлагает исправлений, нужно перейти на поддерживаемую ветку PHP.
Почему проблему исправили только сейчас
Признаки одной из ошибок нашли ещё в 2024 году, но тогда не подтвердили возможность удалённой атаки. Осенью 2026-го её опасность доказали Calif, OpenAI и Wiz. PHP Foundation объяснила задержку сложностью изменений в ядре PHP и нехваткой разработчиков.
После утечки номеров CVE 20 октября выпуск исправлений перенесли с 22 на 21 октября. К моменту релиза команда PHP не нашла рабочих эксплойтов среди проверенных публичных образцов. Это не исключает атак после публикации технических подробностей.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!