В PHP обнаружены две критические дыры - как защититься?
Ситуация абсолютно реальна и является одним из самых серьезных инцидентов в сфере кибербезопасности. Уязвимости получили кодовое имя **PHP2Shell** (CVE-2026-109618 и CVE-2026-109619) и максимальную оценку опасности CVSS 9.2 (Critical) [[34]].
Поскольку уязвимость находится на уровне ядра интерпретатора PHP, она срабатывает на этапе парсинга HTTP-запроса, **до** того, как начнет выполняться код любой CMS (WordPress, 1С-Битрикс, OpenCart и др.) или фреймворка [[28]]. Это делает традиционные WAF и плагины безопасности внутри приложений практически бесполезными.
Вот пошаговый технический план действий по закрытию этой уязвимости, разделенный по сценариям использования.
### 1. Если у вас актуальные версии PHP (8.2, 8.3, 8.4, 8.5)
Официальные патчи уже выпущены (версии 8.2.35, 8.3.36, 8.4.27 и 8.5.12) [[47]].
**Действие:** Немедленно обновите пакеты через менеджер ОС и перезапустите сервис.
Для Ubuntu/Debian:
```bash
sudo apt update
sudo apt install --only-upgrade "php8.*" php-fpm
sudo systemctl restart php*-fpm
```
Проверьте успешность обновления командой `php -v` [[40]].
### 2. Если у вас Legacy-версии PHP (5.6, 7.4, 8.0, 8.1)
Это самая проблемная зона, так как эти ветки находятся в статусе End of Life (EOL), и официальных обновлений от PHP Foundation для них не предусмотрено [[53]]. Однако есть два проверенных пути решения:
#### Вариант А: Экстренный харденинг (временная мера за 2 минуты)
Этот метод не исправляет код, но ломает цепочку эксплуатации эксплойта, отключая его триггеры (переполнение памяти при парсинге multipart и использование session upload progress).
В конфигурации PHP (`php.ini` или в конфиге конкретного пула PHP-FPM, например `/etc/php/7.4/fpm/pool.d/www.conf`) добавьте:
```ini
session.upload_progress.enabled = 0
memory_limit = -1
```
*Важно:* После применения настроек обязательно перезапустите PHP-FPM или Apache. Учтите, что `memory_limit = -1` снимает ограничение на потребление памяти одним запросом, поэтому за этим нужно следить до момента полного обновления [[53]].
Если на сайте не требуется загрузка файлов пользователями, более надежный способ – блокировать такие запросы на уровне веб-сервера. Для **Nginx**:
```nginx
if ($http_content_type ~* "multipart/form-data") {
return 403;
}
```
Для **Apache**:
```apache
RewriteEngine On
RewriteCond %{HTTP:Content-Type} multipart/form-data [NC]
RewriteRule ^ - [F]
```
#### Вариант Б: Фундаментальное решение (бэкпорт патча)
Сообщество уже отреагировало на утечку. Существуют открытые репозитории (например, `Anton-Barinov/php2shell-patches`), которые предоставляют готовые скрипты для компиляции патченных версий PHP 5.6 и 7.4 в изолированную директорию (например, `/opt/php-7.4-patched`) [[40]]. Это позволяет применить исправление, не ломая системный пакетный менеджер и не обновляя весь стек приложения.
Кроме того, популярные сторонние репозитории, такие как `sury.org` (Ondřej Surý) для Debian/Ubuntu, уже начали поставлять бэкпорты исправлений вплоть до PHP 5.6 [[65]].
### 3. Если вы используете управляемый хостинг
Если у вас нет root-доступа к серверу, вы не сможете применить патч самостоятельно.
**Действие:**
1. Немедленно откройте тикет в службе поддержки хостинга с требованием обновить PHP или применить бэкпорт.
2. Если хостинг не реагирует, временно переведите сайт в режим обслуживания (статическая HTML-страница) или отключите прием POST-запросов, пока провайдер не устранит угрозу [[53]].
### 4. Особый случай: Панели управления (HestiaCP, ISPmanager и др.)
Панели часто используют собственный изолированный PHP-бинарник (например, `hestia-php`). Даже если вы обновили системный PHP для клиентских сайтов, сама панель управления может оставаться уязвимой. Необходимо применить настройки харденинга (Вариант А) specifically к конфигурационному файлу `php.ini` самой панели и перезапустить ее сервис [[40]].
### Резюме
"Окно защитника" было нарушено из-за утечки инструмента PHP2Shell, и массовые автоматизированные сканирования уязвимых серверов уже идут [[26]]. Не полагайтесь на плагины безопасности внутри CMS. Фундаментальное решение требует обновления или патчинга самого интерпретатора PHP на уровне операционной системы.
Если у вас есть конкретная версия PHP или стек технологий (например, связка с определенной панелью управления), я могу дать более точную инструкцию по сборке изолированного бинарника или настройке веб-сервера.
Comments
Post a Comment