PHP устранил уязвимости, ведущие к отказу в обслуживании и повреждению памяти

php

Разработчики языка PHP выпустили накопительные обновления безопасности для веток 8.5, 8.4, 8.3 и 8.2, которые закрывают две уязвимости, связанные с повреждением памяти. Проблемы затрагивают механизмы шифрования через OpenSSL и обработку HTTPS-запросов через HTTP-прокси. В случае успешной эксплуатации злоумышленник мог бы вызвать аварийное завершение PHP-процесса, то есть привести к отказу в обслуживании на стороне сервера.

Детали уязвимостей

Первая уязвимость (CVE-2026-14355) обнаружена в реализации алгоритма AES-WRAP-PAD в расширении OpenSSL. Речь идёт об упаковке ключей с дополнением, описанной в стандарте RFC 5649. Ошибка заключалась в неверном расчёте размера выходного буфера: разработчики PHP учитывали только длину исходного текста, не добавляя запас на расширение, которое предусмотрено стандартом. В результате вызов openssl_encrypt с соответствующей комбинацией параметров приводил к тому, что OpenSSL записывал данные за границы выделенной области памяти. Такое heap-based buffer overflow (переполнение буфера в куче) способно повредить служебные структуры менеджера памяти zend_mm, что практически гарантированно заканчивается аварийным остановом интерпретатора. Исследователь под ником devnexen оформил исправление в виде pull-запроса в официальный репозиторий PHP, указав, что проблема затрагивает все поддерживаемые ветки, начиная с PHP 8.2.0.

Вторая уязвимость (CVE-2026-12184) носит менее сложный, но не менее опасный характер. Она проявляется при вызове функции file_get_contents с HTTPS-URL и одновременно настроенным HTTP-прокси. Разработчик под псевдонимом devicenull выяснил, что в определённом сценарии - когда TLS-соединение через прокси не удаётся установить - код пытается сбросить опцию peer_name в контексте потока. Однако указатель на сам поток (stream) к этому моменту уже оказывается нулевым. Отсутствие проверки на NULL приводит к разыменованию невалидного адреса и сегментной ошибке (segfault). Исследователь ndossche ранее обнаружил эту же проблему с помощью собственного инструмента статического анализа, а позже подготовил патч, который прошёл ревью и был принят в основную ветку.

Обе уязвимости характеризуются как имеющие средний уровень опасности (Medium) по шкале CVSS v3.1 с оценкой 5.6 баллов для CVE-2026-14355 и несколько ниже для CVE-2026-12184 (формальный CVSS-вектор для последней в открытых источниках не опубликован, но она оценивается как проблема надёжности, а не конфиденциальности). Вектор для переполнения буфера в OpenSSL составляет AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L - это означает, что атака возможна удалённо, но требует высокой сложности и не даёт злоумышленнику полного контроля над системой: ущерб ограничен частичной утечкой, частичным изменением данных и отказом в обслуживании.

Для администраторов серверов важно понимать, что обе проблемы приводят к остановке PHP-процесса. При отказе в обслуживании на веб-сервере это может означать временную недоступность сайта или приложения. Особенно уязвимы конфигурации, где PHP используется для проксирования HTTPS-запросов или для криптографических операций с обёрткой ключей. Проблема с file_get_contents и прокси затрагивает любые скрипты, которые загружают данные по HTTPS через HTTP-прокси - например, системы кеширования или интеграционные модули, обращающиеся к внешним API.

Исходный код обоих исправлений опубликован в репозитории PHP и прокомментирован разработчиками. В обсуждении переполнения буфера ndossche обратил внимание на возможное переполнение при суммировании длины данных с размером блока, однако devnexen пояснил, что риск исключён: перед вызовом функция проверяет, что размер данных не превышает INT_MAX, и даже в худшем случае сумма INT_MAX и двух блоков шифра укладывается в size_t на любой платформе.

Патчи уже включены в релизы PHP 8.5.8, PHP 8.4.23, PHP 8.3.32 и PHP 8.2.32. Разработчики рекомендуют всем владельцам серверов обновить установки PHP до указанных версий. Если немедленное обновление невозможно, в качестве временной меры можно отключить использование функции openssl_encrypt с режимом AES-WRAP-PAD, а также ограничить вызовы file_get_contents с одновременной передачей HTTPS-URL и настройки proxy в контексте потока. Однако такая блокировка снизит функциональность приложений.

Выпуск внеплановых обновлений для всех поддерживаемых веток подчёркивает, что уязвимости были признаны критическими с точки зрения стабильности работы. PHP продолжает придерживаться политики оперативного реагирования на отчёты об ошибках безопасности от внешних исследователей.

Ссылки

 

Комментарии: 0