В PHP нашли две критические ошибки. Их назвали PHP2Shell. Через них злоумышленник может запустить свой код на вашем сервере. Пароль ему для этого не нужен.
Ошибки исправлены 21 октября 2026 года. Атаки уже идут. Если на вашем сервере есть сайт на PHP, обновите PHP сегодня. Ниже простая инструкция, которая займёт от 10 до 15 минут.
Что случилось
PHP работает как официант в ресторане. Посетитель (браузер) делает заказ. Официант (PHP) несёт его на кухню (сервер) и приносит результат: страницу сайта.
Теперь представьте две ситуации.
Первая ошибка (CVE-2026-109618). Официант несёт слишком тяжёлый поднос и роняет его на полпути. Потом он убирает осколки и по ошибке считает их целой посудой. Так и PHP: когда у него заканчивается память, он оставляет данные недоделанными. Злоумышленник может специально вызвать такую ситуацию и подсунуть свой код.
Вторая ошибка (CVE-2026-109619). Посетитель ушёл, а на столе остались его вещи. Официант их не убрал. Следующий посетитель садится за этот стол и может ими воспользоваться. Так и PHP: после одного запроса в памяти остаются «чужие» данные. Следующий запрос может их прочитать или использовать для атаки.
Обе ошибки получили оценку опасности 9.2 из 10. Это очень высокий уровень.
Кого это касается
Всех, у кого на сервере работает сайт или сервис на PHP. Например:
- WordPress, WooCommerce, Joomla, Drupal, OpenCart;
- 1С-Битрикс, Magento, Laravel;
- phpMyAdmin, Nextcloud, форумы, самописные сайты;
- панели управления вроде ISPmanager, cPanel, aaPanel, HestiaCP.
Уязвимы все версии PHP от 5.4 до 8.5.11. Неважно, как PHP подключён к веб-серверу: через PHP-FPM, Apache (mod_php), LiteSpeed или иначе. Больше всего рискуют сайты на Apache с mod_php.
Если вы не знаете, есть ли у вас PHP, скорее всего есть. На нём работает около 70% сайтов в интернете.
Насколько это опасно
Очень. Вот что уже известно:
- первые попытки атак заметили 17 октября, за четыре дня до выхода исправлений;
- после 21 октября число попыток выросло с десятков тысяч до миллионов за одни сутки;
- к атакам подключился ботнет Mirai. Это сеть заражённых устройств, которая автоматически ищет уязвимые серверы по всему интернету.
Хорошая новость: исследователи пишут, что большинство публичных эксплойтов пока не срабатывает на стандартных настройках. Но это не повод ждать.
Представьте, что вы узнали: в вашем подъезде сломан замок на входной двери. Воры пока не заходили. Вы же не будете ждать, пока они зайдут? Здесь то же самое. Боты уже проверяют каждый сервер в интернете. Вопрос только в том, когда очередь дойдёт до вашего.
Узнайте версию PHP
Подключитесь к серверу по SSH и выполните команду:
php -v
В ответе будет строка вида PHP 8.3.30 (cli). Сравните свою версию с таблицей.
Ваша ветка PHP | Безопасная версия |
|---|---|
8.5 | 8.5.12 и выше |
8.4 | 8.4.27 и выше |
8.3 | 8.3.36 и выше |
8.2 | 8.2.35 и выше |
8.1 и старше | Официального исправления нет, см. раздел ниже |
Важно: на сервере может быть несколько версий PHP. Команда
php -vпоказывает только одну из них. Сайт может работать на другой. Посмотреть все запущенные версии можно так:
systemctl list-units --type=service | grep php
Если номер версии не изменился после обновления, это не всегда плохо. Ubuntu, Debian, AlmaLinux и другие системы часто встраивают исправление в старую версию. Номер остаётся прежним, а дыра уже закрыта. Проверить можно по журналу изменений пакета.
Для Ubuntu и Debian:
zgrep -E 'CVE-2026-10961[89]' /usr/share/doc/php*-common/changelog.Debian.gz
Для AlmaLinux, Rocky Linux и CentOS Stream:
rpm -q --changelog php-common | grep -E 'CVE-2026-10961[89]'
Если команда вывела строки с номерами CVE, исправление установлено. Если ответ пустой, переходите к шагу 2.
Обновите PHP
Перед обновлением сделайте резервную копию сайта и базы данных. Если что-то пойдёт не так, вы сможете быстро всё вернуть.
Ubuntu и Debian
sudo apt update
sudo apt upgrade
После этого перезапустите PHP. Вместо 8.3 подставьте свою версию:
sudo systemctl restart php8.3-fpm
Если сайт работает через Apache, перезапустите и его:
sudo systemctl restart apache2AlmaLinux, Rocky Linux, CentOS Stream
sudo dnf upgrade --refresh 'php*'
sudo systemctl restart php-fpm
sudo systemctl restart httpdПанели управления
- cPanel. Версии PHP (пакеты ea-php) обновляются вместе с системой. Запустите обновление через WHM или командой
sudo yum update. - ISPmanager, aaPanel, HestiaCP и другие. Обновите PHP через раздел с версиями PHP в панели или через системные пакеты, как описано выше.
- Docker. Пересоберите образ на свежей версии PHP и перезапустите контейнер.
Не забудьте перезапуск
Это самая частая ошибка. Новый PHP установлен, но старый продолжает работать в памяти. Это как купить новый замок и оставить его в коробке. Дверь всё ещё закрыта старым. Поэтому после обновления обязательно перезапустите PHP-FPM и веб-сервер.
После перезапуска откройте сайт и проверьте, что он работает.
Добавьте временную защиту
Этот шаг стоит сделать всем, даже после обновления. Он закрывает ещё одну уязвимость, для которой исправления пока нет (о ней ниже).
Сначала найдите файл настроек PHP. Для сайта обычно используется файл из папки fpm:
ls /etc/php/*/fpm/php.ini
На AlmaLinux и Rocky Linux файл обычно лежит здесь: /etc/php.ini.
Откройте файл и добавьте в конец строку:
session.upload_progress.enabled = 0
Если у вас PHP 8.5, добавьте ещё одну:
fatal_error_backtraces = 0
Сохраните файл и перезапустите PHP, как в шаге 2.
Что это изменит для сайта? Почти ничего. Перестанет работать только полоска прогресса при загрузке больших файлов, если она сделана средствами PHP. На большинстве сайтов её нет.
Это не замена обновлению. Временная защита как цепочка на двери. Она мешает вору, но не заменяет нормальный замок. Сначала обновите PHP, потом добавьте настройку.
Если у вас PHP 8.1 или старше
Версии 8.1, 8.0, 7.x и 5.x больше не поддерживаются разработчиками PHP. Официального исправления для них не будет. Таких серверов в интернете очень много: около 70% всех установок PHP.
Это как машина, на которую производитель больше не выпускает запчасти. Ездить можно, но каждая поломка становится проблемой.
Что можно сделать:
- Проверить пакеты вашей системы. Некоторые сборки всё же получили исправление. Например, пакеты Ondřej Surý для Ubuntu и Debian (ppa:ondrej/php) и пакеты AlmaLinux. Обновитесь, как в шаге 2, и проверьте журнал изменений из шага 1.
- Перейти на новую версию PHP. Это лучший вариант на будущее. Но старый сайт может не заработать на новом PHP. Перед переходом его нужно проверить.
- Купить расширенную поддержку. Например, TuxCare выпускает исправления для старых версий PHP за отдельную плату.
В любом случае обязательно сделайте шаг 3 с временной защитой.
Если у вас сервер на CentOS 7, исправлений для PHP там не будет совсем. Эта система тоже устарела. Лучше перенести сайт на AlmaLinux или Rocky Linux.
Ещё две новости, о которых мало пишут
Третья уязвимость пока без исправления. 23 октября разработчики PHP сообщили о ещё одной ошибке: CVE-2026-115560. Она срабатывает только при редкой настройке сайта. Срочного обновления под неё не будет, исправление выйдет в следующей плановой версии. Защита та же, что в шаге 3. Если вы уже добавили строку session.upload_progress.enabled = 0, вы защищены.
В новых версиях нашли свои ошибки. В версиях 8.4.27 и 8.5.12 обнаружили две проблемы с памятью. Одна из них появилась именно в этом обновлении. Это не повод откатываться на старую версию: старая намного опаснее. Просто следите за новостями. Следующее обновление PHP, скорее всего, выйдет в ближайшие недели, и его тоже нужно будет установить.
Получается, что одного обновления мало. За безопасностью сервера нужно следить постоянно.
Чек-лист
- Узнал версию PHP командой
php -v - Проверил, нет ли на сервере других версий PHP
- Сделал резервную копию сайта и базы
- Обновил PHP до безопасной версии
- Перезапустил PHP-FPM и веб-сервер
- Добавил
session.upload_progress.enabled = 0в php.ini - Проверил, что сайт открывается и работает
- Поставил себе напоминание проверить следующее обновление PHP
Не хотите разбираться сами?
Обновить PHP несложно, если вы делали это раньше. Но бывает по-другому. Вы обновили PHP, а сайт выдаёт белый экран. Или в панели три версии PHP, и непонятно, какую трогать. Или сайт старый, и страшно его сломать.
Для таких случаев у Zomro есть два варианта.
SOD: сделаем всё за вас
Вы пишете нам, а наш системный администратор сам:
- проверит, какие версии PHP стоят на сервере и какую использует сайт;
- обновит PHP и перезапустит службы;
- добавит временную защиту;
- проверит, что сайт работает после обновления.
Стоимость: €12.50 за каждые 15 минут работы. Обычное обновление PHP занимает немного времени.
Заказать обновление PHP
Premium: быстрая помощь, когда она нужна
Обычный технический запрос может занять до 10 часов. Если сайт перестал работать после обновления, такое ожидание может обойтись слишком дорого. С Premium вы получите ответ специалиста за 5-30 минут.
Premium - для тех, кто не готов терять деньги из-за простоя сайта. Новые уязвимости, ошибки после обновлений и другие технические проблемы требуют быстрой реакции. С Premium вы можете рассчитывать на оперативную помощь специалистов, чтобы быстрее восстановить работу сайта и не тратить время на поиск решения самостоятельно.


