Блог

Уязвимость PHP2Shell: что проверить в интернет-магазине до Чёрной пятницы

Новости
Магазины на WooCommerce, OpenCart, Magento и PrestaShop работают на PHP, а в октябре в самом PHP нашли две дыры, через которые сервер можно взломать без пароля. Исправление вышло 21 октября. Помогает оно только там, где его установили и после этого перезапустили сервер, так что узнать, как с этим обстоят дела у вашего сайта, стоит до начала распродаж.

Что случилось

PHP2Shell — это общее название двух уязвимостей в языке PHP, CVE-2026-109618 и CVE-2026-109619. Обе позволяют постороннему человеку запустить свой код на сервере сайта, и логин ему для этого не нужен. По шкале CVSS каждая получила 9,2 балла из 10.
Магазинный движок тут ни при чём. PHP разбирает запрос посетителя раньше, чем до него доходит очередь WooCommerce или OpenCart, поэтому обновлением плагинов эту дыру не закрыть. WooCommerce сообщил разработчикам, что обновлений с его стороны не требуется и не планируется, PrestaShop написал то же самое. Исследователи Sansec выяснили, что уязвимый код сидит в PHP с версии 5.4.0, выпущенной в 2012 году. Четырнадцать лет он спокойно работал на миллионах сайтов.
По данным W3Techs, 2026: PHP стоит примерно на 69,7% сайтов, у которых удаётся определить серверный язык.

Две недели октября

Первым атаку заметил Amazon. 17 октября его сервер-ловушка, который специально держат в интернете как приманку для хакеров, поймал попытку взлома. До публичного объявления оставалось четыре дня, и в Amazon признали, что не знают, откуда у атакующих были сведения.
20 октября подробности утекли в сеть, и команде PHP пришлось ускорить выпуск исправлений. 21 октября вышли версии 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Глава Cloudflare рассказал, что за первые 45 минут после выпуска компания насчитала десятки тысяч попыток атак, а потом счёт пошёл на миллионы.
Поначалу у хакеров почти ничего не выходило. В выходные 24 и 25 октября ловушки Аделя Карими из Perplexity записали успешный взлом сервера с Apache и PHP 8.4.26, последней версией перед исправлением. В понедельник, 26 октября, американское агентство кибербезопасности CISA внесло обе уязвимости в список тех, что уже используют в реальных атаках.
На 27 октября о взломе конкретного интернет-магазина публично никто не сообщал. Пока это значит только одно: о таких случаях не рассказывали.

Что может сделать взломщик

Получив доступ, человек может делать на сервере почти всё, что делает ваш разработчик. Например, дописать на страницу оформления заказа скрипт, который копирует номер карты, пока покупатель его вводит. Или вытащить из памяти пароли и ключи от платёжного шлюза. Или просто уронить сайт. Если оплату принимает банк на своей странице, номера карт к вам не попадают, но ключи API и пароли от базы всё равно хранятся на вашем сервере.
Сроки неудачные. В Румынии eMAG начинает распродажи 6 ноября, Чёрная пятница наступает 27-го. Если магазин ляжет посреди сезона, потерянную выручку уже не догнать, а покупатели, чьи данные утекли, вряд ли придут снова.

Кто ставит обновление

Ответ «хостинг всё сделал» чего-то стоит, только если хостинг назвал версию PHP, дату сборки и день, когда её поставил, и лучше письменно. После обновления сервер нужно перезапустить, иначе он продолжит работать на старой версии.
Хуже всего тем, у кого стоит PHP 8.1 или ещё старше. Для этих версий официального исправления нет вообще, остаются заплатки от дистрибутивов Linux и платных поставщиков поддержки. CISA советует такие серверы до обновления отключать от сети. Владельцам PHP 8.2 тоже стоит заглянуть в календарь: поддержка безопасности для этой версии заканчивается 31 декабря 2026 года.

Что сделать на этой неделе

  1. Выписать всё, что у вас работает на PHP. Кроме самого магазина, это тестовая копия, блог и старые сайты, которые когда-то забыли выключить.
  2. Узнать версию PHP на каждом. Защищены 8.5.12, 8.4.27, 8.3.36, 8.2.35 и всё, что вышло позже.
  3. После обновления перезапустить PHP-FPM или Apache и фоновые задачи.
  4. Выключить параметр session.upload_progress.enabled. 23 октября в PHP нашли ещё одну уязвимость, CVE-2026-115560. Она срабатывает даже на обновлённых версиях, хотя и при довольно редких настройках, и до следующего релиза разработчики PHP советуют держать эту функцию выключенной.
  5. Посмотреть логи с 17 октября: не появились ли новые администраторы, не менялись ли файлы оформления заказа, нет ли на сервере незнакомых PHP-файлов.
  6. Если что-то из этого нашлось, поменять ключи платёжного шлюза и пароли от базы данных.
  7. Сделать тестовый заказ каждым способом оплаты.
Режим обслуживания не поможет. Специалисты scandiweb отдельно предупреждают об этом владельцев Magento: PHP читает запрос раньше, чем магазин успевает показать заглушку. Веб-фильтр вроде Cloudflare на время прикроет, компания включила правила против известных атак на всех тарифах, в том числе бесплатном. CISA при этом прямо пишет, что фильтр обновление не заменяет.
Многие магазины перед распродажами замораживают сайт и ничего не трогают до декабря. Обновления безопасности лучше заранее вывести из-под этого правила. Вечер на тесты сейчас обойдётся дешевле, чем взлом в разгар Чёрной пятницы.

Частые вопросы

Нужно ли обновлять WooCommerce или OpenCart, чтобы закрыть PHP2Shell?

Нет. Дыра находится в самом PHP, и закрывает её только обновление PHP на сервере с перезапуском. Сам движок обновлять всё равно полезно, просто к этой истории он отношения не имеет.

У меня магазин на Shopify. Мне что-то делать?

Серверы Shopify обслуживает сама платформа. Посмотреть стоит на то, что вы держите отдельно: блог на WordPress, лендинги, инструменты для фидов и выгрузок.

Как узнать версию PHP на своём сайте?

На своём сервере команда php -v покажет версию и дату сборки. На сайте с WordPress и WooCommerce версия видна в админке: «Инструменты → Здоровье сайта → Информация → Сервер». Если сайт на хостинге, проще всего спросить поддержку и попросить ответ письменно.

Украли ли через PHP2Shell данные карт?

На 27 октября 2026 года ни одного подтверждённого взлома интернет-магазина публично не описано. Главный риск для магазина связан с ключами платёжного шлюза и подменой скриптов на странице оплаты.

Что делать, если сервер работает на PHP 8.1 или старше?

Официального исправления для этих версий нет. Нужна заплатка от поставщика Linux или хостинга, а параллельно план перехода на версию, которая ещё получает обновления.