Что такое VEX
VEX и связь с отчётами об уязвимостях.
VEX (Vulnerability Exploitability eXchange) — формат документов, позволяющий поставщикам и операторам указывать, применима ли конкретная уязвимость (CVE) в данном продукте, компоненте или образе. Цель — уменьшить шум в отчётах сканирования: не все найденные CVE реально эксплуатируемы в вашем контексте (используемая версия пакета, отключённая функция, изолированная среда и т.п.).
VEX-документ связывает артефакт (например, образ контейнера), уязвимость (идентификатор CVE) и статус применимости (affected / not_affected / fixed и др.), при необходимости с обоснованием. Это помогает:
- фокусироваться на реально применимых уязвимостях;
- обоснованно исключать ложные срабатывания в отчётах и политиках (например, «запрет подов с критическими уязвимостями» с учётом VEX).
Спецификация VEX разрабатывается в рамках CISA и связана с форматами SBOM (Software Bill of Materials). Поддержка VEX в инструментах сканирования (в том числе в Trivy) позволяет учитывать такие документы при формировании отчётов и фильтрации уязвимостей.
Использование в платформе «Штурвал»
В платформе сканирование образов выполняется на базе Trivy (Модуль сканирования образов контейнеров, shturval-scanner). Размеченные уязвимости (в том числе с использованием VEX или внутренних процедур разметки) могут исключаться из отчёта или помечаться как неприменимые, чтобы в интерфейсе и при применении политик (например, блокировка подов с критическими CVE) учитывались только реально применимые уязвимости.
Когда модуль включён, в кластере формируются отчёты о выявленных уязвимостях в образах контейнеров (VulnerabilityReports), которые отображаются в разделе Безопасность на странице Анализ образов.
Общий порядок исключения :
- Подготовить конфигурацию Trivy и скачать файл
vex-updated.jsonс размеченными уязвимостями в формате VEX. - Создать в кластере ConfigMaps с конфигурацией Trivy и файлом
vex-updated.json. - Применить ShturvalServicePatch к
shturval-scanner. - Перезапустить модуль сканирования и пересоздать отчёты
VulnerabilityReports.
Подготовить конфигурацию и файл VEX
-
Создайте конфигурационный YAML-файл Trivy с именем
trivy.yaml:vulnerability: vex: - /tmp/vex/openvex.json -
Скачайте файл
vex-updated.jsonдля 2.14.0. -
Перейдите в кластер, где нужно исключить размеченные уязвимости из отчёта. Откройте Сервисы и репозитории → Установленные сервисы → Модуль сканирования образов контейнеров (
shturval-scanner) → Управлять.Скриншот: переход к shturval-scanner

-
В блоке Спецификация сервиса найдите параметр
trivy.dbRegistryи скопируйте его значение.Скриншот

-
Откройте скачанный файл
vex-updated.jsonи найдитеrepository_url. По умолчанию вrepository_urlуказан registryr.shturval.tech. Заменитеr.shturval.techна значение изtrivy.dbRegistryи сохраните изменения.Пример фрагмента
vex-updated.jsonдо изменений:{ "@context": "https://openvex.dev/ns/v0.2.0", "@id": "https://openvex.dev/docs/public/vex/ee517aa7-57db-4d0b-9909-90aabf452bce", "author": "Лаборатория Числитель", "timestamp": "2025-08-18T08:32:53.692213Z", "version": 1, "statements": [ { "vulnerability": { "name": "CVE-2025-47907" }, "products": [ { "@id": "pkg:oci/csi-snapshotter@sha256%3Aed26fa61da16cefa307ce5761f6208ec4cf88ec4efde20f0d0fba47e83e54f18?arch=amd64&repository_url=r.shturval.tech%2Fsig-storage%2Fcsi-snapshotter" } ] } ] }Пример фрагмента
vex-updated.jsonпосле изменений:{ "@context": "https://openvex.dev/ns/v0.2.0", "@id": "https://openvex.dev/docs/public/vex/ee517aa7-57db-4d0b-9909-90aabf452bce", "author": "Лаборатория Числитель", "timestamp": "2025-08-18T08:32:53.692213Z", "version": 1, "statements": [ { "vulnerability": { "name": "CVE-2025-47907" }, "products": [ { "@id": "pkg:oci/csi-snapshotter@sha256%3Aed26fa61da16cefa307ce5761f6208ec4cf88ec4efde20f0d0fba47e83e54f18?arch=amd64&repository_url=mirror.ip-xx-xx-xx-xx.shturval.link%2Fsig-storage%2Fcsi-snapshotter" } ] } ] }Скриншоты: замена repository_url


Обратите внимание! Если в
trivy.dbRegistryregistry задан с портом, вrepository_urlдвоеточие необходимо заменить на%3A.Пример значения в
shturval-scanner:trivy: dbRegistry: registry:443Тогда в
vex-updated.jsonукажите:repository_url=registry%3A443
Создать ConfigMaps
-
В графическом интерфейсе платформы перейдите в неймспейс
trivy-systemцелевого кластера. Откройте Хранилище → ConfigMaps.Скриншот: ConfigMaps в trivy-system

-
Создайте ConfigMap с именем
trivy-config. В блоке Бинарные ключи загрузите файлtrivy.yaml, созданном на шаге 1 подготовки конфигурации. В окне загрузки в правом нижнем углу выберите Все файлы (.), чтобы найти файлtrivy.yaml, затем нажмите Сохранить.Скриншоты: ConfigMap trivy-config



-
Создайте ConfigMap с именем
openvex. В блоке Бинарные ключи загрузите файлvex-updated.json. В окне загрузки в правом нижнем углу выберите Все файлы (.), чтобы найти файлvex-updated.json, затем нажмите Сохранить.Скриншоты: ConfigMap openvex


-
Убедитесь, что в неймспейсе
trivy-systemпоявились ConfigMapstrivy-configиopenvex.Скриншот: созданные ConfigMaps

Изменить shturval-scanner
-
Подготовьте манифест
ShturvalServicePatchдля применения кshturval-scanner:apiVersion: ops.shturval.tech/v1beta2 kind: ShturvalServicePatch metadata: name: shturval-scanner-vex spec: shturvalServiceConfigName: shturval-scanner customvalues: trivyOperator: scanJobCustomVolumes: - configmap: name: trivy-config name: config - configmap: name: openvex name: openvex scanJobCustomVolumesMount: - mountPath: /trivy.yaml name: config subPath: trivy.yaml - mountPath: /tmp/vex/openvex.json name: openvex subPath: vex-updated.json -
Загрузите подготовленный
ShturvalServicePatchв кластер через импорт манифестов.Скриншот: импорт ShturvalServicePatch

-
После добавления
ShturvalServicePatchоткройте Сервисы и репозитории → Установленные сервисы → Модуль сканирования образов контейнеров (shturval-scanner). -
Переведите модуль в состояние Выкл. Дождитесь удаления всех нагрузок из неймспейса
trivy-system, затем включите модуль, выбрав режим Авто, и сохраните изменения.Скриншот: обновление режима shturval-scanner

Пересоздать отчёты и проверить результат
-
Подключитесь к кластеру в интерфейсе командной строки и удалите ранее сформированные отчёты
VulnerabilityReport:kubectl get vulnerabilityreports -A -o json | jq -r '.items[] | "\(.metadata.namespace) \(.metadata.name)"' | while read namespace name; do kubectl delete VulnerabilityReport "$name" -n "$namespace" doneСкриншот: удаление VulnerabilityReports

Сканирование образов контейнеров перезапустится автоматически.
-
Проверьте запуск сканирования и формирование новых отчётов
VulnerabilityReports:kubectl get vulnerabilityreports -AСкриншот: новые VulnerabilityReports

-
В графическом интерфейсе кластера откройте Безопасность → Анализ образов и убедитесь, что размеченные уязвимости отсутствуют.
Скриншоты: отчёт до и после загрузки VEX


Дополнительно
- CISA — VEX — описание формата и использования.
- Сканирование образов контейнеров — отчёты, критичность, разметка уязвимостей в платформе.