Уязвимость PHP: патч PHP2Shell и проверка версии PHP (WordPress)

Уведомление о партнёрских ссылках v3.1
Уведомление о партнёрских ссылках v3.2 (мобильная версия)
Тестовая среда Семейство RHELAlmaLinux 9.8PHP 8.3 · WordPress 7.1.3Проверено 2026-10-22

PHP2Shell — так называют две уязвимости PHP (CVE-2026-109618 · CVE-2026-109619), патчи для которых вышли 21 октября 2026 года. Это уязвимости удалённого выполнения кода: даже запрос без входа в систему может запустить код на сервере, поэтому первым делом стоит проверить, какую версию PHP использует ваш сайт, и обновить её до версии с патчем. Ниже — проверка версии PHP через «Здоровье сайта» на сервере Nginx + Apache с WordPress 7.1.3, обновление только пакетов php до версии с патчем и повторная проверка.

1️⃣ Уязвимость PHP PHP2Shell: как устроены уязвимости и кого они затрагивают

Уязвимости находятся внутри движка PHP, который читает запрос ещё до выполнения кода WordPress, поэтому даже при актуальных плагинах и темах они никуда не денутся, пока PHP не обновлён. По данным предупреждения CERT-EU, обе уязвимости получили 9,2 балла по CVSS; технические подробности опубликованы и обсуждаются, а ранний код proof of concept уже начал распространяться.

CVE-2026-109618 — уязвимость, при которой, если запрос превышает лимит памяти (memory_limit) и прерывается, процесс очистки принимает данные запроса, инициализированные лишь наполовину, за корректные. CVE-2026-109619 — уязвимость, при которой состояние памяти, освобождённой после фатальной ошибки, сохраняется и повторно используется до инициализации следующим запросом, который обрабатывает тот же воркер.

Согласно объявлению php.net, затронуты все установки PHP, обрабатывающие веб-запросы, а самой опасной конфигурацией названа Apache mod_php. Дело в том, что на mod_php была показана атака, которую один запрос без входа в систему запускает ещё до выполнения кода приложения.

Способ запуска PHPВлияниеПримечание
Apache mod_php🔴 Уязвим · наибольший рискДемонстрация: один запрос без входа в систему запустил атаку до выполнения кода приложения
PHP-FPM🔴 Уязвим—
php-cgi🔴 Уязвим—
FrankenPHP🔴 Уязвим—
LiteSpeed🔴 Уязвим—

Исправленные версии — 8.2.35, 8.3.36, 8.4.27 и 8.5.12, а все более ранние версии веток 8.2–8.5 уязвимы. PHP 8.1 и более ранние версии — ветки, которые проект PHP больше не поддерживает, поэтому официальных версий с патчем для них нет; их защищают исправления, перенесённые дистрибутивами и хостинг-провайдерами (бэкпорты).

На момент публикации сообщения CISA 21 октября реальных случаев эксплуатации подтверждено не было, но CISA сочла опасным оставлять системы без патча и рекомендовала обновить их немедленно, начиная с систем, доступных из интернета. CERT-EU в предупреждении того же дня пришёл к выводу, что с появлением кода proof of concept выросла вероятность того, что злоумышленники уже используют эти уязвимости.

2️⃣ Проверка версии PHP: Здоровье сайта › Информация › Сервер

Даже зная об уязвимостях, нельзя решить, что делать, пока неизвестно, на какой версии PHP работает ваш сайт. В панели администратора откройте [Инструменты › Здоровье сайта] и разверните раздел [Сервер] на вкладке [Информация]: в строке [Версия PHP] указана версия PHP, которая на самом деле обрабатывает запросы сайта.

Экран «Здоровье сайта», вкладка «Информация»: меню слева Инструменты › Здоровье сайта и строки «Серверная архитектура», «ПО веб-сервера», «Версия PHP» и «PHP SAPI» в разделе «Сервер» — версия PHP служит ориентиром при проверке патча от уязвимости PHP PHP2Shell (WordPress 7.1.3)

Строка [PHP SAPI] сразу под [Версия PHP] показывает способ запуска PHP; fpm-fcgi означает конфигурацию PHP-FPM. Здесь достаточно двух строк раздела [Сервер] — [Версия PHP] и [PHP SAPI].

🧩 Ход атаки PHP2Shell
Поясняющая схема
①Запрос без входа в системуВеб-запрос, который может отправить кто угодно
②Специально подготовленный запросPHP читает его раньше кода WordPress
③Уязвимости PHPНехватка памяти → недостроенные данные используются как естьCVE-2026-109618Следующий запрос использует состояние завершённогоCVE-2026-109619
④Выполнение кода на сервереЗахват сайта
✅ В исправленных версиях этот путь закрыт8.2.35 · 8.3.36 · 8.4.27 · 8.5.12

Атака начинается с запроса без входа в систему. На этапе, когда PHP читает специально подготовленный запрос раньше кода WordPress, запрос задевает одну из двух уязвимостей, и дело доходит до выполнения кода на сервере. Исправленные версии перекрывают этот путь, поэтому задача — поднять PHP сайта до исправленной версии или новее.

[php -v] в терминале показывает только версию PHP командной строки по умолчанию. В конфигурациях, где на одном сервере установлено несколько версий PHP, например EA-PHP в cPanel или alt-php в CloudLinux, она может отличаться от версии, которую использует сайт. Поэтому ориентиром служит значение [Версия PHP] в «Здоровье сайта».

php -v
PHP 8.3.xx (cli) (built: Jun  3 2025 17:17:57) (NTS gcc x86_64)

3️⃣ Ниже PHP 8.2: уточните у хостинга, применён ли бэкпорт, и попросите его, если нет

Если [Версия PHP] в «Здоровье сайта» ниже 8.2 (7.x · 8.0 · 8.1), официальной версии с патчем от php.net нет. Согласно таблице поддерживаемых версий на php.net (проверено 22 октября 2026 года), поддерживаются только четыре ветки — 8.2, 8.3, 8.4 и 8.5, а для официальных версий 8.1 и ниже патчи безопасности не выходят.

Вместо этого дистрибутивы и хостинг-провайдеры иногда выпускают пакеты, которые сохраняют номер версии и переносят только исправление (бэкпорты). Пример — пакеты 7.4.33 · 8.0.30 · 8.1.34 на тестовом сервере одного управляемого хостинга. В их журнале изменений была строка [Backported from 8.2.35 — CVE-2026-109618, CVE-2026-109619].

Даже при том же номере версии наличие исправления проверяют поиском номера CVE в журнале изменений пакета. В семействе Debian · Ubuntu ищут командой вида [zcat /usr/share/doc/php8.2-cli/changelog.Debian.gz | grep 109618]. В семействе RPM — [rpm -q --changelog php-common | grep 109618]; номер версии в имени пакета подставляют под версию, которую использует сайт.

Поэтому при версии ниже 8.2 сначала уточните у хостинг-провайдера, применён ли бэкпорт, а если нет или подтвердить это не удаётся, попросите перевести сайт на поддерживаемую версию (8.2 или выше). После обновления снова проверьте значение [Версия PHP] в «Здоровье сайта».

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

Если вы сами администрируете сервер и используете 8.1 или более раннюю версию, можно установить пакеты с бэкпортом из дистрибутива или применить патчи исходного кода для 7.4 · 8.0 · 8.1 от команды безопасности PHP. Но это ветки без поддержки, поэтому настоящее решение — переход на поддерживаемую версию.

4️⃣ PHP 8.2 и выше: обновите до версии с патчем и проверьте снова

Если у вас 8.2 или выше, но ниже версии с патчем, обновите сам PHP. На управляемом и виртуальном хостинге патч на весь сервер ставит провайдер, поэтому уточните по его объявлениям или через поддержку, применён ли патч и какая сборка установлена, а затем посмотрите, изменилась ли [Версия PHP] в «Здоровье сайта». Согласно объявлению на странице статуса, Cloudways начала устанавливать патч на все поддерживаемые версии PHP (5.6–8.4) 21 октября в 22:19 UTC. 22 октября в 10:11 UTC Cloudways сообщила о завершении работ.

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

dnf upgrade --assumeno 'php*'
Dependencies resolved.
================================================================================
 Package       Architecture  Version         Repository  Size
================================================================================
Upgrading:
 php           x86_64  8.3.xx-1.…        …       1.9 M
 php-cli       x86_64  8.3.xx-1.…        …       5.6 M
 php-common    x86_64  8.3.xx-1.…        …       1.3 M
 php-fpm       x86_64  8.3.xx-1.…        …       1.9 M
 (строки пакетов расширений, таких как php-gd · php-intl, опущены)

Transaction Summary
================================================================================
Upgrade  xx Packages
dnf upgrade 'php*'
Upgraded:
  php-8.3.xx-1.….x86_64
  php-cli-8.3.xx-1.….x86_64
  php-common-8.3.xx-1.….x86_64
  php-fpm-8.3.xx-1.….x86_64
  (строки пакетов расширений опущены)

Complete!

В этом тесте до версии с патчем обновились только пакеты, начинающиеся с php, а php-fpm сам перезапустился по завершении установки пакетов. Исправленная версия начинает действовать только после перезапуска воркеров php-fpm, поэтому в средах без автоматического перезапуска выполните [systemctl restart php-fpm] сами.

После обновления проверьте, что и [php -v], и строка [Версия PHP] на вкладке [Информация] в «Здоровье сайта» показывают версию с патчем или новее, а также проверьте состояние службы php-fpm и ответ сайта. Если изменилось только значение в командной строке, а [Версия PHP] осталась прежней, перезапустите php-fpm и проверьте ещё раз.

Экран «Здоровье сайта», вкладка «Информация»: после обновления повторная проверка, что строка «Версия PHP» в разделе «Сервер» показывает версию с патчем или новее — меню слева Инструменты › Здоровье сайта и строки «Версия PHP» и «PHP SAPI» в разделе «Сервер» (WordPress 7.1.3)

И после обновления разверните раздел [Сервер] на вкладке [Информация] того же экрана [Инструменты › Здоровье сайта] и посмотрите на строку [Версия PHP]. Если значение сменилось на установленную версию, значит, и воркеры php-fpm уже работают на новой версии.

php -v
PHP 8.3.xx (cli) (built: Oct 19 2026 14:00:34) (NTS gcc x86_64)
systemctl is-active php-fpm
active
curl -s -o /dev/null -w '%{http_code}\n' 'https://example.com/?r=1'
200

У пакетов, где растёт сам номер версии, патч подтверждают по новому номеру версии, а у пакетов с бэкпортом, сохраняющих номер, — по номеру CVE в журнале изменений. Этот сервер относился к первому случаю: в [rpm -q --changelog php-common] строки с номером CVE не было, и патч был подтверждён по новому номеру версии в первой строке журнала изменений.

5️⃣ Если обновить сразу нельзя: временные меры от php.net

Для серверов, которые нельзя обновить сразу, php.net приводит настройки ниже как временные меры, но уточняет, что они лишь сужают отдельные пути атаки и не делают установку безопасной. Там же сказано не ограничивать память вместо этого через RLIMIT_AS или RLIMIT_DATA: это может как раз вызвать уязвимые сбои выделения памяти.

НастройкиЗначениеГдеЧто закрывает
memory_limit-1php_admin_value в пуле FPM или конфигурации Apache (чтобы приложение не могло вернуть значение)CVE-2026-109618 · путь сбоя при лимите памяти (не полностью)
post_max_size8M (32M, если нужны загрузки) · upload_max_filesize — меньше этого значенияphp.ini · настройки пулаCVE-2026-109618
session.upload_progress.enabled0 + перезапуск всех воркеровphp.ini · пул FPM · настройки сервера (не через ini_set() или .user.ini)CVE-2026-109619 · только подтверждённый путь через сессии
fatal_error_backtraces0 + перезапуск всех воркеров (только PHP 8.5)То же, что вышеCVE-2026-109619 · только подтверждённый путь через трассировку стека

php_admin_value — это серверная настройка, которую приложение не может вернуть, поэтому пользователи виртуального хостинга часто не могут изменить её сами, и в этом случае тоже приходится обращаться к хостинг-провайдеру. php.net также советует задать ограничения — и на уровне веб-сервера или прокси — для размера тела запроса, числа полей ввода, числа частей multipart, числа заголовков и глубины вложенности.

🔢 FAQ & рекомендуемые материалы

Автоматические обновления WordPress затрагивают только ядро, плагины, темы и переводы; PHP — это программа, установленная на сервере, поэтому её обновляет администратор сервера или хостинг-провайдер. Автоматические обновления ядра, плагинов и тем включаются на экране Обновления WordPress и на экранах «Плагины» и «Темы» соответственно, и ни на одном из этих экранов версия PHP не показывается.

Полные технические подробности — в двух бюллетенях безопасности GitHub, на которые объявление php.net ссылается рядом с номерами CVE. CVE-2026-109618 — это GHSA-w8hw-w9fx-j79w, а CVE-2026-109619 — GHSA-6wmf-4rv5-p3rp. Предупреждение CERT-EU тоже приводит эти два бюллетеня в качестве источников, а подробности воспроизведения атаки в эту статью не вошли.

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

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 7   +   8   =