Хостинг
VDS
Аренда серверов
Домены
Почта
SSL
Хранилище
Сайты
Обзоры
Регламенты
AI Studio
Kubernetes
Архив
Закрытие уязвимостей CVE-2026-109618 и CVE-2026-109619 в PHP

Закрытие уязвимостей CVE-2026-109618 и CVE-2026-109619 в PHP на VDS с панелью управления NetAngels

Критичность: критическая (CVSS v4.0 — 9.2). Уязвимости позволяют удалённо выполнить произвольный код (RCE) на сервере.

21 октября 2026 года команда PHP выпустила исправления для двух критических уязвимостей в обработке запросов типа multipart/form-data (используется при загрузке файлов):

  • CVE-2026-109619 — обработчик upload-progress в расширении session выполнялся при каждом multipart-запросе до инициализации запроса и мог использовать состояние, оставленное предыдущим запросом в том же процессе (php-fpm или Apache).

  • CVE-2026-109618 — исчерпание памяти при разборе multipart-запроса переводило движок PHP в состояние, при котором завершение запроса выполнялось на частично инициализированных данных.

Уязвимы все выпускавшиеся версии PHP начиная с 5.4. Официальные исправления выпущены в версиях 8.2.35, 8.3.36, 8.4.27, 8.5.12.

На VDS с панелью управления NetAngels защита осуществляется одним из трёх способов:

Путь Что делаем Кому
A Устанавливаем исправленные сборки PHP из репозитория NetAngels Debian 11/12/13 (bullseye, bookworm, trixie), PHP 8.2–8.5
B Устанавливаем плагин hp_uploadprogress_guard Debian 8/10/11/12/13, PHP 5.6–8.1
C Блокируем запросы multipart/form-data в web-сервере Debian 7 (wheezy), PHP 5.4–7.3

Все команды выполняются от root (или с sudo) в Терминале VDS или через SSH.


Шаг 1. Определите версию Debian и установленные версии PHP

Версия дистрибутива

cat /etc/os-release

В строке VERSION_CODENAME указана кодовая версия Debian: wheezy, stretch, buster, bullseye, bookworm или trixie.

Версии PHP

ls /usr/bin/php* /usr/sbin/php-cgi* 2>/dev/null

В списке будут бинарники вида php8.4.26, php-cgi8.4.26 — цифры после php указывают версию PHP (в примере — 8.4).

Важно: на VDS зачастую установлено несколько версий PHP (например, 7.4 и 8.4 одновременно). Инструкцию нужно выполнить для каждой установленной версии PHP.


Шаг 2. Выберите путь

Debian Версии PHP Что делать
wheezy (7) 5.4–7.3 Путь C: блокировка в web-сервере
stretch (8) 5.6–8.1 Путь B: плагин
buster (10) 5.6–8.4 Путь B: плагин
bullseye (11) 8.2–8.5 Путь A: исправленные пакеты PHP
bullseye (11) 7.0–8.1 Путь B: плагин
bookworm (12) 8.2–8.5 Путь A: исправленные пакеты PHP
bookworm (12) 7.4–8.1 Путь B: плагин
trixie (13) 8.2–8.5 Путь A: исправленные пакеты PHP
trixie (13) 5.6–8.1 Путь B: плагин

Если для одного VDS под разные сайты используются разные версии PHP — действуйте по каждой версии согласно таблице (например, для 8.4 — Путь A, для 7.4 на том же VDS — Путь B).


Путь A. Установка исправленного PHP (bullseye / bookworm / trixie, PHP 8.2–8.5)

Исправленные сборки PHP уже опубликованы в репозитории NetAngels:

Текущая версия PHP Пакет для установки
8.2 php8.2.35
8.3 php8.3.36
8.4 php8.4.27
8.5 php8.5.12

A1. Подключите репозиторий NetAngels (если его ещё нет)

Проверьте, подключён ли репозиторий:

grep -r 'packages.netangels.ru' /etc/apt/sources.list /etc/apt/sources.list.d/

Если вывод пустой — добавьте репозиторий и ключ:

. /etc/os-release
echo "deb http://packages.netangels.ru/debian $VERSION_CODENAME main" > /etc/apt/sources.list.d/netangels.list
wget -O - http://packages.netangels.ru/debian/info@netangels.ru.gpg.key | apt-key add -

Обновите списки пакетов:

apt-get update

A2. Установите новый пакет PHP

Пример для PHP 8.4 (для другой версии подставьте соответствующий пакет из таблицы выше):

apt-get install -y php8.4.27

Если при установке возникает ошибка вида trying to overwrite '/etc/php-fpm.conf.default', which is also in package php8.4.x (конфликт со старым пакетом PHP) — установите с опцией --force-overwrite:

apt-get -o Dpkg::Options::='--force-overwrite' --no-install-recommends -y install php8.4.27

A3. Примените новую версию

Для применения новой версии PHP на VDS выполните скрипт обновления:

/usr/bin/update-php

Скрипт переключит VDS на новую версию PHP. После этого новая версия появится в панели управления.

A4. Расширения (модули) PHP

Если для старой версии установлены пакеты расширений (например, php8.4.26-redis, php8.4.26-memcached), установите аналогичные для новой версии:

apt-get install -y php8.4.27-redis

Если дополнительные расширения загружаются из /opt (подключены в панели), а минорная версия PHP не менялась (8.4 → 8.4) — ничего делать не нужно, модули совместимы.

Старый пакет PHP (например, php8.4.26) удалять не обязательно: после update-php используется только новая версия. Удалить старый пакет можно позже командой apt-get remove -y php8.4.26.


Путь B. Установка плагина hp_uploadprogress_guard (PHP 5.6–8.1)

Плагин hp_uploadprogress_guard — модуль PHP, который закрывает обе уязвимости на не обновлённых сборках PHP: отключает уязвимый обработчик upload-progress, подменяет разбор multipart-запросов исправленным алгоритмом и исключает исчерпание памяти при разборе. Обычная загрузка файлов при этом работает без изменений. Плагин не требует пересборки PHP и применяется ко всем версиям PHP 5.6–8.1, кроме wheezy (на Debian 7 он не загружается — используйте Путь C).

Готовые модули для каждой версии PHP (x86_64) публикуются в репозитории разработчика: https://github.com/HOSTED-POWER/php_uploadprogress_guard/tree/main/dist

B1. Скачайте модуль для вашей версии PHP

Файл модуля подбирается по минорной версии PHP (5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1).

Пример для PHP 7.4:

cd /opt
wget https://raw.githubusercontent.com/HOSTED-POWER/php_uploadprogress_guard/main/dist/hp_uploadprogress_guard-7.4.so
wget https://raw.githubusercontent.com/HOSTED-POWER/php_uploadprogress_guard/main/dist/SHA256SUMS
grep ' hp_uploadprogress_guard-7\.4\.so$' SHA256SUMS | sha256sum -c -

Последняя команда проверяет контрольную сумму файла. Ожидается вывод:

hp_uploadprogress_guard-7.4.so: OK

Если вывод FAILED — файл повреждён, скачайте его заново.

Для других версий PHP замените 7.4 на свою минорную версию во всех трёх командах (hp_uploadprogress_guard-5.6.so, hp_uploadprogress_guard-8.1.so и т.д.).

B2. Подключите модуль в панели управления

1) В личном кабинете в разделе VDS откройте Панель управления VDS.

2) Перейдите на вкладку «Настройки PHP» нужного VDS-аккаунта и проверьте версию PHP. В примере 7.4, у вас может быть другая.

3) В поле настроек добавьте строку (с полным путём к скачанному файлу):

extension=/opt/hp_uploadprogress_guard-7.4.so

4) Сохраните настройки - изменения вступят в силу.

Если на VDS несколько аккаунтов — для каждого нужно подключить свой модуль и свою строку extension=/opt/hp_uploadprogress_guard-X.Y.so в настройках PHP.

B3. (Опционально) Проверьте загрузку модуля из командной строки для каждого VDS-аккаунта (в примере web):

sudo -u web bash -c "php -m | grep hp_uploadprogress_guard"

В выводе должна отображаться запись hp_uploadprogress_guard. Основной способ проверки — раздел «Проверка результата» ниже.


Путь C. Блокировка multipart/form-data в web-сервере (wheezy, PHP 5.4–7.3)

Для Debian 7 (wheezy) исправленные сборки PHP недоступны, а плагин на этой версии дистрибутива не применим. Единственный способ защиты — запретить приём запросов с Content-Type: multipart/form-data на уровне web-сервера: атака распространяется только через такие запросы.

Внимание: после применения этого правила все загрузки файлов через PHP на заблокированных сайтах перестанут работать (формы с прикреплением файла, загрузка в медиа-библиотеки, письма с вложениями через веб-интерфейс и т.п.). Обычные страницы, формы без загрузки файлов, API-запросы — работают как раньше. Для wheezy мы также рекомендуем запланировать перенос сайта на VDS с актуальным Debian — там доступны полноценные пути A и B.

C1. Определите, какой web-сервер обслуживает сайт

netstat -tlnp | grep -E ':(80|443)\s'

Если netstat не установлен:

ss -tlnp | grep -E ':(80|443)'

или

ps aux | grep -E 'nginx|apache2' | grep -v grep

По имени процесса (nginx или apache2) определите web-сервер. Если работает связка nginx + Apache2 (nginx на фронтенде) — достаточно поставить правило в nginx; если сайт обслуживается только Apache2 — правило ставится в Apache2.

C2. Правило для nginx

Правило работает в контексте server {}, поэтому размещается в конфиге сайта. На VDS с панелью управления NetAngels индивидуальные настройки сайтов размещаются в каталоге /etc/nginx/custom-settings.d/. Откройте конфигурационный файл сайта и пропишите:

if ($http_content_type ~* "multipart/form-data") {
    return 403;
}

Проверьте и перезапустите nginx:

nginx -t
service nginx restart

Если нужно заблокировать multipart на всех сайтах VDS — создайте отдельные файлы в /etc/nginx/custom-settings.d/ для каждого сайта (единый глобальный файл не подходит: директива if разрешена только внутри server {}).

C3. Правило для Apache

Глобально (для всех сайтов) — создайте конфиг и включите его:

cat > /etc/apache2/conf-available/block-multipart.conf <<'EOF'
RewriteEngine On
RewriteCond %{HTTP:Content-Type} multipart/form-data [NC]
RewriteRule ^ - [F]
EOF

a2enconf block-multipart
apache2ctl configtest
service apache2 restart

Точечно, для одного сайта — поместите те же три строки в файл .htaccess, размещенный в корневой директории сайта.


Проверка результата

1. Версия PHP (путь A)

sudo -u web bash -c "php -v"

Ожидается исправная версия: 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 (или новее).

2. Плагин загружен (путь B)

а) В панели управления VDS → «Настройки PHP» для нужной версии — строка extension=/opt/hp_uploadprogress_guard-X.Y.so на месте.

б) Проверьте, что модуль загружен:

sudo -u web bash -c "php --ri hp_uploadprogress_guard"

В выводе должна быть строка rfc1867 (session.upload_progress) callback detached => yes.

3. Блокировка работает (путь C)

Запрос с загрузкой файла должен отклоняться с кодом 403:

curl -s -o /dev/null -w '%{http_code}\n' -X POST -F 'test=1' http://ваш-домен/

Ожидается 403.

Обычный GET-запрос работает как раньше:

curl -s -o /dev/null -w '%{http_code}\n' http://ваш-домен/

Ожидается 200 (или 301/302, если сайт редиректит на https).

4. Сайты работают

Откройте сайты в браузере: страницы должны открываться как раньше. Загрузка файлов (через форму) должна работать на всех, кроме сайтов, где применён Путь C.


Что меняется после защиты

  • Путь A — ничего: это штатное обновление PHP до исправного релиза.

  • Путь B — единственное видимое изменение: перестаёт работать функциональность session.upload_progress (запись прогресса загрузки в $_SESSION). Браузеры и современные приложения её не используют, стандартные CMS работают без неё. Сама загрузка файлов полностью исправна. После последующего обновления PHP до исправной версии плагин сам «отключается» (в выводе php --ri hp_uploadprogress_guard появятся отметки not needed) — удалять его не обязательно.

  • Путь C — заблокирована загрузка файлов через PHP на затронутых сайтах (см. предупреждение выше).

Если что-то пошло не так

  • apt-get update ругается на подпись репозитория — убедитесь, что ключ добавлен: apt-key list | grep -i netangels, при необходимости повторите команду добавления ключа из шага A1.

  • Ошибка конфликта файлов при apt-get install — используйте команду с --force-overwrite из шага A2.

  • Сайт не открывается после перезапуска web-сервера — проверьте конфиг: nginx -t или apache2ctl configtest — они укажут строку с ошибкой.

  • Не получилось самостоятельно — обратитесь в техническую поддержку NetAngels, указав кодовую версию Debian (cat /etc/os-release) и установленные версии PHP (ls /usr/bin/php*).

Облачные VDS
Облачные VDS
Облачные VDS
Масштабируются под любые задачи: от размещения сайта до IT-инфраструктуры
Заказать

Нам доверяют тысячи компаний и разработчиков

22 года
Предоставляем услуги профессионального хостинга
35 000+
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime наших серверов хостинга
Callibri
Forum
УГМК-Здоровье
Крылья
Tele-Club
Linline
ipos.digital
Магнум
Туристер
RoiBuro
ROSO
Callibri
Forum
УГМК-Здоровье
Крылья
Tele-Club
Linline
ipos.digital
Магнум
Туристер
RoiBuro
ROSO
ВК49865