Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
vex-repo-spec — Спецификация репозитория VEX | Kitploit
Инструменты/GitHubGitHub/aquasecurity/vex-repo-spec
Анализ уязвимостейDevSecOpsРазведка угрозБезопасность Цепочки Поставок
GitHubaquasecurity/vex-repo-spec

vex-repo-spec

Спецификация репозитория VEX

Репозиторий
722 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Спецификация репозитория VEX v0.1

  • Спецификация репозитория VEX v0.1
    • 1. Версионирование
    • 2. Манифест репозитория
      • 2.1 Обзор
      • 2.2 Расположение файла
      • 2.3 Схема
      • 2.4 Пример
      • 2.5 Описание полей и примечания по использованию
        • Основные поля
        • Подполя versions
        • Подполя locations
    • 3. Структура репозитория
      • 3.1 Структура файлов
      • 3.2 index.json
      • 3.3 Документы VEX
      • 3.4 Примечания по использованию
        • Структура каталогов
        • Содержимое документов VEX
      • 3.5 Обновление репозитория
    • 4. Распространение репозитория
      • 4.1 Обзор
      • 4.2 Формат архива
    • 5. Рекомендации по реализации клиента
      • 5.1 Выбор версии
      • 5.2 Выбор расположения
      • 5.3 Поддержка нескольких репозиториев
        • Приоритизация репозиториев
  • 5.4 Проверка обновлений
  • 5.5 Стратегии эффективности
  • Ключевые слова "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" и "OPTIONAL" в данном документе должны интерпретироваться в соответствии с RFC 2119.

    1. Версионирование

    • Спецификация репозитория VEX (Vulnerability Exploitability eXchange) ДОЛЖНА использовать версионирование в формате vX.Y.
    • Для версий v1.0 и более поздних:
      • X (мажорная версия) ДОЛЖНА обновляться при внесении несовместимых изменений (breaking changes).
      • Y (минорная версия) ДОЛЖНА обновляться при обратно совместимых изменениях.
    • Для версий v0.Y несовместимые изменения МОГУТ вноситься с обновлением минорной версии.

    При сравнении версий:

    • Версии ДОЛЖНЫ сравниваться численно, а не лексикографически.
    • Мажорные версии ДОЛЖНЫ сравниваться в первую очередь:
      • Если мажорные версии различаются, версия с большей мажорной версией считается более новой.
      • Если мажорные версии равны, переходите к сравнению минорных версий.
    • Минорные версии ДОЛЖНЫ сравниваться только при равенстве мажорных версий:
      • Версия с большей минорной версией считается более новой.

    Примеры сравнения:

    • 1.0 < 2.0
    • 1.1 < 1.2
    • 1.10 > 1.2

    2. Манифест репозитория

    2.1 Обзор

    Файл манифеста содержит метаданные о репозитории данных VEX. Этот файл ДОЛЖЕН содержать информацию, необходимую для получения и обновления данных VEX.

    2.2 Расположение файла

    • Для HTTPS: файл манифеста ДОЛЖЕН располагаться по адресу https://<domain>/.well-known/vex-repository.json
    • Для репозиториев GitHub: vex-repository.json ДОЛЖЕН быть размещён в корневом каталоге основной ветки.

    2.3 Схема

    JSON-схема файла манифеста определена здесь.

    2.4 Пример

    root@kitploit:~
    {
      "name": "Example Org VEX Repository",
      "description": "VEX repository for Example Organization",
      "versions": [
        {
          "spec_version": "0.1",
          "locations": [
            {
              "url": "https://example.com/vex-hub/v0/vex-data-v0.tar.gz"
            }
          ],
          "update_interval": "24h",
          "repository_specific": {
            "location": {
              "repository_type": "db",
              "db_type": "bbolt",
              "url": "oci://ghcr.io/example.com/vex-db:0"
            }
          }
        },
        {
          "spec_version": "1.0",
          "locations": [
            {
              "url": "https://example.com/vex-hub/v1/vex-data-v1.tar.gz//subdirectory"
            },
            {
              "url": "https://example.com/vex-api/v1"
            }
          ],
          "update_interval": "1h"
        }
      ]
    }
    

    2.5 Описание полей и примечания по использованию

    Основные поля

    ПолеОбязательноОписание и примечания по использованию
    name✓Название репозитория.
    description✓Краткое описание репозитория.
    versions✓Массив, содержащий сведения о доступных версиях. Каждый объект в массиве представляет версию, реализующую версию Спецификации репозитория VEX. Версии ДОЛЖНЫ быть отсортированы по возрастанию, от самой старой к самой новой. См. отдельную таблицу для подполей.

    Подполя versions

    ПолеОбязательноОписание и примечания по использованию
    spec_version✓Версия Спецификации репозитория VEX, которая реализована (например, "0.1"). Формат ДОЛЖЕН быть "X.Y", как определено в разделе 1.
    locations✓Массив объектов, описывающих расположения данных VEX. ДОЛЖЕН содержать как минимум один объект расположения. См. отдельную таблицу для подполей.
    update_interval✓Рекомендуемый интервал проверки обновлений для данных VEX этой версии. Используется формат длительности Go (например, "1h", "30m", "24h").
    repository_specific-Дополнительная информация, специфичная для данного репозитория.

    Подполя locations

    ПолеОбязательноОписание и примечания по использованию
    url✓URL расположения данных VEX, начинающийся с "https://". Содержимое соответствует требованиям к структуре репозитория, описанным в разделе 3 и 4. URL может включать указание подкаталога путём добавления '//' с последующим путём к подкаталогу.

    3. Структура репозитория

    3.1 Структура файлов

    Репозиторий ДОЛЖЕН иметь следующую структуру:

    root@kitploit:~
    vex-repository.<archive_extension>
    [optional_subdirectory/]
    ├── index.json
    └── pkg/
        ├── <type>/
        │   ├── <namespace>/
        │   │   ├── <name>/
        │   │   │   └── vex.json
        │   │   └── ...
        │   └── ...
        └── ...
    

    Где <archive_extension> — один из поддерживаемых форматов архивов.

    [optional_subdirectory/] включается, когда URL в поле locations заканчивается на //, за которым следует путь к подкаталогу. Это обеспечивает гибкость структуры репозитория, особенно при использовании существующих макетов репозиториев, таких как в репозиториях GitHub.

    Например, если URL — https://github.com/org/repo/archive/refs/heads/main.tar.gz//repo-main, структура файлов будет следующей:

    root@kitploit:~
    main.tar.gz
    └──repo-main/
       ├── index.json
       └── pkg/
           └── ...
    

    В этом случае repo-main/ является корневым каталогом репозитория VEX внутри файла tar.gz.

    3.2 index.json

    Файл index.json служит манифестом содержимого архивного файла. Он ДОЛЖЕН располагаться в корневом каталоге архива или в указанном подкаталоге, если таковой определён в URL. Файл ДОЛЖЕН иметь следующую структуру:

    root@kitploit:~
    {
      "updated_at": "2023-07-04T12:00:00Z",
      "packages": [
        {
          "id": "pkg:deb/debian/curl",
          "location": "pkg/deb/debian/curl/vex.json"
        },
        {
          "id": "pkg:npm/lodash",
          "location": "pkg/npm/lodash/vex.json",
          "format": "csaf"
        }
      ]
    }
    

    Описание полей:

    ПолеОбязательноОписание
    updated_at✓Отметка времени, указывающая, когда этот index.json был обновлён последний раз.
    packages✓Массив объектов, каждый из которых представляет пакет в репозитории.
    packages[].id✓Идентификатор пакета. В настоящее время принимается только Package URL (PURL). Версия, квалификаторы и подпуть ДОЛЖНЫ быть опущены, поскольку они включены в документ VEX. Для пакетов типа OCI квалификатор repository_url ДОЛЖЕН быть включён в id.
    packages[].location✓Относительный путь к файлу VEX данного пакета внутри архива. Клиенты ДОЛЖНЫ использовать это поле для поиска файлов VEX конкретных пакетов.
    packages[].format-Формат данных VEX: "openvex" или "csaf". Если поле опущено, подразумевается "openvex".

    Схема файла индекса определена здесь.

    3.3 Документы VEX

    Информация VEX каждого пакета ДОЛЖНА храниться в отдельном JSON-файле в соответствии со структурой путей, определённой в файле index.json. Содержимое этих файлов ДОЛЖНО соответствовать спецификации формата VEX (OpenVEX или CSAF VEX), как указано в поле format. Один документ VEX МОЖЕТ включать информацию для разных версий, квалификаторов и подпутей одного и того же пакета.

    Примеры документов OpenVEX см. в спецификации OpenVEX.

    3.4 Примечания по использованию

    Структура каталогов

    • РЕКОМЕНДУЕТСЯ создавать структуры каталогов для пакетов на основе их PURL, исключая версию, квалификаторы и подпуть. Например, пакет с PURL "pkg:deb/debian/curl" может храниться в "pkg/deb/debian/curl/vex.json".
    • Для пакетов OCI квалификатор repository_url из PURL МОЖЕТ использоваться для создания структуры каталогов. Например, пакет с PURL "pkg:oci/debian@sha256:3e45770a143ee5afd1ebde5a6aea6e32a71d2bt5602f5dac8025db0d9cc19f10?repository_url=docker.io/library/debian" может храниться в "pkg/oci/docker.io/library/debian/vex.json".
    • Фактическое расположение файлов VEX МОЖЕТ быть свободно определено в поле location файла index.json, независимо от рекомендуемой структуры.
    • Все пути к файлам внутри архива ДОЛЖНЫ использовать прямую косую черту (/) в качестве разделителя, независимо от операционной системы.
    • Имена пакетов в структуре каталогов ДОЛЖНЫ быть URL-закодированы, если они содержат специальные символы.

    Содержимое документов VEX

    • Один документ VEX МОЖЕТ включать информацию для разных версий, квалификаторов и подпутей одного и того же пакета.
    • При запросе конкретной версии, квалификатора или подпути клиенты ДОЛЖНЫ проанализировать весь документ VEX, чтобы найти соответствующую информацию.

    3.5 Обновление репозитория

    При обновлении репозитория VEX:

    1. Создайте новые или обновлённые файлы vex.json для затронутых пакетов.
    2. Обновите файл index.json, чтобы отразить все изменения, включая обновление отметки времени updated_at.
    3. Создайте новый архив с обновлённым содержимым.
    4. Загрузите новый архив в расположение, указанное в файле манифеста (vex-repository.json).
    5. При необходимости обновите соответствующий URL locations в файле манифеста (vex-repository.json).

    4. Распространение репозитория

    4.1 Обзор

    Репозиторий VEX ДОЛЖЕН распространяться в виде архивного файла, содержащего данные VEX и связанные метаданные. Этот архив ДОЛЖЕН быть указан в поле locations файла vex-repository.json и является основным средством распространения информации VEX.

    4.2 Формат архива

    Архивный файл ДОЛЖЕН быть в одном из следующих форматов:

    • tar.gz и tgz
    • tar.bz2 и tbz2
    • tar.xz и txz
    • zip
    • gz
    • bz2
    • xz

    5. Рекомендации по реализации клиента

    5.1 Выбор версии

    При выборе версии из массива versions:

    • Клиенты ДОЛЖНЫ выбрать поддерживаемую версию на основе поля spec_version.
    • Клиенты ДОЛЖНЫ сравнивать версии в соответствии с правилами, определёнными в разделе 1.
    • Гарантируется, что массив versions отсортирован от самой старой к самой новой. Клиенты могут использовать этот порядок для эффективного выбора подходящей версии.
    • Для версий v1.0 и более поздних:
      • Клиенты МОГУТ выбрать самую новую поддерживаемую версию в пределах той же мажорной версии, поскольку обратная совместимость сохраняется внутри мажорных версий.
    • Для версий v0.Y (где Y — любая минорная версия):
      • Клиентам СЛЕДУЕТ выбирать точное совпадение версии.
      • Это связано с тем, что версии v0.Y МОГУТ содержать несовместимые изменения между минорными версиями.
    • Если ни одна поддерживаемая версия недоступна, клиенты НЕ ДОЛЖНЫ использовать репозиторий и ДОЛЖНЫ уведомить пользователя.

    5.2 Выбор расположения

    При работе с несколькими расположениями в массиве locations:

    1. Порядок приоритета: клиенты ДОЛЖНЫ определять приоритет расположений на основе их порядка в массиве. Расположение, указанное первым, следует использовать раньше, чем переходить к последующим расположениям.
    2. Поддержка схем:
      • В настоящее время спецификацией поддерживается только схема "https".
      • Будущие версии этой спецификации могут вводить дополнительные схемы.
      • Клиентам СЛЕДУЕТ проверять схему URL каждого расположения и использовать только те, чьи схемы поддерживаются.
    3. Механизм отката: если клиент столкнулся с ошибкой при работе с одним расположением, ему СЛЕДУЕТ попытаться использовать следующее доступное расположение в массиве.

    5.3 Поддержка нескольких репозиториев

    Клиентов СЛЕДУЕТ проектировать так, чтобы они поддерживали несколько репозиториев VEX.

    Приоритизация репозиториев

    • Клиентам СЛЕДУЕТ реализовать механизм приоритизации репозиториев.
    • Когда несколько репозиториев предоставляют данные VEX для одного и того же PURL, клиентам СЛЕДУЕТ выбирать данные на основе приоритета репозитория.
    • Метод приоритизации СЛЕДУЕТ делать настраиваемым, чтобы пользователи могли адаптировать его под свои конкретные потребности и уровень доверия к различным источникам данных.

    5.4 Проверка обновлений

    Для проверки обновлений клиентам СЛЕДУЕТ использовать следующий процесс:

    1. Сохраняйте локально отметку времени последнего успешного обновления или проверки обновлений.
    2. При рассмотрении необходимости обновления получите update_interval из файла vex-repository.json.
    3. Рассчитайте время следующего обновления, добавив update_interval к локально сохранённой отметке времени.
    4. Сравните рассчитанное время с текущим временем:
      • Если текущее время позже рассчитанного, приступайте к проверке обновлений:
        • Выполните запрос на загрузку последнего содержимого репозитория.
        • Если доступно новое содержимое, загрузите и обработайте обновлённый репозиторий.
        • Обновите локально сохранённую отметку времени, указав текущее время.
      • Если текущее время раньше рассчитанного, продолжайте использовать кэшированное содержимое репозитория.

    5.5 Стратегии эффективности

    Для эффективной работы клиенты МОГУТ реализовать следующие стратегии:

    1. Используйте HTTP-заголовки ETag или Last-Modified при выполнении запросов на проверку обновлений. Это поможет свести к минимуму ненужные загрузки, когда содержимое не изменилось.
    2. Реализуйте минимальный интервал между проверками обновлений (например, 1 час), чтобы избежать чрезмерного количества сетевых запросов, особенно в случаях, когда update_interval очень короткий.
    3. Предусмотрите возможность ручного запуска проверок обновлений, позволяя пользователям принудительно выполнить немедленную проверку независимо от рассчитанного времени следующего обновления.
    Скачать инструмент