PHP перевыпустил Windows-сборки из-за уязвимости Brotli

PHP перевыпустил официальные Windows-пакеты для веток 8.2–8.5, чтобы устранить CVE-2026-111497 в библиотеке сжатия Brotli. Новые сборки 8.5.12-1, 8.4.27-1, 8.3.36-1 и 8.2.35-1 включают Brotli 1.2.1. Уязвимость может приводить к повреждению памяти и потенциальному выполнению кода.
Обновление вышло через пять дней после релизов от 21 октября, закрывавших две уязвимости удалённого выполнения кода PHP2Shell. Исходный код PHP в новых архивах не менялся: исправления PHP2Shell в них сохранены, а заменённым компонентом стала Brotli.
Когда уязвимость достижима
PHP указывает, что проблема может быть достигнута через расширение cURL, если оно автоматически распаковывает HTTP-ответы. В обычной конфигурации cURL эта функция выключена, однако приложение или используемая им HTTP-библиотека могут включить её.
В PHP автоматическое декодирование активирует параметр CURLOPT_ENCODING. Пустое значение позволяет cURL принимать все поддерживаемые форматы сжатия. В Guzzle опция decode_content по умолчанию задаёт такое пустое значение для запросов, отправляемых через cURL; это указано в коде релизов Guzzle 7.16.1 и 8.3.1.
Таким образом, приложения с настройками Guzzle по умолчанию соответствуют условию, при котором дефект может быть достигнут в прошлых Windows-сборках PHP. Для атаки приложению должен прийти специально сформированный сжатый ответ от сервера, с которым оно устанавливает HTTP-соединение.
Какие версии нужно установить
Software bill of materials для x64 Non Thread Safe-сборок прошлой недели показывает Brotli 1.2.0 — одну из затронутых версий. Исправления для библиотеки ранее вышли в Brotli 1.2.1, 1.1.1 и 1.0.10. Google оценил CVE-2026-111497 в 9,2 балла по CVSS 4.0, Red Hat — в 8,1 балла по CVSS 3.1.
PHP рекомендует пользователям Windows скачать новые архивы со страницы загрузок. Команда php -v после замены покажет прежний номер PHP, поэтому ориентироваться следует на суффикс -1 в имени файла и контрольную сумму SHA-256. Например, новый архив называется php-8.5.12-1-nts-Win32-vs17-x64.zip.
Временное снижение риска
PHP не предложил обходного решения для систем, которые пока нельзя обновить. OpenAI рекомендует до установки исправления отключить автоматическое распаковывание Brotli в HTTP-клиентах. Удаления br из заголовка Accept-Encoding недостаточно: сервер всё равно может прислать такой ответ.
Для PHP это означает не задавать CURLOPT_ENCODING. В Guzzle следует установить decode_content=false; при этом автоматически не будут распаковываться и ответы gzip. Бизнесу стоит проверить Windows-развёртывания PHP, использование Guzzle и настройки HTTP-клиентов, затем установить пересобранные пакеты и сверить их SHA-256.

