Команда разработчиков PHP только что выпустила PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35 для устранения двух критических уязвимостей, которые могут позволить неавторизованным злоумышленникам выполнить удаленный код. Команда настоятельно рекомендует всем немедленно обновиться и заявляет, что полных обходных путей (митигаций) не существует.
Уязвимость затрагивает каждую инсталляцию PHP, обрабатывающую веб-запросы, включая PHP-FPM, Apache с mod_php, php-cgi, FrankenPHP и LiteSpeed. Это охватывает способ работы большинства приложений на Laravel в продакшене, поэтому запланируйте обновление серверов на сегодня.
Примечание: Это развивающаяся история, и мы будем обновлять материал по мере поступления новой информации.
#Уязвимости
Команда PHP оценивает риски как наивысшие для mod_php, где у них есть рабочий эксплойт, срабатывающий по неавторизованному запросу до запуска какого-либо кода приложения. Вот эти два CVE:
- RCE из-за повреждения памяти при OOM, CVE-2026-109618 (GHSA-w8hw-w9fx-j79w): обработка нехватки памяти может прервать работу PHP в момент, когда данные внутреннего запроса инициализированы лишь частично. Затем очистка запроса может интерпретировать эти недействительные данные как валидные.
- RCE из-за устаревшего глобального состояния, CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp): внутреннее состояние, принадлежащее запросу, может сохраниться после освобождения его памяти. Последующий запрос на том же воркере может использовать это устаревшее состояние до того, как его сбросит стандартная инициализация.
#Как обновиться
- Обновитесь до PHP 8.5.12, 8.4.27, 8.3.36 или 8.2.35. Исходный код доступен на странице загрузки PHP, там же находятся сборки для Windows.
- Дистрибутивы Linux и LTS-вендоры получили патчи заранее, поэтому проверьте наличие обновленных пакетов у вашего поставщика.
- PHP 8.1 и более старые версии больше не поддерживаются проектом PHP. Некоторые дистрибутивы и LTS-вендоры портируют исправления самостоятельно — уточните у своего вендора или обновитесь до поддерживаемой версии.
- Если вы используете поддерживаемый силами энтузиастов репозиторий
rpms.remirepo.net, обновления в нем сегодня не появятся. Команда PHP рекомендует переключиться на пакеты дистрибутива или сборку из исходников.
Из-за высокой степени серьезности команда безопасности PHP также опубликовала минимальные бэкпорты исходного кода для PHP 7.4, PHP 8.0 и PHP 8.1 для тех, кто собирает PHP из исходного кода без помощи LTS-вендора.
#Laravel Cloud, Forge, Vapor и Envoyer
Laravel публикует статус для каждой из своих платформ в разделе обновлений о реакции на критическую уязвимость PHP. По состоянию на 23:26 UTC 21 октября:
#Laravel Cloud
Laravel пропатчил все запущенные на Cloud приложения прямо на месте с помощью обновлений безопасности PHP и Node.js. Теперь приложения работают на PHP 8.5.12, 8.4.27, 8.3.36 или 8.2.35, в зависимости от используемой ими версии. Повторный деплой не требуется, развертывания возобновлены, а новые деплои используют обновленные базовые образы.
#Laravel Forge
Серверы в Forge требуют ручного обновления:
- На PHP 8.2, 8.3, 8.4 или 8.5 откройте каждый сервер в Forge и нажмите Update PHP. В Laravel отмечают, что из-за высокого спроса обновление может занять больше времени, чем обычно.
- Если это не помогло, обновите PHP по протоколу SSH, следуя руководству Forge. Запустите
php -vна сервере, чтобы убедиться, что он пропатчен. - Серверы под управлением Ubuntu 20.04 или более старых версий не могут получить это обновление. Создайте новый сервер на поддерживаемой версии Ubuntu и перенесите на него свои сайты. Laravel рекомендует выключить старый сервер до завершения миграции.
- В Forge нет патчей для PHP 8.0 или 8.1. Обновитесь до PHP 8.2 или новее.
- Forge не обновляет Node.js автоматически, поэтому вам нужно обновить его на каждом сервере, где он используется.
#Laravel Vapor
Пропатченные рантаймы PHP уже доступны на Vapor, но вам потребуется самостоятельно развернуть приложения:
- Приложениям на нативном рантайме с PHP 8.2 или выше требуется повторный деплой.
- Приложениям на кастомном рантайме или рантайме с Docker-образом требуется полноценный новый деплой (а не просто повторное развертывание).
- На Vapor нет патчей для PHP 8.0 или 8.1. Обновитесь до PHP 8.2 или новее.
#Laravel Envoyer
Envoyer снова в сети, деплои выполняются. Проверки работоспособности (Health checks) пока не восстановлены. В Laravel говорят, что для этого требуется дополнительное обновление PHP, с которым они разберутся отдельно.
#Если вы не можете обновиться прямо сейчас
Обновление — единственное полноценное исправление. В рекомендациях по безопасности перечислены настройки, снижающие риски для конкретных векторов атак, однако команда PHP четко дает понять, что они не делают систему полностью защищенной.
Для CVE-2026-109618 (повреждение памяти при OOM):
- Установите
memory_limit=-1там, где приложения не смогут это переопределить, например вphp_admin_valueв пуле FPM или конфиге Apache. Убедитесь, что ни один пул, директория или настройка приложения не возвращают конечный лимит. - Снизьте
post_max_size. В рекомендациях предлагают8Mдля приложений без загрузки файлов и32Mдля приложений, которым это необходимо. Держитеupload_max_filesizeнижеpost_max_size. - Внедрите ограничения на веб-сервере или прокси для размера декодированного запроса, количества полей ввода, количества частей multipart, количества заголовков и глубины вложенности. Эти лимиты также должны покрывать запросы без пригодного к использованию
Content-Length. - Используйте ограничения памяти для контейнера или cgroup, в идеале такие, которые завершают работу только затронутого воркера. Не используйте вместо этого
RLIMIT_ASилиRLIMIT_DATA, так как они могут спровоцировать уязвимый сбой выделения памяти.
Для CVE-2026-109619 (устаревшее глобальное состояние):
- Установите
session.upload_progress.enabled=0вphp.ini, пуле FPM или конфигурации сервера, затем перезапустите каждый воркер. Файлыini_set()и FPM.user.iniприменяются недостаточно рано. - На PHP 8.5 установите
fatal_error_backtraces=0и перезапустите все воркеры. - Удалите недействительные или устаревшие настройки на уровне запроса, которые выводят диагностику до инициализации. Скрытие их с помощью
error_reporting,display_errorsили@не поможет. - Исправьте фатальные ошибки и тайм-ауты выполнения, до которых может дотянуться злоумышленник, включая сбои в колбэках, обработке загрузок или импорта и очистке.
#Если у вас старая версия Laravel
Уже более десяти лет Laravel Shift является надежным сервисом в сообществе Laravel. Это самый быстрый и тщательный способ обновить ваше приложение на Laravel.
#Дополнительные материалы
Все подробности приведены в бюллетене безопасности PHP и двух упомянутых выше бюллетенях на GitHub. Обновите свои серверы как можно скорее.
Комментарии (0)
Пока нет комментариев — будьте первым.