Технический блог

php2shell (CVE-2026-109618 / 109619) не определить через php -v: где номера версий расходятся в FPM, Docker и дистрибутивах

Опубликовано: 2026-10-22 · Автор: GRAMSHIFT

Версии CLI и FPM, теги Docker, бэкпорты дистрибутивов и что проверить на виртуальном хостинге

php2shell (CVE-2026-109618 / 109619) не определить через php -v: где номера версий расходятся в FPM, Docker и дистрибутивах

Эта страница переведена ИИ с японского оригинала. При расхождениях приоритет имеет японская версия: 日本語

Если PHP, который обрабатывает веб-запросы (PHP-FPM, mod_php в Apache, php-cgi, FrankenPHP, LiteSpeed), старше 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12, он подвержен уязвимостям CVE-2026-109618 и CVE-2026-109619, известным как php2shell. Исправление — обновиться до одной из этих версий (а для пакетов дистрибутива — до исправленного пакета) и перезапустить процессы. Проверять нужно не локальный php -v, а «PHP, который реально обслуживает веб» и «версию установленного пакета».

В статье разобраны четыре места, где суждение только по номеру версии приводит к неверному выводу. Все цифры и статусы приведены по состоянию на 2026-10-22, источники по каждому пункту перечислены в конце.

Что известно на 2026-10-22

ПараметрСведения
CVECVE-2026-109618 (GHSA-w8hw-w9fx-j79w) / CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp)
КритичностьОбе уязвимости оценены в бюллетене PHP как CVSS v4.0 9.2 (Critical)
Исправленные версии8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (выпущены 2026-10-21)
Затронутые версииВерсии до указанных выше исправленных (по данным бюллетеней GitHub)
Область действияЛюбой PHP, обрабатывающий веб-запросы. В бюллетене названы PHP-FPM, mod_php, php-cgi, FrankenPHP и LiteSpeed, причём риск для mod_php описан как наивысший. В бюллетенях GitHub эксплуатация продемонстрирована для mod_php, а FPM и FrankenPHP отмечены как «не продемонстрировано» или «при условии». «Не продемонстрировано» не значит «безопасно», поэтому обновляйтесь до исправленной версии при любом способе запуска PHP
8.1 и старшеОбновлений от проекта PHP нет. Для 7.4 / 8.0 / 8.1 опубликованы минимальные бэкпорты в исходниках, а некоторые дистрибутивы и LTS-вендоры могут выпускать исправления
8.2Окончание поддержки 2026-12-31 (согласно примечаниям к выпуску 8.2.35)

В бюллетене PHP сказано, что «единственное полное исправление — обновление». Меры смягчения на период до обновления описаны ниже.

Ловушка 1: php -v и веб-PHP могут быть разными

php -v, набранный по SSH, показывает версию PHP для CLI. Веб-запросы обрабатывают процессы PHP-FPM или mod_php, загруженный в Apache, — это отдельные бинарные файлы и отдельные пакеты. Если новый PHP установлен только для CLI, если рядом стоит несколько версий или пул FPM указывает на другую версию, веб-сторона может остаться старой, даже когда php -v показывает исправленную версию.

Увидеть реальную версию на веб-стороне можно несколькими способами.

# FPM в Debian / Ubuntu (имя зависит от версии)
php-fpm8.3 -v

# FPM в семействе RHEL
php-fpm -v

# Проверить, загружен ли mod_php в Apache
apachectl -M | grep -i php

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

<?php echo PHP_VERSION, ' ', PHP_SAPI;

Если PHP_SAPI равен fpm-fcgi, PHP работает под FPM; apache2handler означает mod_php; cgi-fcgi — CGI. Не оставляйте phpinfo() открытым: это само по себе раскрывает информацию.

Перезапуск — ещё один легко упускаемый шаг. Даже после замены пакета уже запущенные процессы php-fpm или Apache могут продолжать работать на старом коде. В одних конфигурациях перезапуск при обновлении пакета происходит автоматически, в других — нет. После обновления перезапустите FPM / Apache и ещё раз проверьте версию на веб-стороне описанными выше способами.

Ловушка 2: в Docker по названию тега судить нельзя

У официального образа php есть «плавающие теги», например 8.3 и 8.3-fpm, содержимое которых заменяется, и закреплённые теги, например 8.3.30, фиксирующие версию.

  • Даже если плавающий тег на Docker Hub переключён на исправленную версию, ваша локальная копия остаётся старым образом, пока вы не сделаете pull заново. Запущенные контейнеры тоже продолжают работать на старом образе, пока их не пересоздадут. Dockerfile с FROM php:8.3-fpm по-прежнему соберётся на старой базе, если она осталась в кеше сборки.
  • Закреплённый тег остаётся старым навсегда, пока вы сами не поменяете номер.

Опубликованы ли теги с исправленными версиями, можно проверить через API Docker Hub.

curl -s "https://hub.docker.com/v2/repositories/library/php/tags?name=8.3.36&page_size=100"

Результаты запроса по четырём линейкам релизов на 2026-10-22 (время в UTC).

Исправленная версияНайдено теговКогда появились теги на основе Debian (-fpm, -apache и др.)Теги на основе Alpine
8.5.1254 (включая RC1)2026-10-21 18:59–22:132026-10-21 22:12–10-22 01:05
8.4.2754 (включая RC1)2026-10-21 22:09–22:112026-10-21 22:09–10-22 03:58
8.3.36272026-10-21 22:04–22:062026-10-21 22:04–10-22 03:56
8.2.35272026-10-21 21:59–22:012026-10-21 22:00–10-22 00:58

Эта проверка выявила три места, где суждение по номерам может ввести в заблуждение.

  1. «Недавно обновлён» не значит «исправлен». Закреплённый тег 8.3.35 был пересобран в течение 2026-10-21, но PHP_VERSION внутри по-прежнему был 8.3.35. Смотрите на версию внутри образа, а не на время обновления.
  2. Разные digest могут скрывать одинаковое содержимое. У 8.3 и 8.3.36 были разные digest тегов (значение мультиархитектурного индекса), но образ для amd64 был идентичным, и в обоих было PHP_VERSION=8.3.36. Так же для 8.3-fpm / 8.3.36-fpm, 8.4-apache / 8.4.27-apache, latest / 8.5.12, 8.5-fpm и 8.2-fpm значение PHP_VERSION в образе amd64 было исправленным.
  3. Исправленных официальных образов для 8.1 и старше нет. Последнее обновление 8.1-fpm — 2025-12-31.

Проверка локальных образов и запущенных контейнеров:

# Версия PHP в локально загруженном образе
docker image inspect php:8.3-fpm --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PHP_VERSION

# Загрузить заново и пересоздать контейнеры
docker compose pull
docker compose up -d

# Если вы собираете свой образ, обновите базовый образ и затем выполните сборку
docker compose build --pull

# Версия внутри запущенного контейнера
docker compose exec app php -r 'echo PHP_VERSION, PHP_EOL;'

Замените app в последней команде на имя своего сервиса. Каждый официальный образ собирается с единственным PHP_VERSION, поэтому версия CLI внутри контейнера совпадает с версией FPM / Apache в этом контейнере (ловушка 1 относится к случаю, когда PHP установлен прямо на хосте).

FrankenPHP встраивает PHP, поэтому версия FrankenPHP и версия встроенного PHP — это разные номера. В примечаниях к выпуску FrankenPHP 1.13.2 от 2026-10-21 сказано, что образы Docker собраны с PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12, а статические бинарные файлы — с PHP 8.5.12.

Ловушка 3: пакеты дистрибутивов «исправлены под старыми номерами»

Ubuntu и RHEL переносят в старые версии только исправления (бэкпорты). Номер, который показывает php -v, остаётся старым, поэтому числовая проверка вроде «меньше 8.3.36, значит уязвим» пометит уже исправленную систему как уязвимую. И наоборот, успокаиваться по номеру тоже нельзя. Выводы делайте по версии пакета и трекеру безопасности своего дистрибутива.

Исправленные пакеты, указанные в трекерах по состоянию на 2026-10-22 (одинаково для обоих CVE):

ДистрибутивПакетИсправленная версияИсточник
Ubuntu 22.04 (jammy)php8.18.1.2-1ubuntu2.28USN-8948-1
Ubuntu 24.04 (noble)php8.38.3.6-0ubuntu0.24.04.13USN-8948-1
Ubuntu 26.04 (resolute)php8.58.5.4-0ubuntu1.5USN-8948-1
Ubuntu (stonking)php8.58.5.9-0ubuntu2.1USN-8948-1
Ubuntu 14.04 / 16.04 / 18.04 / 20.04php5 / php7.0 / php7.2 / php7.4Доступно через Ubuntu Pro (включая Legacy Support)USN-8948-2
Debian 12 (bookworm)php8.28.2.35-1~deb12u1DLA-4848-1
Debian 13 (trixie)php8.48.4.27-1~deb13u1DSA-6574-1
RHEL 10php / php8.48.3.36-1.el10_2 / 8.4.27-1.el10_2Red Hat
RHEL 9php (по умолчанию)8.0.30-8.el9_8.1Red Hat
RHEL 9модуль php 8.2 / 8.38.2.35-1.module+el9.8.0… / 8.3.36-1.module+el9.8.0…Red Hat
RHEL 8модуль php 7.4 / 8.27.4.33-8.module+el8.10.0… / 8.2.35-1.module+el8.10.0…Red Hat

Эта таблица прямо показывает, почему одних номеров недостаточно. Исправленный PHP в Ubuntu 24.04 — это версия, начинающаяся с 8.3.6, намного ниже апстримной 8.3.36. PHP по умолчанию в RHEL 9 исправлен, оставаясь на 8.0.30, хотя апстрим больше не выпускает исправления для 8.0. Debian перешёл на те же номера, что и апстрим (8.2.35 / 8.4.27).

Некоторые пакеты ещё не исправлены (по состоянию на 2026-10-22).

  • Модуль php 8.4 в RHEL 9 помечен как «затронут, исправления нет».
  • В Debian forky (testing) php8.4 8.4.26-1 помечен как «vulnerable». php8.4 в sid (unstable) — 8.4.27-1, он исправлен.

Примеры команд для проверки собственного сервера:

# Debian / Ubuntu: установленная и доступная версии
apt-cache policy php8.3-fpm libapache2-mod-php8.3

# Ubuntu: исправлена ли эта CVE на данном сервере
pro fix CVE-2026-109618
pro fix CVE-2026-109619

# Семейство RHEL: есть ли обновление, исправляющее эту CVE, и установленная версия
dnf updateinfo list --cve CVE-2026-109618
rpm -q php-fpm php-cli

Подставьте имя пакета (php8.3-fpm и т. д.) под свою среду. Сравните показанную версию с «исправленной версией» в таблице выше или в трекере; если она такая же или выше, исправление установлено. Затем выполните перезапуск и проверку веб-стороны, описанные в ловушке 1.

Если вы устанавливаете PHP не из пакетов самого дистрибутива, а из стороннего репозитория, нужно следить за обновлениями этого репозитория. В бюллетене PHP отмечено, что в репозитории rpms.remirepo.net, который ведут волонтёры, обновлений в день раскрытия информации не будет, и рекомендуется перейти на пакеты дистрибутива или собственные сборки.

Ловушка 4: на виртуальном хостинге и в управляемых средах PHP самому не обновить

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

Самостоятельно можно сделать три вещи.

  1. Проверьте версию на веб-стороне. С помощью временного файла из ловушки 1 выведите PHP_VERSION и PHP_SAPI, затем сразу удалите его. Если в панели управления есть выбор версии PHP, отметьте и выбранную там версию.
  2. Прочитайте уведомление провайдера, а если его нет — спросите. Вопрос: «Для каких версий PHP на моём тарифе и когда будут применены (или уже применены) исправления CVE-2026-109618 и CVE-2026-109619?» Если спрашивать по номеру CVE, а не по номеру версии, ответ учтёт и бэкпорты.
  3. Если выбрана версия без поддержки, обновитесь. Проект PHP не выпускает исправлений для 8.1 и старше, а поддержка 8.2 заканчивается 2026-12-31. Если провайдер не сделал бэкпорты исправлений, надёжный путь — сменить версию.

Статус по хостинг-провайдерам (на 2026-10-22)

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

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

Провайдер / сервисОсновное в официальном уведомленииДата и время уведомленияИсточник
エックスサーバー«Для PHP 8.2–8.5 применение исправляющего патча на всех затронутых серверах завершено». Для более старых версий в уведомлении сказано: «исправляющие патчи готовы для некоторых версий и будут применяться последовательно по мере завершения проверки», и что работа ведётся и по другим старым версиямПо состоянию на 10/22 6:45 (страница обновлялась до 13:15)メンテナンスの進捗状況
シン・レンタルサーバーНа странице объявлений приведён тот же «ход технических работ», что и у Xserver, но заявления, прямо касающегося статуса PHP в Shin Rental Server, я не нашёл (уточните в поддержке)-お知らせ
ConoHa WING«Мы применяем патчи безопасности, сохраняя используемую вами сейчас версию PHP». В уведомлении сказано, что менять версию пользователям, как правило, не нужно, но для PHP 5.x и 7.x изменение может потребоваться. Файловый менеджер и веб-почта временно отключены в качестве меры предосторожности; отображение сайтов и отправка и получение почты работают в штатном режиме10/22【重要】PHPの脆弱性への弊社対応について
さくらのレンタルサーバ«Мы завершили устранение уязвимости для всех версий PHP, доступных для выбора в нашей панели управления». Сказано, что «срочных действий от клиентов не требуется», и рекомендуется в дальнейшем перейти на последнюю поддерживаемую версию. В уведомлении указано, что веб-почта исправлена 10/22 в 13:45, а работа над phpMyAdmin ещё идёт10/22 (обновлено в 13:45)PHPの脆弱性(CVE-2026-109618、CVE-2026-109619)への対応状況について
ロリポップ!Уведомление о профилактических работах перед выходом исправленных версий (сайт сервиса, страницы пользователей и т. д. будут поочерёдно отключаться; сайты могут быть отключены или ограничены без предварительного уведомления). На 10/22 я не нашёл уведомления о завершении исправления PHP (уточните в поддержке)10/21【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
ヘテムル«Для PHP 8.x и PHP 7.4 мы применили официальные исправленные версии»; для остальных версий — «мы внесли собственные исправления на основе официального». Поскольку «часть функциональности (session.upload_progress) отключена во всех версиях», пользователей просят проверить работу своих сайтов. Так как для старых версий дальнейших исправлений может не быть, в уведомлении рекомендуется перейти на более новую версиюОпубликовано 10/21 19:44; обновлено 10/22 12:18 и 13:20【一部完了】【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
mixhost«Применение пакетов с исправлением PHP было завершено примерно в 10:18 22 октября 2026 года». «Применено без изменения номера версии PHP»; «от клиентов не требуется никаких действий». Пользователям версий ниже PHP 8.2 в уведомлении рекомендуется использовать поддерживаемую версию (8.2 или новее)10/22【完了】PHPの重大な脆弱性への対応について
KAGOYAДля сервиса аренды серверов PHP 8.2–8.5 будут обновляться последовательно после проверки исправленных версий (целевые версии ещё уточняются). Для управляемых выделенных, общих и специализированных WordPress-серверов постоянное исправление ещё планируется; в качестве временных мер в уведомлении предлагается рассмотреть отключение сайтов или ограничение доступаОпубликовано 10/21 18:20; обновлено 10/22 10:35PHPの脆弱性に関する当社サービスへの影響について
Zenlogic(IDCフロンティア)Исправления применяются во время экстренных работ (10/21 22:00–10/22 18:00; время окончания может измениться). PHP 5.3 будет обновлён до последней версии, и вернуть его нельзя; 7.4 и 8.1 могут быть обновлены. В уведомлении сказано, что если после обновления возникнут проблемы с отображением или работой, исправлять придётся приложение10/21【ホスティング】緊急メンテナンス作業のお知らせ
ColorfulBox«Мы завершили на стороне сервера обновление до исправленных версий, сохранив используемую вами сейчас версию PHP». В уведомлении сказано, что «клиентам не нужно самим менять или переключать версии PHP»10/22【重要】PHPの脆弱性に対するセキュリティアップデート完了のお知らせ
お名前.com レンタルサーバー«Мы применяем патчи безопасности, сохраняя используемую вами сейчас версию PHP». В уведомлении сказано, что смена версии, как правило, не нужна, но для PHP 5.x и 7.x может потребоваться. Файловый менеджер и веб-почта временно отключены в качестве меры предосторожности10/22【重要】PHPの脆弱性への弊社対応について
CORESERVER(V2)«Мы завершили устранение уязвимости для всех предоставляемых нами версий PHP»; «со стороны клиента не требуется никаких действий, например смены версии PHP». Техработы шли 10/22 0:00–11:13, указано, что они завершеныОпубликовано 10/21 (завершено 10/22)PHP脆弱性の対応(CORESERVER V2)【完了】
XREA«Мы завершили устранение уязвимости для PHP 7.4 и новее (7.4 / 8.0 / 8.1 / 8.2 / 8.3 / 8.4 / 8.5)». Пользователям этих версий менять версию не нужно. О версиях ниже 7.4 в уведомлении ничего не сказаноОпубликовано 10/21 (завершено 10/22 0:50)PHP脆弱性の対応(XREA)【完了】
バリューサーバー«Мы завершили устранение уязвимости для PHP 7.4 и новее». В уведомлении сказано, что пользователям этих версий менять версию не нужноОпубликовано 10/21 (завершено 10/22 0:50)PHP脆弱性の対応(VALUESERVER)【完了】
ABLENET«В отношении двух выявленных в PHP уязвимостей мы выполнили первичные обновления безопасности для нашей среды арендуемых серверов». В уведомлении не указано, какие версии охвачены и нужно ли пользователям что-либо делать10/22 13:04PHPの脆弱性に関するセキュリティアップデートの対応について
WebARENA(レンタルサーバー)На 10/22 официального уведомления я не нашёл (уточните в поддержке)-WebARENA お知らせ(2026年)

Там, где я не смог найти или открыть официальное уведомление, в таблице написано «не удалось подтвердить» или «не нашёл». Отсутствие информации там не означает, что провайдер не отреагировал. Уточняйте напрямую в объявлениях и поддержке своего провайдера.

Меры смягчения, пока нельзя сразу обновиться

В бюллетене PHP перечислены настройки, уменьшающие поверхность атаки до обновления. Однако сам бюллетень прямо указывает, что они «не делают вас защищёнными». Основные из них:

  • Для CVE-2026-109619: задайте session.upload_progress.enabled=0 в php.ini, в пуле FPM или в конфигурации сервера и перезапустите все рабочие процессы (ini_set() и .user.ini в FPM для этого не работают). В PHP 8.5 также задайте fatal_error_backtraces=0.
  • Для CVE-2026-109618: задайте memory_limit=-1 так, чтобы приложение не могло это переопределить, и уменьшите post_max_size (8M, если загрузок нет, и 32M, если есть). Не используйте RLIMIT_AS / RLIMIT_DATA вместо этого.

Британский NCSC рекомендует рассмотреть отключение от сети любой системы, которую нельзя сразу обновить или защитить мерами смягчения, и проверить наличие признаков компрометации до обновления или применения мер.

Источники (проверено 2026-10-22)

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

Если php -v показывает исправленную версию, защищён ли я от php2shell (CVE-2026-109618 / 109619)?

Не обязательно. php -v показывает только версию PHP для CLI. PHP-FPM или mod_php в Apache, которые обрабатывают веб-запросы, могут быть отдельным бинарным файлом и отдельным пакетом. Версию FPM можно посмотреть командой php-fpm8.3 -v (в семействе RHEL — php-fpm -v). Другой способ — открыть через веб временный файл, который выводит PHP_VERSION и PHP_SAPI, и удалить его сразу после проверки. Если после обновления вы не перезапускали FPM или Apache, они могут продолжать работать на старом коде.

Если я использую php:8.3-fpm из Docker, исправлена ли уязвимость php2shell?

По состоянию на 2026-10-22 тег php:8.3-fpm на Docker Hub переключён на PHP 8.3.36. Однако ваш локальный образ остаётся старым, пока вы не выполните pull заново, а запущенные контейнеры продолжают работать на старом образе, пока их не пересоздадут. Выполните docker compose pull и docker compose up -d (или docker compose build --pull, если вы собираете свой образ). Затем выполните внутри контейнера php -r 'echo PHP_VERSION;' и убедитесь, что версия 8.3.36 или выше. Закреплённые теги, например 8.3.30, остаются старыми, пока вы сами не поменяете номер.

В Ubuntu и RHEL по-прежнему PHP 8.3.6 или 8.0.30. Затронуты ли они php2shell?

По одному номеру версии этого не определить. Ubuntu и RHEL переносят исправления в старые версии (бэкпорты), поэтому пакет может быть исправлен, а его номер остаётся старым. По состоянию на 2026-10-22 исправление есть в php8.3 8.3.6-0ubuntu0.24.04.13 в Ubuntu 24.04 и в php 8.0.30-8.el9_8.1 в RHEL 9. Сравните версию установленного пакета (apt-cache policy или rpm -q) с исправленной версией в трекере безопасности вашего дистрибутива. Можно также проверить командой pro fix CVE-2026-109618 в Ubuntu или dnf updateinfo list --cve CVE-2026-109618 в семействе RHEL.