
Критическая уязвимость PHP: как защитить сайт
Критические уязвимости PHP позволяют выполнить код на сервере. Рассказываем, как проверить версию, обновиться и закрыть дыры на сайте.
Критическая уязвимость PHP: что это и как не стать жертвой
Критическая уязвимость PHP — это брешь, через которую злоумышленник может удалённо выполнить свой код на вашем сервере, часто без авторизации. Закрывается она быстрым обновлением PHP до исправленной версии и проверкой сайта на следы взлома.
Ниже разберём, чем критическая уязвимость отличается от обычной, на примере CVE-2024-4577 покажем, как такие дыры работают, и дадим понятный порядок действий для владельцев сайтов и администраторов.
Почему «критическая» — это не просто громкое слово
Уязвимости оценивают по шкале CVSS от 0 до 10. Всё, что выше 9.0, считается критическим. Такую оценку получают ошибки, которые одновременно просто эксплуатировать, которым не нужна авторизация и после которых злоумышленник получает контроль над сервером или данными.
Наиболее опасный класс — RCE (Remote Code Execution), удалённое выполнение кода. Если атакующий может запустить команду на вашем сервере, он способен скачать вредоносные скрипты, добавить скрытых администраторов, украсть базу клиентов, встроить редиректы на чужие сайты или зашифровать файлы ради выкупа.
Отдельная проблема PHP — масштаб. Один и тот же интерпретатор стоит на миллионах серверов, а автоматические сканеры проверяют адреса в интернете круглосуточно. Как правило, между публикацией информации об уязвимости и первыми массовыми попытками взлома проходят считаные дни, а иногда и часы.
Как работает 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
- 01
Определите точную версию PHP. Выполните php -v в консоли или откройте раздел настроек PHP в панели хостинга. Учтите, что на одном сервере может быть несколько версий для разных сайтов.
- 02
Сверьтесь с официальным бюллетенем на сайте php.net и записью в базе CVE: какие ветки затронуты, какие версии содержат исправление, требуется ли определённый режим работы (CGI, FPM, mod_php).
- 03
Сделайте резервную копию файлов и базы данных. Храните её отдельно от рабочего сервера, чтобы заражение не затронуло и бэкап.
- 04
Обновите PHP до исправленной версии своей ветки или перейдите на поддерживаемую. Если используете пакеты ОС, ставьте обновления из официальных репозиториев; на хостинге переключите версию в панели либо напишите в поддержку.
- 05
Перезапустите веб-сервер и PHP-FPM, затем проверьте работоспособность сайта: формы, личный кабинет, корзину, интеграции. После смены версии могут проявиться устаревшие функции.
- 06
Если исправления пока нет, примените временные меры: отключите уязвимый режим (например, CGI), ограничьте доступ на уровне веб-сервера или файрвола, включите правила WAF.
- 07
Проверьте журналы доступа и ошибок за период до обновления. Ищите необычные запросы к служебным файлам, длинные строки параметров, обращения к php-файлам в папках загрузок.
- 08
Просканируйте файлы сайта на вредоносный код, сравните их с чистой копией или репозиторием и смените все пароли и ключи: админ-панели, FTP/SSH, базы данных, API.
Особенности хостинга и популярных CMS
На виртуальном хостинге версию PHP обычно переключают в панели управления. Если нужной ветки нет, это повод сменить провайдера или тариф: хостинг, который не обновляет окружение, превращается в постоянный источник риска. Уточните у поддержки, как быстро они ставят патчи после выхода критических релизов.
Для WordPress, 1С-Битрикс, Joomla и других CMS вопрос обновления PHP связан с совместимостью плагинов и модулей. Поэтому сначала разверните тестовую копию, проверьте её на новой версии и только потом переключайте боевой сайт. Откладывать переход на годы нельзя: чем старее версия, тем сложнее и дороже потом переезжать.
Отдельно проверьте, не лежат ли на сервере тестовые и служебные файлы: phpinfo.php, дампы баз, архивы сайта, папки vendor с инструментами разработки. Каждый такой файл — готовая подсказка для атакующего.
Типичные ошибки при реакции на уязвимость PHP
Как делают неправильно
- Ждут, пока «все обновятся», и откладывают патч на месяцы
- Обновляют PHP, но не проверяют сайт на уже внедрённый код
- Оставляют старую ветку PHP ради совместимости с одним плагином
- Хранят резервные копии на том же сервере, где работает сайт
Как правильно
- 01
Ставить критические исправления в течение 24-72 часов после выхода
- 02
После обновления просматривать логи, файлы и список пользователей
- 03
Заменить или обновить несовместимый плагин, а не тянуть устаревшее окружение
- 04
Хранить копии в отдельном хранилище и регулярно проверять восстановление
Ещё одна частая ошибка — надежда на то, что «мой сайт маленький, он никому не нужен». Атаки автоматизированы: сканеры не выбирают цель, они перебирают адреса подряд. Для злоумышленника небольшой сайт — это бесплатные вычислительные ресурсы, площадка для рассылки спама, хостинг фишинговых страниц или трамплин для атаки на соседние проекты.
Если у вас интернет-магазин или сервис с личными данными, риск ещё выше: утечка клиентской базы создаёт юридические обязательства, в том числе по закону о персональных данных, и бьёт по репутации.
| Тип уязвимости в PHP-проекте | Чем опасна | Как защититься |
|---|---|---|
| Удалённое выполнение кода (RCE) | Полный контроль над сервером | Обновление PHP, отключение лишних режимов, WAF |
| Внедрение SQL-кода | Кража и подмена данных в базе | Подготовленные запросы, проверка входных данных |
| Небезопасная десериализация | Выполнение кода через подменённые объекты | Не десериализовать данные от пользователя |
| Включение файлов (LFI/RFI) | Чтение конфигов, запуск чужого кода | Белые списки путей, отключение allow_url_include |
| Небезопасная загрузка файлов | Загрузка веб-шелла под видом картинки | Проверка типа и содержимого, запрет исполнения в папке загрузок |
Взлом и поисковая выдача
Последствия взлома выходят за рамки технической части. Если на сайт внедрён вредоносный код или скрытые ссылки, поисковые системы могут пометить его как небезопасный и показать пользователям предупреждение. Посещаемость в такие периоды падает резко, а восстановление доверия занимает недели.
Следите за уведомлениями в Яндекс Вебмастере (раздел «Безопасность и нарушения») и в Google Search Console (раздел проблем безопасности). Эти сервисы часто замечают заражение раньше владельца. Если в Яндекс Метрике или Google Analytics вы видите необычный всплеск трафика из неизвестных источников, странные страницы в отчётах или рост отказов, это тоже повод проверить сайт.
После очистки отправьте сайт на перепроверку через те же сервисы. Пока предупреждение не снято, платная реклама в Яндекс Директе и Google Ads может быть ограничена, а органический трафик будет проседать.
Итоги: как не пропустить следующую критическую уязвимость PHP
- 01
Критические уязвимости (CVSS 9.0 и выше) позволяют выполнить код на сервере, часто без авторизации
- 02
CVE-2024-4577 показала, что даже старые, казалось бы закрытые проблемы могут вернуться в новом виде
- 03
Исправления нужно ставить в течение 24-72 часов, а снятые с поддержки ветки PHP — заменять заранее
- 04
После обновления проверяйте логи, файлы и доступы: патч не удаляет уже внедрённый вредоносный код
- 05
Подключите Яндекс Вебмастер и Google Search Console, чтобы вовремя получать сигналы о заражении
Если у вас нет времени или экспертизы, чтобы разбираться в версиях, конфигурациях и логах, доверьте это специалистам. Аудит безопасности стоит заметно дешевле, чем восстановление после взлома и потеря позиций в поиске.
Часто задаваемые вопросы
Это ошибка в интерпретаторе PHP или в связанном с ним ПО, которая позволяет злоумышленнику без пароля выполнить произвольный код на сервере. Обычно такие уязвимости получают оценку CVSS от 9.0 до 10.0.
Проверьте версию PHP в панели хостинга или командой php -v, затем сравните её с бюллетенями безопасности на официальном сайте php.net. Если ваша ветка больше не поддерживается, считайте сайт уязвимым, даже если конкретный CVE к нему не относится.
Для самой уязвимости обычно достаточно. Но если сайт уже могли взломать, обновление не уберёт бэкдоры и новых пользователей. Нужно проверить файлы, права доступа и логи, а также сменить пароли и ключи.
Да. Яндекс и Google помечают заражённые сайты предупреждением, могут понизить их в выдаче и показывать пользователям «опасный сайт». Уведомления приходят в Яндекс Вебмастер и Google Search Console.
Минимум раз в несколько недель устанавливайте патч-релизы своей ветки и заранее планируйте переход на поддерживаемую версию до окончания её срока жизни. Критические исправления лучше ставить в течение 24-72 часов после публикации.
Проверим ваш сайт на критические уязвимости PHP до взлома
Найдём устаревшие версии, опасные настройки и скрытый вредоносный код, дадим пошаговый план исправления.
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Более 300 сайтов уже защищены



