Приходит рассылка: «Критическая уязвимость PHP, 9,8 из 10, немедленно обновитесь». Через неделю — ещё одна, с десяткой. Потом третья. Обновляться каждый раз в тот же день нельзя: на боевом сервере это риск простоя. Игнорировать тоже нельзя.
Выход один — научиться отличать то, что касается вашего сервера, от того, что не касается. Это занимает минут десять и не требует быть специалистом по безопасности. Покажем на реальных записях октября и ноября 2026 года.
Оценка 9,8 ничего не говорит о вашем риске
Балл CVSS — это описание худшего исхода при самых удачных для атакующего условиях. В нём нет вашей конфигурации, вашей версии и вашего способа использования продукта. Поэтому вопрос «у нас критическая уязвимость?» звучит неправильно. Правильный — «выполняются ли у нас условия, при которых она работает?».
Условия написаны прямо в карточке уязвимости, строкой рядом с оценкой. Выглядит она так:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Разбирать весь вектор не нужно, достаточно четырёх букв.
- AV — откуда атака.
AV:N— из сети, это худший случай.AV:L— нужен доступ к самой машине, что для внешнего злоумышленника уже серьёзное препятствие. - PR — какие нужны права.
PR:N— никаких, достаточно прислать запрос.PR:L— нужна учётная запись.PR:H— нужны права администратора. Разница междуPR:NиPR:Lна практике огромна. - UI — требуется ли действие человека.
UI:Rозначает, что кто-то должен открыть файл, перейти по ссылке или зайти на сервер. Атака становится заметно сложнее. - AC — сложность.
AC:H— нужно поймать момент или угадать условие, что отсекает массовое сканирование.
Запись с AV:N/AC:L/PR:N/UI:N и оценкой 7,5 опаснее для вас, чем запись с 9,9 и PR:H. Первую будут запускать роботы по всему интернету, для второй нужно сначала попасть внутрь.
Три вопроса, которые отвечают почти на всё
Дальше по порядку. Если на любом шаге ответ «нет» — можно выдохнуть и поставить обновление в плановую очередь.
Первый: этот компонент у меня вообще есть?
Самая частая причина ложной тревоги. Уязвимость может быть в расширении, которое у вас не собрано, в движке базы, который не включён, или в режиме работы, который вы не используете.
Проверяется одной командой. Список расширений PHP:
php -m
Версии остального:
php -v
mysql --version
nginx -v
httpd -v
Полминуты работы, а отсекает большинство новостей.
Второй: моя версия попадает в диапазон?
В описании всегда указано, с какой по какую версию продукт уязвим и где исправлено. Формулировка «from 8.2.* before 8.2.33» означает: ветка 8.2, всё ниже 8.2.33. Если у вас 8.2.35 — вы уже за пределами, ничего делать не нужно.
Отдельно: номер версии в вашем дистрибутиве может не совпадать с номером у разработчика. AlmaLinux, Debian и Ubuntu переносят исправления в старые версии, не меняя номер. Поэтому «у меня 8.2.26, а исправили в 8.2.33» не всегда значит «я уязвим» — надо смотреть журнал изменений пакета.
Третий: выполняются ли условия?
Здесь и пригодится вектор. Нужен ли аккаунт, нужна ли особая настройка, нужно ли попасть в короткое окно времени.
Четыре записи и четыре разных ответа
Теперь по-живому. Это настоящие записи из ленты за последний месяц — те самые, которые приходят в рассылках.
9,8 — и мимо
CVE-2026-17543: «неправильное экранирование обратных слэшей приводит к тривиальной SQL-инъекции в PHP». Звучит так, что надо бросать всё.
Смотрим подробности в уведомлении разработчиков. Уязвимость в расширении ext-pgsql, в функциях pg_insert(), pg_update(), pg_select() и pg_delete(). Механика красивая: значение экранировали через PQescapeStringConn(), а потом заворачивали в строку вида E'...', где обратный слэш — управляющий символ, который эта функция не экранирует. Кавычку она удваивает, но слэш перед кавычкой ломает всю конструкцию, и остаток ввода уходит в SQL как команда.
Ключевое слово — PostgreSQL. Сайт на 1С-Битрикс работает с MySQL, и этих функций в его коде нет. Проверка:
php -m | grep pgsql
Расширение может быть собрано и при этом нигде не использоваться — уязвимы именно вызовы этих четырёх функций. Для связок PHP с PostgreSQL, а это Laravel, Symfony и самописные проекты, вопрос серьёзный: обновляться до 8.2.33, 8.3.33, 8.4.24 или 8.5.9.
10,0 — и тоже мимо
CVE-2026-49261 в MariaDB, максимальная из возможных оценок. Выполнение команд оболочки через имя узла при включённом wsrep_notify_cmd.
wsrep — это репликация Galera, то есть кластер из нескольких серверов базы. На одиночном сервере, каких большинство, этого параметра нет. Десятка превращается в ноль одной проверкой конфигурации. Остальную октябрьскую волну MariaDB, где есть и то, что касается обычного сервера, мы разобрали отдельно.
7,5 — и вот это ваше
CVE-2026-91765, скромная семёрка, которую в рассылках даже не выделят. Функция cleanup_xml_node() в расширении SOAP разбирает XML рекурсивно и не ограничивает глубину вложенности.
Вектор: AV:N/AC:L/PR:N/UI:N. Никаких прав, никакого участия человека, обычный запрос из интернета. Запрос с десятками тысяч вложенных элементов на любой эндпоинт SoapServer исчерпывает стек и роняет процесс. Поток таких запросов выедает весь пул PHP-FPM, и сайт перестаёт отвечать — без всякого взлома.
Проверка та же:
php -m | grep soap
Если расширение включено и у вас есть обмен по SOAP — с 1С, с учётной системой, со складом, — это как раз то, чем займитесь сегодня. Исправлено в 8.2.34, 8.3.35, 8.4.26 и 8.5.11.
Когда думать некогда
Есть признак, который важнее любой оценки: уязвимость попала в каталог активно эксплуатируемых CISA. Туда вносят не то, что теоретически возможно, а то, что уже видят в реальных атаках.
Две октябрьские уязвимости PHP, про которые мы писали отдельно, попали в каталог. Уязвимость в механизме обновления WordPress — тоже, 3 ноября. Если ваш продукт в этом списке — разбор условий отменяется, обновляйтесь.
Ловушка с датами
Ещё одна причина лишней паники — в ленте старое выглядит как новое.
База NVD постоянно переписывает уже существующие записи: уточняет оценку, добавляет затронутые версии. Любой инструмент, который следит за изменениями, покажет такую запись как свежую. У нас это видно каждый день: в сводке за три недели среди октябрьских находок висели июньские уязвимости MariaDB, которым просто переписали баллы. Исправления к ним вышли ещё летом.
Поэтому в карточке смотрите на дату публикации, а не на дату изменения. Если уязвимость опубликована полгода назад — почти наверняка в вашем дистрибутиве она давно закрыта очередным обновлением.
Что делать с тем, что всё-таки ваше
Порядок простой и не меняется от уязвимости к уязвимости.
- Проверьте, не закрыто ли уже. Если сервер обновляется регулярно, половина новостей к моменту прочтения неактуальна.
- Если обновиться сейчас нельзя — а это нормальная ситуация, когда на сервере боевой проект, — закройте доступ к уязвимому месту другими средствами. Отключите неиспользуемое расширение, закройте эндпоинт на уровне веб-сервера, ограничьте права аккаунта базы.
- Поставьте обновление в план, а не в «когда-нибудь». У отложенного обновления должна быть дата.
- После обновления проверьте, что исправление встало — номер версии, а не факт запуска команды.
Как это устроено у нас
Ленту NVD и каталог CISA мы просматриваем ежедневно, автоматически, по списку того, что реально обслуживаем: PHP, базы, веб-серверы, платформа. Сводка приходит в портал, и там же видно, что нового по сравнению со вчерашним днём.
Смысл не в списке, а в двух вещах. Первая: когда выходит что-то серьёзное, мы знаем, у кого из клиентов это стоит, и не ищем по памяти. Вторая: большинство записей мы закрываем решением «не наше» за минуту — по тем же трём вопросам, что выше.
Если такой проверки нет, её стоит завести в любом виде. Даже подписка на рассылку безопасности вашего дистрибутива и полчаса в неделю работают лучше, чем ничего.
Коротко
- Балл — это худший случай, а не ваш риск. Смотрите вектор:
PR:NиUI:Nстрашнее высокой оценки сPR:H. - Три вопроса: есть ли у меня этот компонент, попадает ли версия, выполняются ли условия.
- Половина новостей отсекается командами
php -mиmysql --version. - Попадание в каталог CISA важнее любой оценки: там то, что эксплуатируют прямо сейчас.
- Дата публикации важнее даты изменения записи: переоценённое старое выглядит в ленте как новое.
Источники
- CVE-2026-17543 и уведомление разработчиков PHP — инъекция в ext-pgsql.
- CVE-2026-91765 и разбор — рекурсия в SOAP.
- CVE-2026-49261 — выполнение команд через wsrep_notify_cmd.
- Каталог активно эксплуатируемых уязвимостей CISA.
- Спецификация CVSS 3.1 — расшифровка вектора.
Нужна такая проверка на вашей инфраструктуре — посмотрите, как мы закрываем сервер, или напишите нам: разберём конфигурацию и скажем, что из текущей ленты вас действительно касается.
Статья была полезна?
Частые вопросы
Что означает оценка CVSS 9,8 и надо ли сразу обновляться?
Оценка описывает худший исход при самых удачных для атакующего условиях и не учитывает вашу конфигурацию. Сразу бросать всё стоит, если уязвимость попала в каталог активно эксплуатируемых CISA. В остальных случаях сначала проверьте, есть ли у вас этот компонент, попадает ли ваша версия в уязвимый диапазон и выполняются ли условия из вектора.
Как понять по вектору, насколько всё плохо?
Достаточно четырёх обозначений. AV:N — атака из сети, AV:L — нужен доступ к машине. PR:N — прав не требуется, PR:L — нужна учётная запись, PR:H — права администратора. UI:R — требуется действие человека. AC:H — нужно поймать момент или угадать условие. Запись с AV:N/PR:N/UI:N и оценкой 7,5 для вас опаснее, чем 9,9 с PR:H.
У меня версия ниже исправленной, но сервер на AlmaLinux. Я уязвим?
Не обязательно. Дистрибутивы переносят исправления в старые версии, не меняя номер. Смотрите журнал изменений пакета: там будет указано, что исправление бэкпортировано, даже если третья цифра версии осталась прежней.
Почему в мониторинге старые уязвимости выглядят как новые?
База NVD постоянно переписывает существующие записи: уточняет оценку и список затронутых версий. Инструменты, которые следят за изменениями, показывают такую запись как свежую. Смотрите на дату публикации, а не на дату изменения: если уязвимость опубликована полгода назад, в вашем дистрибутиве она, скорее всего, давно закрыта.
Что делать, если обновиться прямо сейчас нельзя?
Закрыть доступ к уязвимому месту другими средствами: отключить неиспользуемое расширение, закрыть эндпоинт на уровне веб-сервера, урезать права аккаунта базы. И поставить обновление в план с конкретной датой, а не в «когда-нибудь».