Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
vex-repo-spec — Especificação do Repositório VEX | Kitploit
Ferramentas/GitHubGitHub/aquasecurity/vex-repo-spec
Análise de VulnerabilidadesDevSecOpsInteligência de AmeaçasSegurança da Cadeia de Suprimentos
GitHubaquasecurity/vex-repo-spec

vex-repo-spec

Especificação do Repositório VEX

Ver Repositório
72há 2 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Especificação do Repositório VEX v0.1

  • Especificação do Repositório VEX v0.1
    • 1. Versionamento
    • 2. Manifesto do Repositório
      • 2.1 Visão Geral
      • 2.2 Localização do Arquivo
      • 2.3 Esquema
      • 2.4 Exemplo
      • 2.5 Descrições dos Campos e Notas de Uso
        • Campos Principais
        • Subcampos de Versões
        • Subcampos de Localizações
    • 3. Estrutura do Repositório
      • 3.1 Estrutura de Arquivos
      • 3.2 index.json
      • 3.3 Documentos VEX
      • 3.4 Notas de Uso
        • Estrutura de Diretórios
        • Conteúdo do Documento VEX
      • 3.5 Atualizando o Repositório
    • 4. Distribuição do Repositório
      • 4.1 Visão Geral
      • 4.2 Formato do Arquivo
    • 5. Diretrizes de Implementação do Cliente
      • 5.1 Seleção de Versão
      • 5.2 Seleção de Localização
      • 5.3 Suporte a Múltiplos Repositórios
        • Priorização de Repositórios
      • 5.4 Verificando Atualizações
      • 5.5 Estratégias de Eficiência
Baixar ferramenta

As palavras-chave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" e "OPTIONAL" neste documento devem ser interpretadas conforme descrito na RFC 2119.

1. Versionamento

  • A Especificação do Repositório VEX (Vulnerability Exploitability eXchange) DEVE usar versionamento vX.Y.
  • Para v1.0 e posteriores:
    • X (versão principal) DEVE ser atualizado para mudanças que quebram a compatibilidade.
    • Y (versão secundária) DEVE ser atualizado para mudanças compatíveis com versões anteriores.
  • Para versões v0.Y, mudanças que quebram a compatibilidade PODEM ocorrer com atualizações de versão secundária.

Ao comparar versões:

  • Versões DEVEM ser comparadas numericamente, não lexicograficamente.
  • Versões principais DEVEM ser comparadas primeiro:
    • Se as versões principais diferirem, a versão com o número de versão principal maior é considerada mais recente.
    • Se as versões principais forem iguais, prossiga para comparar as versões secundárias.
  • Versões secundárias DEVEM ser comparadas apenas quando as versões principais forem iguais:
    • A versão com o número de versão secundária maior é considerada mais recente.

Exemplos de comparação:

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

2. Manifesto do Repositório

2.1 Visão Geral

O arquivo de manifesto fornece metadados sobre um repositório de dados VEX. Este arquivo DEVE conter informações necessárias para recuperar e atualizar dados VEX.

2.2 Localização do Arquivo

  • Para HTTPS: O arquivo de manifesto DEVE estar localizado em https://<domain>/.well-known/vex-repository.json
  • Para repositórios GitHub: vex-repository.json DEVE ser colocado no diretório raiz do branch principal.

2.3 Esquema

O esquema JSON para o arquivo de manifesto é definido aqui.

2.4 Exemplo

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 Descrições dos Campos e Notas de Uso

Campos Principais

CampoObrigatórioDescrição e Notas de Uso
name✓O nome do repositório.
description✓Uma breve descrição do repositório.
versions✓Uma matriz contendo detalhes das versões disponíveis. Cada objeto na matriz representa uma versão que implementa uma versão da Especificação do Repositório VEX. As versões DEVEM ser ordenadas em ordem crescente, da mais antiga para a mais recente. Consulte a tabela separada para subcampos.

Subcampos de Versões

CampoObrigatórioDescrição e Notas de Uso
spec_version✓A versão da Especificação do Repositório VEX implementada (ex.: "0.1"). O formato DEVE ser "X.Y" conforme definido na seção 1.
locations✓Uma matriz de objetos que descrevem as localizações dos dados VEX. DEVE conter pelo menos um objeto de localização. Consulte a tabela separada para subcampos.
update_interval✓O intervalo recomendado de verificação de atualização para os dados VEX desta versão. Usa o formato de duração do Go (ex.: "1h", "30m", "24h").
repository_specific-Informações adicionais específicas do repositório.

Subcampos de Localizações

CampoObrigatórioDescrição e Notas de Uso
url✓Uma URL para a localização dos dados VEX, começando com "https://". O conteúdo está em conformidade com as especificações de estrutura do repositório na seção 3 e 4. A URL pode incluir uma especificação de subdiretório anexando '//' seguido do caminho do subdiretório.

3. Estrutura do Repositório

3.1 Estrutura de Arquivos

O repositório DEVE ter a seguinte estrutura:

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

Onde <archive_extension> é um dos formatos de arquivo suportados.

O [optional_subdirectory/] é incluído quando a URL no campo locations termina com // seguido de um caminho de subdiretório. Isso permite flexibilidade na estrutura do repositório, especialmente ao usar layouts de repositório existentes, como os de repositórios GitHub.

Por exemplo, se a URL for https://github.com/org/repo/archive/refs/heads/main.tar.gz//repo-main, a estrutura de arquivos seria:

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

Nesse caso, repo-main/ é o diretório raiz do repositório VEX dentro do arquivo tar.gz.

3.2 index.json

O arquivo index.json serve como um manifesto para o conteúdo do arquivo compactado. Ele DEVE ser colocado no diretório raiz do arquivo ou no subdiretório especificado, se houver um definido na URL. O arquivo DEVE ter a seguinte estrutura:

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"
    }
  ]
}

Descrições dos campos:

CampoObrigatórioDescrição
updated_at✓Timestamp que indica quando este index.json foi atualizado pela última vez.
packages✓Matriz de objetos, cada um representando um pacote no repositório.
packages[].id✓Identificador do pacote. Atualmente, apenas Package URL (PURL) é aceito. Versão, qualificadores e subcaminho DEVEM ser omitidos, pois estão incluídos no documento VEX. Para pacotes do tipo OCI, o qualificador repository_url DEVE ser incluído no id.
packages[].location✓Caminho relativo para o arquivo VEX deste pacote dentro do arquivo. Os clientes DEVEM usar este campo para localizar arquivos VEX específicos de pacotes.
packages[].format-Formato dos dados VEX. Pode ser "openvex" ou "csaf". Se omitido, assume-se "openvex".

O esquema para o arquivo de índice é definido aqui.

3.3 Documentos VEX

As informações VEX de cada pacote DEVEM ser armazenadas em um arquivo JSON separado, seguindo a estrutura de caminho definida no arquivo index.json. O conteúdo desses arquivos DEVE estar em conformidade com a especificação de formato VEX (OpenVEX ou CSAF VEX), conforme especificado no campo format. Um único documento VEX PODE incluir informações para diferentes versões, qualificadores e subcaminhos do mesmo pacote.

Para exemplos de documentos OpenVEX, consulte a especificação OpenVEX.

3.4 Notas de Uso

Estrutura de Diretórios

  • É RECOMENDADO criar estruturas de diretórios para pacotes com base em seu PURL, excluindo versão, qualificadores e subcaminho. Por exemplo, um pacote com PURL "pkg:deb/debian/curl" poderia ser armazenado em "pkg/deb/debian/curl/vex.json".
  • Para pacotes OCI, o qualificador repository_url do PURL PODE ser usado para criar a estrutura de diretórios. Por exemplo, um pacote com PURL "pkg:oci/debian@sha256:3e45770a143ee5afd1ebde5a6aea6e32a71d2bt5602f5dac8025db0d9cc19f10?repository_url=docker.io/library/debian" poderia ser armazenado em "pkg/oci/docker.io/library/debian/vex.json".
  • A localização real dos arquivos VEX PODE ser definida livremente no campo location do arquivo index.json, independentemente da estrutura recomendada.
  • Todos os caminhos de arquivo dentro do arquivo DEVEM usar barras normais (/) como separadores, independentemente do sistema operacional.
  • Nomes de pacotes na estrutura de diretórios DEVEM ser codificados por URL se contiverem caracteres especiais.

Conteúdo do Documento VEX

  • Um único documento VEX PODE incluir informações para diferentes versões, qualificadores e subcaminhos do mesmo pacote.
  • Ao consultar uma versão, qualificador ou subcaminho específico, os clientes DEVEM analisar o documento VEX inteiro para encontrar as informações relevantes.

3.5 Atualizando o Repositório

Ao atualizar o repositório VEX:

  1. Gere novos arquivos vex.json ou atualizados para os pacotes afetados.
  2. Atualize o arquivo index.json para refletir quaisquer alterações, incluindo a atualização do timestamp updated_at.
  3. Crie um novo arquivo com o conteúdo atualizado.
  4. Carregue o novo arquivo para a localização especificada no arquivo de manifesto (vex-repository.json).
  5. Atualize a URL locations relevante no arquivo de manifesto (vex-repository.json), se necessário.

4. Distribuição do Repositório

4.1 Visão Geral

O Repositório VEX DEVE ser distribuído como um arquivo contendo os dados VEX e metadados associados. Este arquivo DEVE ser referenciado pelo campo locations no arquivo vex-repository.json e é o principal meio de distribuição das informações VEX.

4.2 Formato do Arquivo

O arquivo DEVE estar em um dos seguintes formatos:

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

5. Diretrizes de Implementação do Cliente

5.1 Seleção de Versão

Ao selecionar uma versão da matriz versions:

  • Os clientes DEVEM escolher uma versão que suportam com base no campo spec_version.
  • Os clientes DEVEM comparar versões de acordo com as regras definidas na seção 1.
  • A matriz versions tem a garantia de estar ordenada da mais antiga para a mais recente. Os clientes podem usar essa ordem para selecionar eficientemente uma versão apropriada.
  • Para versões v1.0 e posteriores:
    • Os clientes PODEM selecionar a versão mais recente que suportam dentro da mesma versão principal, pois a compatibilidade com versões anteriores é mantida dentro das versões principais.
  • Para versões v0.Y (onde Y é qualquer versão secundária):
    • Recomenda-se que os clientes selecionem uma correspondência exata de versão.
    • Isso porque versões v0.Y PODEM incluir mudanças que quebram a compatibilidade entre versões secundárias.
  • Se nenhuma versão suportada estiver disponível, os clientes NÃO DEVEM usar o repositório e recomenda-se que notifiquem o usuário.

5.2 Seleção de Localização

Ao lidar com múltiplas localizações na matriz locations:

  1. Ordem de Prioridade: Os clientes DEVEM priorizar as localizações com base em sua ordem na matriz. A localização listada primeiro deve ser tentada antes de passar para as localizações subsequentes.
  2. Suporte ao Esquema:
    • Atualmente, apenas o esquema "https" é suportado nesta especificação.
    • Versões futuras desta especificação podem introduzir esquemas adicionais.
    • Recomenda-se que os clientes verifiquem o esquema de URL de cada localização e usem apenas aqueles com esquemas suportados.
  3. Mecanismo de Fallback: Se um cliente encontrar um erro com uma localização, recomenda-se que ele tente usar a próxima localização disponível na matriz.

5.3 Suporte a Múltiplos Repositórios

Recomenda-se que os clientes sejam projetados para suportar múltiplos repositórios VEX.

Priorização de Repositórios

  • Recomenda-se que os clientes implementem um mecanismo de priorização para repositórios.
  • Quando múltiplos repositórios fornecerem dados VEX para o mesmo PURL, recomenda-se que os clientes selecionem os dados com base na prioridade do repositório.
  • Recomenda-se que o método de priorização seja configurável para permitir que os usuários ajustem com base em suas necessidades específicas e confiança em diferentes fontes de dados.

5.4 Verificando Atualizações

Recomenda-se que os clientes usem o seguinte processo para verificar atualizações:

  1. Armazene localmente o timestamp da última atualização bem-sucedida ou verificação de atualização.
  2. Ao considerar uma atualização, recupere o update_interval do arquivo vex-repository.json.
  3. Calcule o próximo horário de atualização adicionando o update_interval ao timestamp armazenado localmente.
  4. Compare este horário calculado com o horário atual:
    • Se o horário atual for posterior ao horário calculado, prossiga com a verificação de atualizações:
      • Faça uma solicitação para baixar o conteúdo mais recente do repositório.
      • Se houver novo conteúdo disponível, baixe e processe o repositório atualizado.
      • Atualize o timestamp armazenado localmente com o horário atual.
    • Se o horário atual for anterior ao horário calculado, continue usando o conteúdo do repositório em cache.

5.5 Estratégias de Eficiência

Para uma operação eficiente, os clientes PODEM implementar as seguintes estratégias:

  1. Use cabeçalhos HTTP ETags ou Last-Modified ao fazer solicitações para verificar atualizações. Isso pode ajudar a minimizar downloads desnecessários quando o conteúdo não mudou.
  2. Implemente um intervalo mínimo entre verificações de atualização (ex.: 1 hora) para evitar solicitações de rede excessivas, especialmente nos casos em que o update_interval é muito curto.
  3. Permita a sobreposição manual das verificações de atualização, permitindo que os usuários forcem uma verificação imediata independentemente do próximo horário de atualização calculado.