Трендовые github проекты в нашем телеграм канале. Подпишись → Срок исправления CVE по дереву решений: разбор на AI-стеке
10 июня 2026 года CISA выпустила директиву BOD 26-04. Она отменяет BOD 22-01, которая с 2021 года задавала единые календарные сроки для уязвимостей из каталога KEV. Теперь срок зависит от четырёх обстоятельств: доступен ли актив публично, есть ли CVE в KEV, автоматизируется ли атака и какой технический эффект она даёт. В самом срочном случае — три дня и первичный forensic triage, в самом мягком — плановое обновление.
Поле due date из KEV давно подтягивают сканеры и используют как ориентир для внутренних SLA, поэтому изменение касается и тех, на кого директива формально не распространяется. Сильнее всего оно бьёт по AI-платформам: в них слово «устранить» означает пять разных операций.
Почему балл CVSS перестал годиться для дедлайна
Первая проблема — оценки может просто не быть. С 15 апреля 2026 года NVD в первую очередь обогащает записи из KEV, ПО федеральных органов США и критичное ПО из списка EO 14028. Остальные CVE получают статус Lowest Priority, а бэклог до 1 марта 2026 года переведён в Not Scheduled: без CPE, без собственного CVSS от NIST. За 2020–2025 годы поток CVE вырос на 263%.
Вторая — CVSS описывает тяжесть дефекта, риск он не измеряет. Это прямо написано в руководстве FIRST по CVSS 4.0, и ради этого в четвёртой версии появилась группа метрик Threat.
Третья — оценщики расходятся. У CVE-2024-8309 (SQL-инъекция в GraphCypherQAChain из LangChain) NVD ставит 9,8 Critical, а CNA — 4,9 Medium, с разными векторами и даже разными CWE. У CVE-2024-5184 в EmailGPT три оценки: 9,1 от NVD, 6,5 по CVSS 3.1 и 8,5 по CVSS 4.0 от одного и того же Synopsys. По препринту Zhang, Massacci и Zhang (июль 2026), модель приоритизации, обученная на оценках одного источника, теряет до 40% точности на данных другого.
Пять слоёв, пять смыслов слова «исправить»
Веб-API и обвязка. Обычный патч зависимости в следующем релизе.
ML-зависимости. CVE-2025-32434 в PyTorch: RCE через torch.load даже с weights_only=True. Уязвимы версии до 2.5.1, фикс только в 2.6.0 — бэкпортов PyTorch не делает. Значит, закрыть CVE = перейти на новую минорную ветку с проверкой CUDA-стека, пайплайнов и воспроизводимости. Деталь: 2.6.0 вышла 29 января 2025 года, CVE опубликована 18 апреля — фикс существовал 79 дней до записи. Кто обновлялся регулярно, закрыл проблему заранее; кто закрепил версию, получил мажорный апгрейд в сжатый срок.
Темп релизов делает пиннинг отдельным риском. У vLLM за 204 дня вышло 24 релиза в 14 минорных ветках, LTS нет, патчи — только для актуальной линии. Зафиксировав инференс-движок на квартал, легко отстать на шесть-семь минорных версий.
GPU-рантайм и прошивки. CVE-2025-23266 (NVIDIAScape) в NVIDIA Container Toolkit: OCI-хук запускает nvidia-ctk от root и наследует LD_PRELOAD из образа, для побега на хост хватает трёх строк в Dockerfile. Хост не обязан смотреть в интернет — достаточно права запустить контейнер на общей GPU-инфраструктуре. Фикс есть (Toolkit 1.17.8+, GPU Operator 25.3.1+), но на живом кластере это окно работ и перезапуск узлов. Временная мера — отключить CUDA compatibility library hook в /etc/nvidia-container-toolkit/config.toml:
disable-cuda-compat-lib-hook = true
CVE-2023-4969 (LeftoverLocals) с оценкой 6,5 позволяет одному GPU-ядру читать local memory после другого. По баллу это задача «на 90 дней», для мультитенантной платформы — нарушение изоляции арендаторов. Лечится прошивкой и драйвером, сканер образов её не увидит.
Инференс-движок. CVE-2025-30165 в vLLM (небезопасная десериализация, 8,0): мейнтейнеры не будут выпускать патч и советуют держать сервис в изолированной сети. CVE-2023-48022 в Ray (ShadowRay, 9,8, тег disputed): по мнению вендора, Ray вообще не должен работать в открытой сети, токен-аутентификация появилась опционально с 2.52.0. Паттерн ShadowMQ (ZeroMQ recv_pyobj() плюс pickle) копипастой разошёлся по нескольким инференс-серверам, и у части из них нет ни фикса, ни CVE — сканер такое не заметит.
Веса модели. PyTorch в SECURITY.md прямо пишет: загрузка недоверенной модели равна запуску недоверенного кода. CVE тут нет. В 2024 году JFrog нашла на Hugging Face около сотни моделей с вредоносным __reduce__, одна открывала reverse shell.
Как устроено дерево SSVC и зачем пятая ось
В SSVC уязвимость не получает итоговое число. Команда отвечает на вопросы, и по их сочетанию выбирается действие: Track, Track*, Attend, Act. Срок становится следствием действия. Платформенная команда здесь играет роль deployer, но удобно брать за основу дерево CISA (роль coordinator): данные для него публикуются открыто через Vulnrichment. С 17 июня 2026 года NVD отдаёт SSVC-метаданные в API 2.0.3 в поле ssvcV203 — покрыто около 95% записей, отдельный пайплайн обогащения не нужен.
Перед деревом стоит нулевой вопрос: есть ли у находки CVE. Если нет — это ветка «вне очереди CVE», решение принимается по артефакту: формат сериализации, песочница при загрузке, доверие к источнику. Дальше пять осей:
| Вопрос | Откуда ответ |
|---|---|
| Есть подтверждённая эксплуатация? | KEV, threat intelligence |
| Атака автоматизируется целиком? | SSVC automatable |
| Полный контроль над компонентом? | SSVC technicalImpact |
| Доступно за пределами доверенного контура? | инвентарь, сетевой контур |
| Есть применимый патч? | релизы, advisory, возможности эксплуатации |
Первые четыре — из BOD 26-04. Пятая добавлена под AI-стек: без неё дерево назначит срок действию, которое выполнить нельзя. Три уточнения, которые стоит зафиксировать в регламенте:
- Доверенный контур — сеть, куда нет доступа ни у пользователя, ни у соседнего тенанта. Для уязвимостей, эксплуатируемых через соседство на ускорителе, ответ «вне контура» всегда «да».
- Применимый патч — тот, который ваша команда может поставить в обычном цикле. Мажорный апгрейд PyTorch применим, хоть и дорог; прошивка ускорителя в чужом облаке — нет. Кто и какую компенсирующую меру держит, пока патча нет, прописывают в договоре с провайдером.
- Чья оценка при расхождении —
automatableиtechnicalImpactиз Vulnrichment. Для LangChain это переводит запись из «24 часов» в плановый цикл.
EPSS и CVSS нельзя перемножать в «композитный балл»: FIRST называет это отмыванием оценок, у шкал разные типы.
Шесть исходов и релизный гейт
| Исход | Релиз | Что вместо патча |
|---|---|---|
| Стоп-релиз | блокируется | ничего, нужно устранение |
| Митигация под подпись | проходит | изоляция или отключение пути, подпись владельца и ИБ с датой пересмотра |
| Срочно без блокировки | проходит | план устранения с датой |
| Плановый цикл | проходит | ничего |
| Плановый апгрейд | проходит | постоянная компенсирующая мера |
| Вне очереди CVE | проходит | решение по артефакту |
Прогон семи CVE из примеров выше и CVE-2025-23319 из цепочки уязвимостей NVIDIA Triton (веб-API и инференс доступны через балансировщик, ускорители делят несколько тенантов): Container Toolkit и Triton — «срочно без блокировки», vLLM WONTFIX — «митигация под подпись», LeftoverLocals — «плановый апгрейд» с постоянным запретом совместного размещения, остальные четыре — плановый цикл. По баллу шесть из восьми записей ушли бы в «критично, 24 часа», по дереву туда не попадает ни одна: подтверждённой эксплуатации нет ни у кого. Подборка витринная, в реальном бэклоге большинство записей закрывается обычным патчем и разрыв будет меньше.
Порог считают от ёмкости команды
EPSS принципиально не даёт готовых уровней, популярный порог 10% — примерно 95-й перцентиль без особого статуса. Для оценки объёма FIRST даёт доли от ~61 тысячи CVE за год:
| Правило | Доля | В месяц |
|---|---|---|
| CVSS High+ | ~48% | ~2 400 |
| CVSS Critical | ~10,5% | ~530 |
| EPSS ≥ 50% | 1,2% | ~60 |
| Запись в KEV | ~0,5% | ~25 |
| EPSS ≥ 90% | 0,2% | ~10 |
Разница между крайними строками — 240 раз. По данным Cyentia и Kenna (около 300 организаций), типичная команда закрывает около 10% открытого бэклога в месяц. Для слоёв с мажорными апгрейдами и прошивками эта цифра заметно ниже. Низкая вероятность отдельной записи не означает низкий риск набора: из 100 записей с EPSS 5% хотя бы одна будет эксплуатирована за 30 дней с вероятностью 0,994.
У EPSS есть слепая зона: для vLLM, Triton, Ray и форматов весов телеметрии сенсоров почти нет, и близкий к нулю балл там — прогноз по пустоте.
Российский контур
Методика ФСТЭК от 30 июня 2025 года считает критичность как V = Icvss × Iinfr × (Iat + Iimp): доступность из интернета входит в Iinfr, возможность эксплуатации — в Iat, последствия — в Iimp. Критический уровень — при V > 8,0. Приказ № 117 (действует с 1 марта 2026 года) даёт 24 часа на критические и 7 дней на высокие уязвимости, но в пункте 38 ставит компенсирующие меры в один ряд с устранением. Пункт 39 требует учитывать риски самого обновления, что пригодится для мажорных апгрейдов ML-фреймворков.
С чего начать
- Разметить инвентарь по пяти слоям и для каждого записать, что значит «закрыть».
- Выгрузить
ssvcV203из NVD API для текущего бэклога (пагинация, около дня работы) и посчитать распределение по исходам. - Посчитать, сколько записей команда реально закрывает в месяц, и выбрать порог EPSS под этот объём.
Календарный срок остаётся: его требуют приказ и аудит. По Verizon DBIR 2026, на седьмой день открытыми остаются 60–70% уязвимостей из KEV — фиксированный срок многие команды не выдерживают. Дерево перед сроком нужно, чтобы дедлайн получали записи, для которых есть выполнимое действие.