Критическая уязвимость PHP: как защитить сайт
Круглая заглушка с отверстием на ступенчатой подставке, сквозь которое проходит зелёный шарик

Критическая уязвимость PHP: как защитить сайт

Критические уязвимости PHP позволяют выполнить код на сервере. Рассказываем, как проверить версию, обновиться и закрыть дыры на сайте.

Критическая уязвимость PHP: что это и как не стать жертвой

Критическая уязвимость PHP — это брешь, через которую злоумышленник может удалённо выполнить свой код на вашем сервере, часто без авторизации. Закрывается она быстрым обновлением PHP до исправленной версии и проверкой сайта на следы взлома.

На PHP работает значительная часть сайтов Рунета: WordPress, 1С-Битрикс, Joomla, Laravel и множество самописных проектов. Поэтому каждая серьёзная дыра в интерпретаторе быстро превращается в массовую атаку.

Ниже разберём, чем критическая уязвимость отличается от обычной, на примере CVE-2024-4577 покажем, как такие дыры работают, и дадим понятный порядок действий для владельцев сайтов и администраторов.

Почему «критическая» — это не просто громкое слово

Уязвимости оценивают по шкале CVSS от 0 до 10. Всё, что выше 9.0, считается критическим. Такую оценку получают ошибки, которые одновременно просто эксплуатировать, которым не нужна авторизация и после которых злоумышленник получает контроль над сервером или данными.

Наиболее опасный класс — RCE (Remote Code Execution), удалённое выполнение кода. Если атакующий может запустить команду на вашем сервере, он способен скачать вредоносные скрипты, добавить скрытых администраторов, украсть базу клиентов, встроить редиректы на чужие сайты или зашифровать файлы ради выкупа.

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

cve-2024-4577 · в цифрах
01
9.8
баллов CVSS из 10: критический уровень опасности
02
0
паролей и учётных записей нужно атакующему
03
8.3.8
первая исправленная версия ветки 8.3 (для 8.2 это 8.2.20, для 8.1 это 8.1.29)

Как работает CVE-2024-4577

Эта уязвимость, раскрытая в июне 2024 года, затрагивает PHP на Windows при работе в режиме CGI. Суть в том, что при преобразовании символов из одной кодировки в другую (так называемое Best-Fit-сопоставление) определённый символ превращался в обычный дефис. В результате в PHP-CGI можно было передать собственные параметры запуска прямо через адресную строку.

С такими параметрами атакующий мог включить в настройках интерпретатора загрузку удалённых файлов и заставить сервер выполнить свой код. Уязвимость нашёл исследователь Orange Tsai из компании DEVCORE, а оценка CVSS составила 9.8.

Особенно рискованными оказались сборки вроде XAMPP на Windows, где CGI-режим включён по умолчанию. Вскоре после публикации началась массовая эксплуатация: сканеры перебирали адреса и пытались внедрить вредоносные нагрузки, в том числе шифровальщики. Исправления вышли в версиях 8.3.8, 8.2.20 и 8.1.29. Ветки, снятые с поддержки, патчей не получили.

Другие громкие случаи: уязвимости, которые «жили» годами

CVE-2024-4577 не единственный пример. В 2019 году была обнаружена уязвимость CVE-2019-11043 в PHP-FPM при связке с nginx и определённой конфигурацией fastcgi_split_path_info. Специально сформированный запрос приводил к выходу за границы памяти и выполнению кода. Исправления вышли в версиях 7.1.33, 7.2.24 и 7.3.11, но многие серверы с типовыми конфигами оставались уязвимыми долгое время.

Второй показательный случай — CVE-2017-9841 в библиотеке PHPUnit. Если папка vendor с зависимостями оказывалась доступна из интернета, файл eval-stdin.php позволял выполнять произвольный PHP-код. Это уже не ошибка самого интерпретатора, а типичная ошибка развёртывания: инструмент для разработки попал на боевой сервер. Подобные запросы до сих пор встречаются в логах множества сайтов.

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

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

Далее — практический порядок действий. Он подойдёт и для собственного VPS, и для виртуального хостинга, где часть шагов придётся согласовать с поддержкой.

Что делать, если вышла критическая уязвимость PHP

  1. 01

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

  2. 02

    Сверьтесь с официальным бюллетенем на сайте php.net и записью в базе CVE: какие ветки затронуты, какие версии содержат исправление, требуется ли определённый режим работы (CGI, FPM, mod_php).

  3. 03

    Сделайте резервную копию файлов и базы данных. Храните её отдельно от рабочего сервера, чтобы заражение не затронуло и бэкап.

  4. 04

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

  5. 05

    Перезапустите веб-сервер и PHP-FPM, затем проверьте работоспособность сайта: формы, личный кабинет, корзину, интеграции. После смены версии могут проявиться устаревшие функции.

  6. 06

    Если исправления пока нет, примените временные меры: отключите уязвимый режим (например, CGI), ограничьте доступ на уровне веб-сервера или файрвола, включите правила WAF.

  7. 07

    Проверьте журналы доступа и ошибок за период до обновления. Ищите необычные запросы к служебным файлам, длинные строки параметров, обращения к php-файлам в папках загрузок.

  8. 08

    Просканируйте файлы сайта на вредоносный код, сравните их с чистой копией или репозиторием и смените все пароли и ключи: админ-панели, FTP/SSH, базы данных, API.

Особенности хостинга и популярных CMS

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

Для WordPress, 1С-Битрикс, Joomla и других CMS вопрос обновления PHP связан с совместимостью плагинов и модулей. Поэтому сначала разверните тестовую копию, проверьте её на новой версии и только потом переключайте боевой сайт. Откладывать переход на годы нельзя: чем старее версия, тем сложнее и дороже потом переезжать.

Отдельно проверьте, не лежат ли на сервере тестовые и служебные файлы: phpinfo.php, дампы баз, архивы сайта, папки vendor с инструментами разработки. Каждый такой файл — готовая подсказка для атакующего.

чек-лист · базовая гигиена php-сервера
01
Поддерживаемая версия PHP
Ветка получает исправления безопасности, установлены последние патч-релизы.
02
Нет лишних файлов в корне сайта
phpinfo, дампы, архивы и тестовые скрипты удалены.
03
Зависимости обновлены
Composer-пакеты проверены, инструменты разработки не выложены на боевой сервер.
04
Минимальные права доступа
Запись разрешена только в нужные папки, в загрузках запрещено исполнение PHP.
05
Резервные копии и мониторинг
Бэкапы хранятся отдельно, логи просматриваются, подключены уведомления Яндекс Вебмастера и Google Search Console.

Типичные ошибки при реакции на уязвимость PHP

Даже опытные администраторы теряют время или оставляют дыры из-за привычных заблуждений.

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

  • Ждут, пока «все обновятся», и откладывают патч на месяцы
  • Обновляют PHP, но не проверяют сайт на уже внедрённый код
  • Оставляют старую ветку PHP ради совместимости с одним плагином
  • Хранят резервные копии на том же сервере, где работает сайт

Как правильно

  1. 01

    Ставить критические исправления в течение 24-72 часов после выхода

  2. 02

    После обновления просматривать логи, файлы и список пользователей

  3. 03

    Заменить или обновить несовместимый плагин, а не тянуть устаревшее окружение

  4. 04

    Хранить копии в отдельном хранилище и регулярно проверять восстановление

Ещё одна частая ошибка — надежда на то, что «мой сайт маленький, он никому не нужен». Атаки автоматизированы: сканеры не выбирают цель, они перебирают адреса подряд. Для злоумышленника небольшой сайт — это бесплатные вычислительные ресурсы, площадка для рассылки спама, хостинг фишинговых страниц или трамплин для атаки на соседние проекты.

Если у вас интернет-магазин или сервис с личными данными, риск ещё выше: утечка клиентской базы создаёт юридические обязательства, в том числе по закону о персональных данных, и бьёт по репутации.

Тип уязвимости в PHP-проектеЧем опаснаКак защититься
Удалённое выполнение кода (RCE)Полный контроль над серверомОбновление PHP, отключение лишних режимов, WAF
Внедрение SQL-кодаКража и подмена данных в базеПодготовленные запросы, проверка входных данных
Небезопасная десериализацияВыполнение кода через подменённые объектыНе десериализовать данные от пользователя
Включение файлов (LFI/RFI)Чтение конфигов, запуск чужого кодаБелые списки путей, отключение allow_url_include
Небезопасная загрузка файловЗагрузка веб-шелла под видом картинкиПроверка типа и содержимого, запрет исполнения в папке загрузок

Взлом и поисковая выдача

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

Следите за уведомлениями в Яндекс Вебмастере (раздел «Безопасность и нарушения») и в Google Search Console (раздел проблем безопасности). Эти сервисы часто замечают заражение раньше владельца. Если в Яндекс Метрике или Google Analytics вы видите необычный всплеск трафика из неизвестных источников, странные страницы в отчётах или рост отказов, это тоже повод проверить сайт.

После очистки отправьте сайт на перепроверку через те же сервисы. Пока предупреждение не снято, платная реклама в Яндекс Директе и Google Ads может быть ограничена, а органический трафик будет проседать.

таймлайн · если сайт уже взломан
0-1 час
Изоляция
Включите режим обслуживания или закройте сайт на уровне веб-сервера, сделайте копию заражённого состояния для анализа.
1-24 часа
Очистка
Обновите PHP, удалите вредоносные файлы и лишних пользователей, смените все пароли и ключи доступа.
1-3 дня
Проверка
Просмотрите логи, сравните файлы с чистой копией, проверьте базу данных на внедрённые скрипты и ссылки.
3-7 дней
Восстановление доверия
Запросите перепроверку в Яндекс Вебмастере и Google Search Console, настройте мониторинг и регулярные бэкапы.
Следите за официальными источниками: страницей релизов и списком изменений на php.net, а также базой уязвимостей CVE. Информация из пересказов и соцсетей часто неполна или устарела, поэтому перед действиями сверяйте номера версий и условия эксплуатации по первоисточнику.

Итоги: как не пропустить следующую критическую уязвимость PHP

Главная защита — не разовая «чистка», а регулярный процесс: поддерживаемая версия PHP, быстрые патчи, минимум лишних файлов и мониторинг.
  1. 01

    Критические уязвимости (CVSS 9.0 и выше) позволяют выполнить код на сервере, часто без авторизации

  2. 02

    CVE-2024-4577 показала, что даже старые, казалось бы закрытые проблемы могут вернуться в новом виде

  3. 03

    Исправления нужно ставить в течение 24-72 часов, а снятые с поддержки ветки PHP — заменять заранее

  4. 04

    После обновления проверяйте логи, файлы и доступы: патч не удаляет уже внедрённый вредоносный код

  5. 05

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

Если у вас нет времени или экспертизы, чтобы разбираться в версиях, конфигурациях и логах, доверьте это специалистам. Аудит безопасности стоит заметно дешевле, чем восстановление после взлома и потеря позиций в поиске.

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

Проверим ваш сайт на критические уязвимости PHP до взлома

Найдём устаревшие версии, опасные настройки и скрытый вредоносный код, дадим пошаговый план исправления.

Бесплатная первичная проверкаОтчёт за 24 часаБез остановки сайта

Более 300 сайтов уже защищены

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

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

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

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

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

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

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

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

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

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

Контакты

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