MIC

Загрузка 0%

MICMIC

Как исправить уязвимость PHP2Shell? Экстренная обработка RCE без аутентификации

·

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

Как исправить уязвимость PHP2Shell? Экстренная обработка RCE без аутентификации

Два идентификатора PHP2Shell (CVE‑2026‑109618, CVE‑2026‑109619) следует рассматривать как инцидент чрезвычайной важности: злоумышленнику не нужны никакие учётные данные, достаточно доступа к сервису, открытому в интернет, чтобы потенциально выполнить команды непосредственно на вашем сервере. Рекомендуемый порядок действий: сначала убедиться, входите ли вы в зону поражения, затем решить — устанавливать патч или сначала применить временные меры смягчения, и в конце обязательно проверить результат и просмотреть журналы. Ниже всё разложено по шагам в порядке выполнения.


Шаг первый: за 30 минут определить, действительно ли вы подвержены уязвимости


Не стоит сразу останавливать весь сайт — сначала выполните три действия для определения поверхности атаки.


1. Подтвердите версию. Войдите на сервер и выполните `php -v`, а также проверьте тег образа контейнера, `composer.lock`, версию PHP, переключённую в панели управления. Многие корпоративные сайты работают на старых версиях 7.x, а эксплуатация считает, что обновление выполнено, хотя фактически работает другая среда.

2. Подтвердите поверхность атаки. Просканируйте с внешней точки зрения: какие домены/IP имеют порты 80, 443, 8080, открытые напрямую в интернет, есть ли тестовые среды, старые панели администратора, временно запущенные интерфейсы, которые забыли закрыть. Доступность из внутренней сети не означает безопасность — горизонтальное перемещение часто начинается именно отсюда.

3. Подтвердите пути срабатывания. Сверьтесь с официальным бюллетенем, в котором указаны затронутые компоненты и точки входа, проверьте, покрыты ли ваши маршруты, интерфейсы загрузки, точки десериализации, места рендеринга шаблонов. Если определить невозможно — считайте, что подвержены уязвимости, это менее затратно.


Зафиксируйте результаты в таблице: домен, версия PHP, доступность из интернета, наличие затронутых компонентов, ответственное лицо. Эта таблица понадобится для проверки и разбора в дальнейшем.


Схема структуры таблицы проверки зоны поражения

Шаг второй: если можно установить патч — устанавливайте, не заменяйте обновление «правкой конфигурации»


Патч — единственное радикальное средство, временное смягчение лишь выигрывает время.


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

- Обновляйте в порядке зависимостей. Сначала обновите среду выполнения, затем фреймворк и сторонние библиотеки, в конце разберитесь с устаревшими вызовами в бизнес-коде. После обновления выполните `composer update`, затем перегенерируйте файл блокировки и закоммитьте его.

- Сохраните путь отката. Перед обновлением сделайте снимок или сохраните тег старого образа, пропишите команды отката. Обновление без плана отката — по сути азартная игра.

- Подводный камень: не объявляйте о завершении, обновив только одну машину. За балансировщиком нагрузки часто остаются несколько нетронутых серверов — злоумышленник атакует именно пропущенный.


Если бизнес выполнен на аутсорсе и исходный код недоступен, сначала свяжитесь с разработчиком для получения информации о версии и плана установки патча; если получить не удаётся — примените временные меры из следующего раздела.


Шаг третий: временное смягчение при невозможности установки патча — по приоритету


Меры смягчения «снижают вероятность эксплуатации», а не «исправляют» — обязательно внесите в план с крайним сроком обновления.


1. Сократите поверхность атаки: уберите панели администратора, отладочные интерфейсы, тестовые среды из интернета, переведите на доступ из внутренней сети или добавьте белый список IP. Это даёт наибольший эффект при наименьших затратах.

2. Предварительная блокировка: настройте правила блокировки на уровне WAF или Nginx по признакам, указанным в бюллетене, одновременно ограничьте права на выполнение в каталоге загрузок (`php_flag engine off` или эквивалентная конфигурация).

3. Снижение привилегий: веб-процесс не должен работать от root, уберите ненужные права на запись в каталогах, отключите опасные функции в `disable_functions`.

4. Добавьте мониторинг: настройте оповещения об аномальных дочерних процессах, внешних подключениях, новых исполняемых файлах в каталоге загрузок.


Подводный камень: добавить только правила WAF без изменения кода — значит доверить жизнь базе правил. Злоумышленник может обойти, сменив кодировку, поэтому в период смягчения ежедневно просматривайте журналы блокировок.


Приоритеты временных мер смягчения

Шаг четвёртый: после исправления обязательна проверка, иначе это не исправление


Многие команды завершают работу после установки патча, а старые процессы продолжают работать.


- Перезапустите PHP-FPM и веб-службу, убедитесь, что `php -v` показывает новую версию на всех узлах.

- Повторно протестируйте исходный путь срабатывания внешним сканером, убедитесь, что возвращаемое состояние больше не позволяет эксплуатацию.

- Проверьте журналы: в окне между публикацией уязвимости и исправлением были ли аномальные POST-запросы, подозрительные загрузки, аномальные внешние подключения. Если да — действуйте как при инциденте вторжения, а не просто устанавливайте патч.

- Проверьте задания по расписанию, открытые ключи SSH, новые учётные записи — убедитесь, что не оставлено бэкдоров.


Конкретный пример (иллюстрация): во время редизайна корпоративного сайта временно открыли интерфейс загрузки файлов для дизайнеров и забыли закрыть — он как раз попал на уязвимую версию. Такие «временные интерфейсы» — зона наибольшего риска; при завершении редизайна должен быть «список очистки временных точек входа».


В каких случаях стоит обратиться в MIC Studio


Если у вас одна из следующих ситуаций, справляться самостоятельно невыгодно:


- Исходный код у аутсорсера, информацию о версии не получить, план установки патча не составить;

- Много сайтов, разнородные среды, невозможно определить, какие доступны из интернета, а какие в зоне поражения;

- После установки патча нужно провести ещё один цикл тестирования безопасности и обратного тестирования, чтобы убедиться в отсутствии остаточных точек входа и бэкдоров;

- Попутно требуется рефакторинг старой системы с унификацией технологического стека разработки сайтов, мини-программ или App до поддерживаемых версий.


MIC Studio занимается разработкой корпоративных сайтов, мини-программ, App и скриптов, а также тестированием безопасности сайтов и обратным тестированием — может работать в порядке «сначала остановить кровотечение, затем проверить, потом рефакторинг». Не все проблемы требуют аутсорса; если можете установить патч самостоятельно — сначала установите патч, это важнее.


Заключение: три вещи, которые можно сделать уже сегодня


1. Составьте список сегодня: перечислите все PHP-среды, доступные из интернета, с указанием версий и ответственных — не полагайтесь на память.

2. Завершите обновление или смягчение в течение 48 часов: если можно обновить — обновите, если нет — сократите поверхность атаки и добавьте блокировку, указав крайний срок.

3. Сохраните доказательства: сделайте резервную копию журналов до и после обновления, после исправления проверьте аномальные запросы в окне времени — убедитесь, что вторжения не было.


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


Используется только во внутренней сети — нужно ли исправлять?


Нужно. Внутренняя сеть — не изолирующий барьер; терминалы сотрудников, тестовые машины, подключения третьих сторон могут стать точкой опоры. В первую очередь исправляйте доступные из интернета, внутренние — в том же окне обслуживания.


Можно ли не обновлять, если добавлены правила WAF?


Только как переходная мера. Правила зависят от сопоставления признаков, стоимость обхода невысока, а поддержка правил сама требует внимания. WAF — это жгут, обновление — операция; они не заменяют друг друга.