Временное решение критической уязвимости CVE-2026-109618/CVE-2026-109619

Справочная информация:
CVE-2026-109619 (session.upload_progress):
Данный вектор атаки физически не может сработать, так как этот механизм PHP запускается только при парсинге multipart-форм. Нет такого типа запроса — модуль прогресса загрузки вообще не включается.

CVE-2026-109618 (переполнение памяти в парсере): Уязвимость живет внутри кода PHP, который отвечает за разбор multipart-структуры (границы файлов, заголовки форм). 

Уязвимости вызваны обращением к уже освобождённой памяти в обработчике отслеживания прогресса загрузки файлов на сервер (session.upload_progress). Наличия на сайте функциональности для загрузки файлов для совершения атаки не требуется, достаточно автоматического срабатывания в PHP-интерпретаторе обработчика контента "multipart/form-data". Для успешной эксплуатации требуется определение раскладки структур в памяти процесса, которая специфична в каждой сборке (проблема решается перебором в эксплоите смещений, заранее вычисленных для пакетов из разных дистрибутивов).

Уязвимые версии: PHP 5.4.0 — 8.5.11 (все версии с session.upload_progress)
Исправлено в: 8.2.35, 8.3.36, 8.4.27, 8.5.12 (обновление вышло 21.10.2026)

Временно решение угроз для вебсервера nginx:

Временное решение основывается на блокирование multipart запросов с кодом 403 на уровне веб сервера, сразу после чтения HTTP-заголовка Content-Type, вредоносное тело запроса блокируется и вообще не доходит до PHP. Обработчик PHP даже не узнает, что этот запрос существовал, и его память останется нетронутой.

Создание белого списка:

Необходимо создать файл /etc/nginx/mhost_ips_map.conf
Данный файл будет содержать в себе белый список ип адресов, которым можно будет использовать запросы multipart/form-data
Пример файла:
geo $is_trusted_ip {
    default       0;
    5.22.156.0/24 1;
    5.35.80.0/23 1;
}

Готовый файл с подсетями РБ можно скачать по ссылке: https://mhost.by/downloads/mhost_ips_map.conf
 

Фильтрация запросов:

Необходимо создать файл /etc/nginx/mhost_ips_filter.conf
Данный файл будет обрабатывать логику фильтрации запросов multipart/form-data, если IP адрес, с которого происходит запрос в белом списке, то вебсервер пропустит запрос, если адреса нет в списке, вернется 403 ошибка.
Обычное отображение страниц при этом будет работать в базовом режиме.

set $check_multipart "";

# 1. Если это опасный multipart-запрос, добавляем букву "M"
if ($content_type ~* "multipart/form-data") {
set $check_multipart "M";
}

# 2. Если IP НЕ входит в белый список (равен 0), добавляем букву "B"
if ($is_trusted_ip = 0) {
set $check_multipart "${check_multipart}B";
}

# 3. Если совпали оба условия (строка стала "MB"), отдаем 403 Forbidden
if ($check_multipart = "MB") {
return 403;
}

Готовый файл с логикой фильтрации можно скачать по ссылке: https://mhost.by/downloads/mhost_ips_filter.conf
 

Общая настройка nginx:

В основном конфигурационном /etc/nginx/nginx.conf в блоке http необходимо подключить файл с вайт листом.
Подключение выполняется строчкой:         include /etc/nginx/mhost_ips_map.conf; 

Пример:
http {

        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        .............
        .............
        .............
        include /etc/nginx/mhost_ips_map.conf;
        .............
        .............
}

 

Настройка сайтов:

Для того, что бы необходимый сайт начал использовать фильтрацию запросов, необходимо в конфигурационный файл вашего домена подключить mhost_ips_filter.conf
Подключение выполняется строчкой:         include /etc/nginx/mhost_ips_filter.conf; 

Пример:
server {
    listen 80;
    server_name www.mhost.by mhost.by;
    .............
    .............
    include /etc/nginx/mhost_ips_filter.conf;
    .............
    .............
    location / {
        rewrite ^(.*)$ https://mhost.by$1 permanent;
    }
}

После всех правок обязательно необходимо проверить конфигурацию веб сервера командой: nginx -t
Если указанная команда вернет информацию что все хорошо, то необходимо выполнить перезагрузку сервера
service nginx restart


Тестирование:

Пример запроса для тестирования: 
curl -s -o /dev/null -w "%{http_code}\n" -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" -X POST -F "test_field=1" https://адрес_Вашего_сайта

Если Ваш ип находится в белом списке, то сервер вернет: 200 - это означает что команда была обработана, для всех остальных запросов сервер должен возвращать: 403 - означает, что сервер понял ваш запрос, но отказывается предоставить доступ к странице или файлу
mhost.by