Уязвимости PHP 8.1: что угрожает сайту и как защититься
Три песочных часа в ряд: боковые стоят ровно с полным запасом песка, средние накренились и почти опустели

Уязвимости PHP 8.1: что угрожает сайту и как защититься

PHP 8.1 получает только патчи безопасности и подходит к концу поддержки. Разбираем критичные CVE, как проверить сайт и безопасно обновиться.

Уязвимости PHP 8.1: что нужно знать владельцу сайта

PHP 8.1 не содержит одной «главной» дыры: опасность в том, что в ранних патч-релизах ветки были критичные CVE, а сама ветка приближается к окончанию поддержки. Безопасно работать можно только на последнем патче 8.1.x, но разумнее планировать переход на 8.3 или 8.4.

Главное правило: номер версии PHP — это не абстракция, а вопрос того, кто и как быстро закрывает найденные дыры на вашем сервере.

PHP 8.1 вышел в ноябре 2021 года и принёс enum-ы, readonly-свойства, fibers и другие новшества. Многие проекты на Laravel, Symfony, WordPress, Bitrix и самописных движках до сих пор работают именно на нём. В статье разберём, какие уязвимости уже находили в этой ветке, чем грозит окончание поддержки, как проверить свой сервер и безопасно перейти на актуальную версию.

Почему вопрос безопасности PHP 8.1 актуален именно сейчас

Любая ветка PHP проходит три стадии: активная поддержка (исправляются ошибки и уязвимости), поддержка безопасности (выходят только критичные патчи) и полное завершение жизненного цикла (end of life, EOL). Для 8.1 первая стадия закончилась в ноябре 2023 года, и сейчас ветка живёт в режиме «только security». По официальному графику на php.net этот период заканчивается в конце 2025 года, поэтому актуальные даты стоит проверять на сайте проекта.

После EOL разработчики языка перестают выпускать исправления. При этом исследователи и злоумышленники продолжают изучать код PHP, и новые уязвимости находят в старых ветках регулярно. Разница лишь в том, что для 8.1 патча уже не будет, а для 8.3 и 8.4 он выйдет в ближайшие недели.

Вторая причина торопиться: экосистема уходит вперёд. Новые мажорные версии фреймворков и CMS всё чаще требуют PHP 8.2 и выше, а значит, вы лишаетесь обновлений не только языка, но и всего стека.

жизненный цикл php 8.1
01 / ноя 2021
Релиз ветки

Выход PHP 8.1.0: enum, readonly, fibers, never.

02 / ноя 2023
Конец активной поддержки

Баги больше не правятся, выходят только патчи безопасности.

03 / конец 2025
Конец поддержки безопасности

По графику php.net. После этой даты патчей не будет совсем.

Даты приведены по графику php.net; перед планированием работ сверьтесь с актуальной страницей поддерживаемых версий.

CVE-2024-4577: самая громкая уязвимость в ветке 8.1

Наиболее известная проблема — CVE-2024-4577, уязвимость внедрения аргументов в PHP-CGI. Она получила оценку 9.8 по шкале CVSS, то есть относится к критическим. Суть в том, что на Windows из-за особенностей преобразования символов (Best-Fit) злоумышленник мог передать в PHP-CGI специально сформированный запрос и выполнить произвольный код на сервере.

Под удар попадали версии PHP 8.1 ниже 8.1.29, а также 8.2 ниже 8.2.20 и 8.3 ниже 8.3.8. Особенно рискованными оказались установки на Windows с режимом CGI, включая типовые конфигурации XAMPP. Серверы на Linux с PHP-FPM этой конкретной проблеме обычно не подвержены, но это не повод игнорировать обновления.

После исправления в 8.1.29 вышли и другие патчи безопасности ветки (8.1.30, 8.1.31, 8.1.32 и следующие). Они закрывали ошибки разбора данных, обхода защит и проблемы в отдельных расширениях. Вывод простой: если на сервере стоит не последний патч 8.1.x, вы работаете с известными, публично описанными уязвимостями.

Опасность таких CVE в том, что после публикации информации о дыре появляются готовые эксплойты, а боты начинают массово сканировать интернет. Время между раскрытием уязвимости и первыми атаками исчисляется днями, а иногда часами.

В итоге сайт может стать частью ботнета, начать рассылать спам или раздавать вредоносный код посетителям. Это приводит к санкциям поисковиков: Яндекс и Google помечают такие ресурсы как опасные, а позиции в выдаче и трафик падают.

cve-2024-4577 в цифрах
9.8
оценка CVSS: критический уровень
8.1.29
первая версия ветки 8.1 с исправлением
3
актуальные ветки получили патч: 8.1, 8.2, 8.3
Класс рискаЧем опасенКак снизить риск
Удалённое выполнение кода (RCE)Полный контроль над сервером и данными сайтаПоследний патч 8.1.x или переход на 8.3/8.4, отказ от CGI на Windows
Утечка или повреждение памятиПадение процессов, в тяжёлых случаях выполнение чужого кодаСвоевременные обновления PHP и расширений
Обход проверок и защитПодмена cookie, обход авторизации, загрузка лишнегоАктуальные CMS, плагины и серверные настройки
Отказ в обслуживании (DoS)Зависание сайта, перегрузка сервера, простоиЛимиты запросов, WAF, мониторинг нагрузки

Опасность не только в самом PHP

Когда говорят об «уязвимости PHP 8.1», часто имеют в виду совсем другое: дыры в плагинах WordPress, модулях Bitrix, устаревших библиотеках из Composer или в самописном коде. На практике именно они приводят к взломам чаще, чем баги интерпретатора.

Старая версия PHP усугубляет ситуацию: не все современные библиотеки поддерживают 8.1, а значит, вы рискуете застрять на устаревших пакетах с известными уязвимостями. Поэтому безопасность нужно оценивать комплексно: версия языка, зависимости, конфигурация сервера и права на файлы.

Как проверить и обезопасить сайт на PHP 8.1

  1. 01

    Узнайте точную версию. Выполните php -v в консоли и проверьте версию, с которой реально работает веб-сервер (php-fpm или модуль Apache): они могут отличаться от консольной. Страницу phpinfo() после проверки обязательно удалите.

  2. 02

    Сверьте патч-релиз. Сравните номер 8.1.x с последним выпуском на php.net. В Debian, Ubuntu и RHEL исправления часто переносят в «старые» номера, поэтому сверяйтесь ещё и с журналом изменений пакета в вашем дистрибутиве.

  3. 03

    Проверьте зависимости. Запустите composer audit: команда сопоставит установленные пакеты с базой известных уязвимостей. Обновите то, что имеет исправления.

  4. 04

    Поднимите тестовую копию на PHP 8.3 или 8.4. Включите error_reporting в режим E_ALL, прогоните автотесты и изучите deprecated-сообщения в логах.

  5. 05

    Обновите CMS, фреймворк и плагины. Убедитесь, что используемые версии совместимы с новым PHP, и заменяйте заброшенные расширения.

  6. 06

    Переключите продакшн и наблюдайте. Сделайте полный бэкап, переключите версию в часы минимальной нагрузки и следите за логами ошибок, откликом сайта и разделами безопасности в Яндекс Вебмастере и Google Search Console.

Перед переключением версии стоит заранее продумать откат. Хорошая практика — держать на сервере две версии PHP одновременно (например, 8.1 и 8.3) и переключать их на уровне пула php-fpm или домена. Тогда в случае проблем вы вернётесь на прежнюю конфигурацию за минуты.

Для крупных проектов разумно перейти поэтапно: сначала вынести на новую версию админку и второстепенные разделы, затем основной трафик. Так вы поймаете несовместимости на небольшой доле пользователей.

Типичные ошибки при работе с PHP 8.1

Большинство инцидентов происходит не из-за сложных атак, а из-за бытовых упущений при администрировании.

Как делают неправильно

  • Не обновляют патч-релизы, потому что «сайт и так работает»
  • Оставляют на проде phpinfo() и включённый display_errors
  • Запускают PHP-CGI на Windows с настройками по умолчанию
  • Откладывают миграцию до момента полного EOL

Как делать правильно

  1. 01

    Подписаться на рассылку о релизах PHP и ставить патчи по графику

  2. 02

    Отключить вывод ошибок на проде, писать их в лог, скрыть expose_php

  3. 03

    Перейти на PHP-FPM и актуальный веб-сервер, закрыть лишние порты

  4. 04

    Запланировать миграцию на 8.3/8.4 заранее и вести её итеративно

Базовое укрепление конфигурации

Даже пока вы готовитесь к миграции, можно снизить риски настройками. В php.ini отключите display_errors, выставьте expose_php в Off, ограничьте open_basedir для каждого сайта и уберите из disable_functions-списка только те функции, которые действительно нужны приложению (exec, system, passthru и подобные обычно остаются закрытыми).

На уровне сервера используйте отдельных пользователей для каждого сайта, минимальные права на каталоги, запрет исполнения PHP в папках загрузок и актуальные TLS-настройки. Дополнительно поможет WAF или правила фильтрации на веб-сервере, но это страховка, а не замена обновлений.

чек-лист: 15 минут на проверку
01Версия PHP в php-fpm совпадает с ожидаемой
02Установлен последний патч ветки 8.1.x
03composer audit не показывает известных уязвимостей
04display_errors выключен, expose_php выключен
05В папках загрузок запрещено выполнение PHP
06Есть свежий бэкап и проверенный план отката

Что даёт переход с PHP 8.1 на актуальную версию

  1. 01

    Регулярные патчи безопасности без риска остаться с открытой дырой

  2. 02

    Прирост производительности и более экономное использование памяти

  3. 03

    Совместимость с новыми версиями фреймворков, CMS и библиотек

  4. 04

    Современные возможности языка: типизация, readonly-классы, улучшенные атрибуты

  5. 05

    Спокойствие при аудитах, требованиях заказчиков и проверках платёжных систем

Если на сервере стоит пакет PHP от дистрибутива, сверяйте уязвимости по журналу изменений этого пакета, а не только по номеру версии. Debian, Ubuntu и RHEL нередко переносят исправления в «старые» версии, и 8.1.2 из репозитория может быть закрыт лучше, чем следует из номера.

Итоги: что делать с PHP 8.1 прямо сейчас

PHP 8.1 безопасен только на последнем патче, и это временное состояние: чем раньше вы начнёте миграцию, тем дешевле она обойдётся.
  1. 01

    Проверьте версию PHP и убедитесь, что установлен свежий патч 8.1.x

  2. 02

    Запустите composer audit и обновите уязвимые зависимости

  3. 03

    Отключите вывод ошибок, закройте лишние функции и ограничьте права

  4. 04

    Подготовьте тестовую копию на PHP 8.3 или 8.4 и спланируйте переход

  5. 05

    Следите за уведомлениями о безопасности в Яндекс Вебмастере и Google Search Console

Уязвимости в PHP находят постоянно, и это нормальная часть жизни любой технологии. Опасно не их наличие, а отсутствие процесса обновления. Выстроите регулярные проверки, закрепите ответственного и планируйте миграцию заранее, а не после инцидента. Если нужна помощь, специалисты проведут аудит и подготовят безопасный переход без простоя сайта.

Часто задаваемые вопросы

Проверьте, насколько безопасен ваш сайт на PHP 8.1

Проведём аудит версии PHP, зависимостей и конфигурации сервера и составим план безопасного обновления

Бесплатный экспресс-аудитПлан обновления за 24 часаБез простоя сайта

Более 100 проверенных проектов на PHP

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.