Что такое 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), которые отображаются в разделе Безопасность на странице Анализ образов.

Общий порядок исключения :

  1. Подготовить конфигурацию Trivy и скачать файл vex-updated.json с размеченными уязвимостями в формате VEX.
  2. Создать в кластере ConfigMaps с конфигурацией Trivy и файлом vex-updated.json.
  3. Применить ShturvalServicePatch к shturval-scanner.
  4. Перезапустить модуль сканирования и пересоздать отчёты VulnerabilityReports.

Подготовить конфигурацию и файл VEX

  1. Создайте конфигурационный YAML-файл Trivy с именем trivy.yaml:

    vulnerability:
      vex:
        - /tmp/vex/openvex.json
    
  2. Скачайте файл vex-updated.json для 2.14.0.

  3. Перейдите в кластер, где нужно исключить размеченные уязвимости из отчёта. Откройте Сервисы и репозиторииУстановленные сервисыМодуль сканирования образов контейнеров (shturval-scanner) → Управлять.

    Скриншот: переход к shturval-scanner

    Модуль сканирования образов контейнеров

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

    Скриншот

    Управление shturval-scanner

  5. Откройте скачанный файл vex-updated.json и найдите repository_url. По умолчанию в repository_url указан registry r.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

    Файл vex-updated.json до изменений

    Файл vex-updated.json после изменений

    Обратите внимание! Если в trivy.dbRegistry registry задан с портом, в repository_url двоеточие необходимо заменить на %3A.

    Пример значения в shturval-scanner:

    trivy:
      dbRegistry: registry:443
    

    Тогда в vex-updated.json укажите:

    repository_url=registry%3A443
    

Создать ConfigMaps

  1. В графическом интерфейсе платформы перейдите в неймспейс trivy-system целевого кластера. Откройте ХранилищеConfigMaps.

    Скриншот: ConfigMaps в trivy-system

    ConfigMaps в trivy-system

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

    Скриншоты: ConfigMap trivy-config

    Загрузка trivy.yaml в ConfigMap

    Выбор всех файлов при загрузке trivy.yaml

    ConfigMap trivy-config

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

    Скриншоты: ConfigMap openvex

    Загрузка vex-updated.json в ConfigMap

    ConfigMap openvex

  4. Убедитесь, что в неймспейсе trivy-system появились ConfigMaps trivy-config и openvex.

    Скриншот: созданные ConfigMaps

    ConfigMaps trivy-config и openvex

Изменить shturval-scanner

  1. Подготовьте манифест 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
    
  2. Загрузите подготовленный ShturvalServicePatch в кластер через импорт манифестов.

    Скриншот: импорт ShturvalServicePatch

    Импорт ShturvalServicePatch

  3. После добавления ShturvalServicePatch откройте Сервисы и репозиторииУстановленные сервисыМодуль сканирования образов контейнеров (shturval-scanner).

  4. Переведите модуль в состояние Выкл. Дождитесь удаления всех нагрузок из неймспейса trivy-system, затем включите модуль, выбрав режим Авто, и сохраните изменения.

    Скриншот: обновление режима shturval-scanner

    Обновление режима shturval-scanner

Пересоздать отчёты и проверить результат

  1. Подключитесь к кластеру в интерфейсе командной строки и удалите ранее сформированные отчёты 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

    Сканирование образов контейнеров перезапустится автоматически.

  2. Проверьте запуск сканирования и формирование новых отчётов VulnerabilityReports:

    kubectl get vulnerabilityreports -A
    
    Скриншот: новые VulnerabilityReports

    Проверка VulnerabilityReports

  3. В графическом интерфейсе кластера откройте БезопасностьАнализ образов и убедитесь, что размеченные уязвимости отсутствуют.

    Скриншоты: отчёт до и после загрузки VEX

    Анализ образов до загрузки VEX

    Анализ образов после загрузки VEX


Дополнительно