Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
vex-repo-spec — Especificación del Repositorio VEX | Kitploit
Herramientas/GitHubGitHub/aquasecurity/vex-repo-spec
Análisis de VulnerabilidadesDevSecOpsInteligencia de AmenazasSeguridad de Cadena de Suministro
GitHubaquasecurity/vex-repo-spec

vex-repo-spec

Especificación del Repositorio VEX

Ver Repositorio
72hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Especificación del Repositorio VEX v0.1

  • Especificación del Repositorio VEX v0.1
    • 1. Versionado
    • 2. Manifiesto del Repositorio
      • 2.1 Descripción General
      • 2.2 Ubicación del Archivo
      • 2.3 Esquema
      • 2.4 Ejemplo
      • 2.5 Descripciones de Campos y Notas de Uso
        • Campos Principales
        • Subcampos de versions
        • Subcampos de locations
    • 3. Estructura del Repositorio
      • 3.1 Estructura de Archivos
      • 3.2 index.json
      • 3.3 Documentos VEX
      • 3.4 Notas de Uso
        • Estructura de Directorios
        • Contenido del Documento VEX
      • 3.5 Actualización del Repositorio
    • 4. Distribución del Repositorio
      • 4.1 Descripción General
      • 4.2 Formato de Archivo
    • 5. Guías de Implementación del Cliente
      • 5.1 Selección de Versión
      • 5.2 Selección de Ubicación
      • 5.3 Soporte para Múltiples Repositorios
        • Priorización de Repositorios
      • 5.4 Verificación de Actualizaciones
Descargar herramienta
  • 5.5 Estrategias de Eficiencia
  • Las palabras clave "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" y "OPTIONAL" en este documento deben interpretarse tal como se describe en el RFC 2119.

    1. Versionado

    • La Especificación del Repositorio VEX (Vulnerability Exploitability eXchange) DEBE utilizar versionado vX.Y.
    • Para v1.0 y posteriores:
      • X (versión principal) DEBE actualizarse para cambios que rompen la compatibilidad.
      • Y (versión secundaria) DEBE actualizarse para cambios compatibles con versiones anteriores.
    • Para versiones v0.Y, los cambios que rompen la compatibilidad PUEDEN ocurrir con actualizaciones de versión secundaria.

    Al comparar versiones:

    • Las versiones DEBEN compararse numéricamente, no lexicográficamente.
    • Las versiones principales DEBEN compararse primero:
      • Si las versiones principales difieren, la versión con la versión principal más alta se considera más reciente.
      • Si las versiones principales son iguales, proceda a comparar las versiones secundarias.
    • Las versiones secundarias DEBEN compararse solo cuando las versiones principales son iguales:
      • La versión con la versión secundaria más alta se considera más reciente.

    Ejemplos de comparación:

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

    2. Manifiesto del Repositorio

    2.1 Descripción General

    El archivo de manifiesto proporciona metadatos sobre un repositorio de datos VEX. Este archivo DEBE contener la información necesaria para recuperar y actualizar los datos VEX.

    2.2 Ubicación del Archivo

    • Para HTTPS: el archivo de manifiesto DEBE ubicarse en https://<domain>/.well-known/vex-repository.json
    • Para repositorios de GitHub: vex-repository.json DEBE colocarse en el directorio raíz de la rama principal.

    2.3 Esquema

    El esquema JSON del archivo de manifiesto se define aquí.

    2.4 Ejemplo

    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 Descripciones de Campos y Notas de Uso

    Campos Principales

    CampoRequeridoDescripción y Notas de Uso
    name✓El nombre del repositorio.
    description✓Una breve descripción del repositorio.
    versions✓Un arreglo que contiene detalles de las versiones disponibles. Cada objeto del arreglo representa una versión que implementa una versión de la Especificación del Repositorio VEX. Las versiones DEBEN ordenarse en orden ascendente, de la más antigua a la más reciente. Consulte la tabla separada para los subcampos.

    Subcampos de versions

    CampoRequeridoDescripción y Notas de Uso
    spec_version✓La versión de la Especificación del Repositorio VEX implementada (p. ej., "0.1"). El formato DEBE ser "X.Y" según se define en la sección 1.
    locations✓Un arreglo de objetos que describen las ubicaciones de datos VEX. DEBE contener al menos un objeto de ubicación. Consulte la tabla separada para los subcampos.
    update_interval✓El intervalo recomendado de verificación de actualizaciones para los datos VEX de esta versión. Utiliza el formato de duración de Go (p. ej., "1h", "30m", "24h").
    repository_specific-Información adicional específica del repositorio.

    Subcampos de locations

    CampoRequeridoDescripción y Notas de Uso
    url✓Una URL para la ubicación de los datos VEX, que comienza con "https://". El contenido se adhiere a las especificaciones de la estructura del repositorio en la sección 3 y 4. La URL puede incluir una especificación de subdirectorio añadiendo '//' seguido de la ruta del subdirectorio.

    3. Estructura del Repositorio

    3.1 Estructura de Archivos

    El repositorio DEBE tener la siguiente estructura:

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

    Donde <archive_extension> es uno de los formatos de archivo soportados.

    El [optional_subdirectory/] se incluye cuando la URL en el campo locations termina con // seguido de una ruta de subdirectorio. Esto permite flexibilidad en la estructura del repositorio, particularmente al usar diseños de repositorio existentes, como los de los repositorios de GitHub.

    Por ejemplo, si la URL es https://github.com/org/repo/archive/refs/heads/main.tar.gz//repo-main, la estructura de archivos sería:

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

    En este caso, repo-main/ es el directorio raíz del repositorio VEX dentro del archivo tar.gz.

    3.2 index.json

    El archivo index.json sirve como manifiesto del contenido del archivo. DEBE colocarse en el directorio raíz del archivo o en el subdirectorio especificado si se define uno en la URL. El archivo DEBE tener la siguiente estructura:

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

    Descripciones de campos:

    CampoRequeridoDescripción
    updated_at✓Marca de tiempo que indica cuándo se actualizó por última vez este index.json.
    packages✓Arreglo de objetos, cada uno representa un paquete en el repositorio.
    packages[].id✓Identificador del paquete. Actualmente, solo se acepta Package URL (PURL). La versión, los calificadores y la subruta DEBEN omitirse, ya que se incluyen en el documento VEX. Para paquetes de tipo OCI, el calificador repository_url DEBE incluirse en el id.
    packages[].location✓Ruta relativa al archivo VEX de este paquete dentro del archivo. Los clientes DEBEN usar este campo para localizar los archivos VEX de paquetes específicos.
    packages[].format-Formato de los datos VEX. Puede ser "openvex" o "csaf". Si se omite, se asume "openvex".

    El esquema para el archivo de índice se define aquí.

    3.3 Documentos VEX

    La información VEX de cada paquete DEBE almacenarse en un archivo JSON separado, siguiendo la estructura de rutas definida en el archivo index.json. El contenido de estos archivos DEBE adherirse a la especificación de formato VEX (OpenVEX o CSAF VEX) según se especifica en el campo format. Un único documento VEX PUEDE incluir información para diferentes versiones, calificadores y subrutas del mismo paquete.

    Para ejemplos de documentos OpenVEX, consulte la especificación de OpenVEX.

    3.4 Notas de Uso

    Estructura de Directorios

    • Se RECOMIENDA crear estructuras de directorios para los paquetes basadas en su PURL, excluyendo versión, calificadores y subruta. Por ejemplo, un paquete con PURL "pkg:deb/debian/curl" podría almacenarse en "pkg/deb/debian/curl/vex.json".
    • Para paquetes OCI, el calificador repository_url del PURL PUEDE usarse para crear la estructura de directorios. Por ejemplo, un paquete con PURL "pkg:oci/debian@sha256:3e45770a143ee5afd1ebde5a6aea6e32a71d2bt5602f5dac8025db0d9cc19f10?repository_url=docker.io/library/debian" podría almacenarse en "pkg/oci/docker.io/library/debian/vex.json".
    • La ubicación real de los archivos VEX PUEDE definirse libremente en el campo location del archivo index.json, independientemente de la estructura recomendada.
    • Todas las rutas de archivo dentro del archivo DEBEN usar barras diagonales (/) como separadores, independientemente del sistema operativo.
    • Los nombres de paquete en la estructura de directorios DEBEN estar codificados en URL si contienen caracteres especiales.

    Contenido del Documento VEX

    • Un único documento VEX PUEDE incluir información para diferentes versiones, calificadores y subrutas del mismo paquete.
    • Al consultar una versión, calificador o subruta específicos, los clientes DEBEN analizar el documento VEX completo para encontrar la información relevante.

    3.5 Actualización del Repositorio

    Al actualizar el repositorio VEX:

    1. Genere archivos vex.json nuevos o actualizados para los paquetes afectados.
    2. Actualice el archivo index.json para reflejar cualquier cambio, incluida la actualización de la marca de tiempo updated_at.
    3. Cree un nuevo archivo con el contenido actualizado.
    4. Suba el nuevo archivo a la ubicación especificada en el archivo de manifiesto (vex-repository.json).
    5. Actualice la URL de locations correspondiente en el archivo de manifiesto (vex-repository.json) si es necesario.

    4. Distribución del Repositorio

    4.1 Descripción General

    El Repositorio VEX DEBE distribuirse como un archivo que contenga los datos VEX y los metadatos asociados. Este archivo DEBE ser referenciado por el campo locations en el archivo vex-repository.json y es el medio principal de distribución de información VEX.

    4.2 Formato de Archivo

    El archivo DEBE estar en uno de los siguientes formatos:

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

    5. Guías de Implementación del Cliente

    5.1 Selección de Versión

    Al seleccionar una versión del arreglo versions:

    • Los clientes DEBEN elegir una versión que soporten según el campo spec_version.
    • Los clientes DEBEN comparar las versiones según las reglas definidas en la sección 1.
    • Se garantiza que el arreglo versions está ordenado de la más antigua a la más reciente. Los clientes pueden usar este orden para seleccionar eficientemente una versión apropiada.
    • Para versiones v1.0 y posteriores:
      • Los clientes PUEDEN seleccionar la versión más reciente que soporten dentro de la misma versión principal, ya que la compatibilidad con versiones anteriores se mantiene dentro de las versiones principales.
    • Para versiones v0.Y (donde Y es cualquier versión secundaria):
      • Los clientes DEBERÍAN seleccionar una coincidencia exacta de versión.
      • Esto se debe a que las versiones v0.Y PUEDEN incluir cambios que rompen la compatibilidad entre versiones secundarias.
    • Si no hay una versión soportada disponible, los clientes NO DEBEN usar el repositorio y DEBERÍAN notificar al usuario.

    5.2 Selección de Ubicación

    Al tratar con múltiples ubicaciones en el arreglo locations:

    1. Orden de prioridad: los clientes DEBEN priorizar las ubicaciones según su orden en el arreglo. La ubicación listada primero debe intentarse antes de pasar a las ubicaciones siguientes.
    2. Soporte de esquema:
      • Actualmente, solo el esquema "https" está soportado en la especificación.
      • Las versiones futuras de esta especificación pueden introducir esquemas adicionales.
      • Los clientes DEBERÍAN verificar el esquema de URL de cada ubicación y solo usar aquellas con esquemas soportados.
    3. Mecanismo de respaldo: si un cliente encuentra un error con una ubicación, DEBERÍA intentar usar la siguiente ubicación disponible en el arreglo.

    5.3 Soporte para Múltiples Repositorios

    Los clientes DEBERÍAN diseñarse para soportar múltiples repositorios VEX.

    Priorización de Repositorios

    • Los clientes DEBERÍAN implementar un mecanismo de priorización para los repositorios.
    • Cuando múltiples repositorios proporcionan datos VEX para el mismo PURL, los clientes DEBERÍAN seleccionar los datos según la prioridad del repositorio.
    • El método de priorización DEBERÍA ser configurable para permitir a los usuarios ajustarlo según sus necesidades específicas y la confianza en las diferentes fuentes de datos.

    5.4 Verificación de Actualizaciones

    Los clientes DEBERÍAN usar el siguiente proceso para verificar actualizaciones:

    1. Almacene localmente la marca de tiempo de la última actualización exitosa o verificación de actualización.
    2. Al considerar una actualización, recupere el update_interval del archivo vex-repository.json.
    3. Calcule la próxima hora de actualización sumando el update_interval a la marca de tiempo almacenada localmente.
    4. Compare esta hora calculada con la hora actual:
      • Si la hora actual es posterior a la hora calculada, proceda con la verificación de actualizaciones:
        • Realice una solicitud para descargar el contenido más reciente del repositorio.
        • Si hay contenido nuevo disponible, descargue y procese el repositorio actualizado.
        • Actualice la marca de tiempo almacenada localmente con la hora actual.
      • Si la hora actual es anterior a la hora calculada, continúe usando el contenido del repositorio en caché.

    5.5 Estrategias de Eficiencia

    Para una operación eficiente, los clientes PUEDEN implementar las siguientes estrategias:

    1. Usar cabeceras HTTP ETag o Last-Modified al realizar solicitudes para verificar actualizaciones. Esto puede ayudar a minimizar descargas innecesarias cuando el contenido no ha cambiado.
    2. Implementar un intervalo mínimo entre verificaciones de actualizaciones (p. ej., 1 hora) para evitar solicitudes de red excesivas, especialmente en casos donde el update_interval es muy corto.
    3. Permitir la anulación manual de las verificaciones de actualizaciones, habilitando a los usuarios a forzar una verificación inmediata independientemente de la próxima hora de actualización calculada.