Generar un SBOM para el CRA: herramientas, formatos, CI/CD

Guía práctica para generar un SBOM para el cumplimiento del CRA: herramientas de código abierto, elección de formato e integración automatizada en pipelines.

Equipo CRA Evidence Publicado 5 de febrero de 2026 Actualizado 26 de junio de 2026
Un artefacto compilado escaneado en un documento SBOM que lista componentes, transferido luego a la monitorización continua
En este artículo

El CRA requiere una lista de componentes de software. Todos los artículos de la competencia te dicen esto. Ninguno te muestra cómo generar uno.

Esta guía cubre herramientas de código abierto, selección de formatos e integración CI/CD, sin dependencia de proveedores.

Resumen

  • El CRA requiere SBOMs legibles por máquina que cubran «al menos las dependencias de nivel superior»
  • Formatos recomendados: CycloneDX 1.4+ o SPDX 2.3+ (según BSI TR-03183)
  • Herramientas de código abierto: Syft (imágenes/sistemas de archivos), Trivy (contenedores), cdxgen (código fuente)
  • Integra la generación de SBOM en CI/CD para actualizaciones automáticas
  • La calidad importa: los campos mínimos incluyen nombre del paquete, versión, proveedor, hash, licencia

Pipeline CI/CD de SBOM

Automatiza las seis etapas para que cada lanzamiento produzca un SBOM nuevo y firmado.

1
Código

El commit activa el pipeline en el merge a main o en el push de una etiqueta de versión.

EntradaCódigo fuente + archivos de bloqueo

2
Compilar

La imagen de contenedor o el binario se ensambla a partir de dependencias bloqueadas.

EntradaArtefacto compilado

3
Generar

Syft, Trivy o cdxgen escanea el artefacto y produce un archivo CycloneDX o SPDX.

Salidasbom.cdx.json

4
Firmar

Cosign firma el archivo SBOM y produce un bundle sigstore con la firma y el certificado.

Salidasbom.cdx.json.sigstore.json

5
Almacenar

El SBOM se archiva en los artefactos de CI o se sube a CRA Evidence junto a la etiqueta del lanzamiento.

SalidaConservado 10 años

6
Monitorizar

El SBOM almacenado se reescanea con nuevas CVE; las alertas se activan cuando nuevas vulnerabilidades coinciden con componentes.

ContinuoAlertas de vulnerabilidades

Lo que el CRA realmente requiere

Empecemos con lo que dice el Reglamento. El Anexo I, Parte II del CRA exige que los fabricantes:

«identificarán y documentarán las vulnerabilidades y los componentes presentes en el producto con elementos digitales, también mediante la elaboración de una nomenclatura de materiales de los programas informáticos en un formato comúnmente utilizado y legible por máquina, que incluya, como mínimo, las dependencias de máximo nivel del producto»

Puntos clave:

  • Formato legible por máquina: no un PDF, no una hoja de cálculo, sino datos estructurados
  • Al menos dependencias de nivel superior: el alcance mínimo, aunque más es mejor
  • No se requiere que sea público: se proporciona a las autoridades bajo petición
  • Debe actualizarse: con cada lanzamiento, parche o cambio de componente

El CRA no exige un formato específico, pero los esfuerzos de estandarización apuntan claramente a CycloneDX y SPDX.

El SBOM forma parte de la documentación técnica del CRA bajo el Anexo VII. Los fabricantes deben elaborar esa documentación antes de introducir un producto en el mercado y mantenerla a disposición de las autoridades de vigilancia del mercado durante al menos 10 años, o durante el período de soporte, el plazo que sea mayor (Art. 13(13)). Un SBOM almacenado localmente sin vínculo con una versión específica del producto no satisface este requisito. Debe ser recuperable, versionado y vinculado a la versión del producto que describe.

Selección de formato: CycloneDX vs SPDX

Dos formatos dominan el panorama de SBOM. Ambos son aceptables para el cumplimiento del CRA.

CycloneDX

Origen: proyecto OWASP, orientado a la seguridad Versión actual: 1.6 (1.4+ recomendado para CRA) Mejor para: seguridad y gestión de vulnerabilidades

Puntos fuertes:

  • Soporte nativo de VEX (Vulnerability Exploitability eXchange)
  • Diseñado para casos de uso de seguridad
  • Especificación más ligera, más fácil de implementar
  • Ecosistema de herramientas sólido
  • Vinculación directa con CVE/vulnerabilidades

Ejemplo JSON:

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.5",
  "version": 1,
  "components": [
    {
      "type": "library",
      "name": "lodash",
      "version": "4.17.21",
      "purl": "pkg:npm/lodash@4.17.21",
      "hashes": [
        {
          "alg": "SHA-256",
          "content": "cc6d..."
        }
      ],
      "licenses": [
        {
          "license": {
            "id": "MIT"
          }
        }
      ]
    }
  ]
}

SPDX

Origen: Linux Foundation, orientado al cumplimiento de licencias Versión actual: 2.3; ISO/IEC 5962:2021 estandarizó SPDX 2.2.1 Mejor para: cumplimiento de licencias y revisión legal

Puntos fuertes:

  • Estándar internacional ISO
  • Sintaxis completa de expresión de licencias
  • Sólido en contextos de cumplimiento de código abierto
  • Mayor trayectoria
  • Mejor para escenarios de licencias complejas

Ejemplo JSON:

{
  "spdxVersion": "SPDX-2.3",
  "dataLicense": "CC0-1.0",
  "SPDXID": "SPDXRef-DOCUMENT",
  "name": "my-application",
  "packages": [
    {
      "SPDXID": "SPDXRef-Package-lodash",
      "name": "lodash",
      "versionInfo": "4.17.21",
      "downloadLocation": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "licenseConcluded": "MIT",
      "checksums": [
        {
          "algorithm": "SHA256",
          "checksumValue": "cc6d..."
        }
      ]
    }
  ]
}

¿Cuál elegir?

Caso de uso Recomendación
Enfoque principal en seguridad/vulnerabilidades CycloneDX
Enfoque principal en cumplimiento de licencias SPDX
Necesitas integración VEX CycloneDX
Empresa con herramientas SPDX existentes SPDX
Mercado alemán (BSI TR-03183) Cualquiera (ambos recomendados)
Empezando desde cero, sin preferencia CycloneDX (más simple, orientado a seguridad)

Para el cumplimiento del CRA, cualquier formato funciona. Elige uno y sé coherente.

Herramientas de generación de SBOM de código abierto

Sin dependencia de proveedores requerida. Estas herramientas son gratuitas, de código abierto y listas para producción.

Syft (Anchore)

Mejor para: imágenes de contenedores, sistemas de archivos, archivos comprimidos Licencia: Apache 2.0 Formatos de salida: CycloneDX, SPDX, Syft JSON

Instalación:

# Linux/macOS
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

# Homebrew
brew install syft

# Docker
docker pull anchore/syft

Ejemplos de uso:

# Escanear una imagen de contenedor
syft alpine:latest -o cyclonedx-json > sbom.cdx.json

# Escanear un directorio
syft dir:/ruta/al/proyecto -o cyclonedx-json > sbom.cdx.json

# Escanear un archivo comprimido
syft /ruta/al/archivo.tar.gz -o spdx-json > sbom.spdx.json

# Escanear con catalogadores específicos (p. ej., solo Python)
syft dir:. -o cyclonedx-json --select-catalogers python

Ecosistemas soportados: Python, Node.js, Ruby, Java, Go, Rust, PHP, .NET y más.

Trivy (Aqua Security)

Mejor para: imágenes de contenedores con contexto de vulnerabilidades integrado Licencia: Apache 2.0 Formatos de salida: CycloneDX, SPDX, más informes de vulnerabilidades

Instalación:

# Linux (Debian/Ubuntu)
sudo apt-get install trivy

# macOS
brew install trivy

# Docker
docker pull aquasec/trivy

Ejemplos de uso:

# Generar SBOM desde imagen de contenedor
trivy image --format cyclonedx --output sbom.cdx.json alpine:latest

# Generar SBOM desde sistema de archivos
trivy fs --format cyclonedx --output sbom.cdx.json /ruta/al/proyecto

# Generar SBOM con información de vulnerabilidades
trivy image --format cyclonedx --output sbom.cdx.json \
  --scanners vuln nginx:latest

Ventaja: Trivy puede generar SBOMs y escanear vulnerabilidades en un solo paso.

cdxgen (CycloneDX)

Mejor para: análisis de código fuente en muchos lenguajes Licencia: Apache 2.0 Formato de salida: CycloneDX

Instalación:

# npm (requiere Node.js)
npm install -g @cyclonedx/cdxgen

# Docker
docker pull ghcr.io/cyclonedx/cdxgen

Ejemplos de uso:

# Escanear directorio actual
cdxgen -o sbom.json

# Escanear tipo de proyecto específico
cdxgen -t python -o sbom.json

# Escanear con resolución profunda de dependencias
cdxgen --deep -o sbom.json

# Escanear un directorio concreto
cdxgen -o sbom.json /ruta/al/proyecto

Lenguajes soportados: JavaScript, Python, Java, Go, Rust, PHP, Ruby, .NET, C/C++ y más.

Comparativa de herramientas

Característica Syft Trivy cdxgen
Imágenes de contenedor Excelente Excelente Bueno
Código fuente Bueno Bueno Excelente
Escaneo de sistema de archivos Excelente Bueno Bueno
Escaneo de vulnerabilidades No (usa Grype) No
Salida CycloneDX
Salida SPDX No
Velocidad Rápido Medio Medio
Cobertura de lenguajes Muy amplia Amplia Muy amplia

Recomendación: empieza con Syft para la mayoría de los casos. Añade Trivy si necesitas escaneo de vulnerabilidades integrado. Usa cdxgen para proyectos de código fuente complejos.

Firmware y dispositivos embebidos

Las herramientas anteriores funcionan bien para contenedores y gestores de paquetes. Para firmware y dispositivos embebidos (el objetivo principal del CRA), el enfoque es distinto.

Las imágenes de firmware son blobs binarios, no registros de paquetes. El primer paso habitual es extraer el sistema de archivos:

# Extraer el sistema de archivos desde una imagen de firmware
binwalk -Me firmware.bin

# Ejecutar Syft sobre el sistema de archivos extraído
syft dir:_firmware.bin.extracted/squashfs-root -o cyclonedx-json > sbom.cdx.json

Usa binwalk -Me (extracción recursiva) en lugar de -e para imágenes anidadas o comprimidas. La cobertura será menor que para imágenes de contenedor. Los binarios compilados sin símbolos pierden información, y Syft puede no identificar todos los componentes.

Para el análisis a nivel binario de componentes compilados, BLint, cve-bin-tool o EMBA ofrecen una inspección más profunda. Los SDK propietarios y las bibliotecas de código cerrado integradas en el firmware suelen requerir entradas manuales en el SBOM. Documenta el proveedor, la versión y la URL de origen.

Integración CI/CD

La generación manual de SBOM no escala. Intégrala en tu pipeline de compilación.

GitHub Actions

name: Generación de SBOM

on:
  push:
    branches: [main]
  release:
    types: [published]

jobs:
  sbom:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write   # necesario para la firma sin clave con Cosign
    steps:
      - name: Checkout código
        uses: actions/checkout@v4

      - name: Compilar imagen de contenedor
        run: |
          docker build -t myapp:${{ github.sha }} .

      - name: Instalar Syft
        run: |
          curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

      - name: Generar SBOM desde imagen compilada
        run: |
          syft myapp:${{ github.sha }} -o cyclonedx-json > sbom.cdx.json

      - name: Instalar Cosign
        uses: sigstore/cosign-installer@v3

      - name: Firmar SBOM (sin clave)
        run: |
          cosign sign-blob sbom.cdx.json --bundle sbom.cdx.json.sigstore.json --yes

      - name: Subir SBOM y firma como artefactos
        uses: actions/upload-artifact@v4
        with:
          name: sbom
          path: |
            sbom.cdx.json
            sbom.cdx.json.sigstore.json
          retention-days: 90

      # Opcional: subir a CRA Evidence para almacenamiento de cumplimiento a largo plazo
      - name: Subir a CRA Evidence
        if: github.event_name == 'release'
        env:
          CRA_EVIDENCE_TOKEN: ${{ secrets.CRA_EVIDENCE_TOKEN }}
        run: |
          curl -X POST https://api.craevidence.com/api/v1/ci/sbom \
            -H "Authorization: Bearer $CRA_EVIDENCE_TOKEN" \
            -F "file=@sbom.cdx.json" \
            -F "product_id=${{ vars.PRODUCT_ID }}" \
            -F "version=${{ github.ref_name }}"

Nota: el artefacto de CI (retention-days: 90) es para comodidad del desarrollador. Para la retención conforme al CRA durante 10 años, sube a un almacén dedicado de largo plazo en cada lanzamiento. Consulta la sección Retención más abajo.

GitLab CI

generate-sbom:
  stage: build
  image: anchore/syft:latest
  script:
    - syft dir:. -o cyclonedx-json > sbom.cdx.json
  artifacts:
    paths:
      - sbom.cdx.json
    expire_in: 90 days
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
    - if: $CI_COMMIT_TAG

Jenkins

pipeline {
    agent any

    stages {
        stage('Generar SBOM') {
            steps {
                sh '''
                    curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b .
                    ./syft dir:. -o cyclonedx-json > sbom.cdx.json
                '''
            }
        }

        stage('Archivar SBOM') {
            steps {
                archiveArtifacts artifacts: 'sbom.cdx.json', fingerprint: true
            }
        }
    }
}

Integración en el proceso de Docker

Genera el SBOM durante la compilación de Docker:

# Compilación multietapa con generación de SBOM
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Generar SBOM en la etapa de compilación
FROM anchore/syft:latest AS sbom
COPY --from=builder /app /app
RUN syft dir:/app -o cyclonedx-json > /sbom.cdx.json

# Imagen final
FROM node:20-slim
COPY --from=builder /app/dist /app
COPY --from=sbom /sbom.cdx.json /app/sbom.cdx.json
CMD ["node", "/app/index.js"]

Firma del SBOM

El CRA no exige la firma del SBOM, pero la firma certifica que el SBOM no ha sido modificado desde su generación. Los equipos de aprovisionamiento empresarial y los organismos notificados esperan cada vez más una firma verificable junto al archivo SBOM.

Cosign (parte del proyecto Sigstore) es la herramienta estándar:

# Instalar Cosign
brew install cosign

# Firmar un archivo SBOM. Produce un bundle con la firma y el certificado
cosign sign-blob sbom.cdx.json --bundle sbom.cdx.json.sigstore.json

# Verificar más tarde
cosign verify-blob sbom.cdx.json --bundle sbom.cdx.json.sigstore.json \
  --certificate-identity <tu-identidad> \
  --certificate-oidc-issuer <tu-emisor>

Guarda sbom.cdx.json y sbom.cdx.json.sigstore.json juntos. El bundle contiene la firma, el certificado de firma y la entrada en el registro de transparencia Rekor. Cualquier persona con el bundle puede verificar el SBOM sin necesidad de contactarte.

Para CI/CD, Cosign soporta firma sin clave mediante la identidad OIDC del pipeline (GitHub Actions, GitLab CI). Sin claves que gestionar. El ejemplo de GitHub Actions anterior ya incluye esto: el job necesita el permiso id-token: write, y sign-blob admite --yes para ejecutarse sin interacción. Cosign 2.0 y posteriores hacen que la firma sin clave sea el comportamiento por defecto, así que el indicador COSIGN_EXPERIMENTAL ya no es necesario.

Monitorización continua

Un SBOM firmado y almacenado no es la meta final. Se detectan nuevas vulnerabilidades contra componentes que estaban limpios en el momento del lanzamiento. El SBOM almacenado debe reescanearse de forma periódica para que esas CVE salgan a la superficie.

Grype lee un SBOM existente directamente, por lo que el reescaneo no necesita el entorno de compilación original:

name: Reescaneo de SBOM

on:
  schedule:
    - cron: "0 6 * * 1"  # Semanal, lunes 06:00 UTC

jobs:
  rescan:
    runs-on: ubuntu-latest
    steps:
      - name: Obtener el SBOM almacenado
        env:
          SBOM_URL: ${{ vars.SBOM_URL }}
        run: |
          curl -sSfL -o sbom.cdx.json "$SBOM_URL"

      - name: Instalar Grype
        run: |
          curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

      - name: Escanear el SBOM en busca de nuevas CVE
        run: |
          grype sbom:./sbom.cdx.json

CRA Evidence ejecuta este reescaneo automáticamente para cada SBOM subido y te avisa cuando una nueva CVE coincide con un componente, lo que cubre la misma necesidad sin un job programado.

Calidad del SBOM: cumplir TR-03183

La guía técnica alemana BSI TR-03183 extiende los elementos mínimos de NTIA. Aunque no es legalmente exigible en toda la UE, seguir TR-03183 garantiza SBOMs de alta calidad.

Campos requeridos

Campo Requerido por Notas
Nombre del componente NTIA + TR-03183 Identificador del paquete
Versión NTIA + TR-03183 Cadena de versión exacta
Proveedor NTIA + TR-03183 Vendedor o mantenedor
Identificador único NTIA + TR-03183 PURL recomendado
Relación de dependencia NTIA + TR-03183 Directa vs transitiva
Autor del SBOM NTIA + TR-03183 Quién creó el SBOM
Marca de tiempo NTIA + TR-03183 Cuándo se creó el SBOM
Valores hash TR-03183 SHA-256 mínimo
Licencia TR-03183 ID de licencia SPDX
Repositorio fuente TR-03183 URL de VCS si está disponible

Validar la calidad del SBOM

Usa estas herramientas para comprobar tu SBOM:

# Validar formato CycloneDX
npm install -g @cyclonedx/cyclonedx-cli
cyclonedx validate --input-file sbom.cdx.json

# Comprobar campos mínimos con jq
jq '.components[] | select(.version == null or .purl == null)' sbom.cdx.json

# Contar componentes con hashes
jq '[.components[] | select(.hashes != null)] | length' sbom.cdx.json

Mejorar la calidad del SBOM

Si tu SBOM carece de datos:

  1. Usa archivos de bloqueo: package-lock.json, Pipfile.lock, go.sum contienen más metadatos
  2. Escanea artefactos compilados: más completo que los escaneos solo del código fuente
  3. Combina herramientas: distintas herramientas encuentran distintos componentes
  4. Añade entradas manuales: para componentes comerciales o internos

Mantener los SBOMs actualizados

Un SBOM es una instantánea. Debe actualizarse para seguir siendo útil.

Cuándo regenerar

  • En cada lanzamiento (mayor, menor, parche)
  • Tras actualizaciones de dependencias
  • Tras parches de seguridad
  • Cuando cambia la configuración de compilación

Estrategia de versioning

producto-v1.0.0-sbom.cdx.json
producto-v1.0.1-sbom.cdx.json
producto-v1.1.0-sbom.cdx.json

O usando marcas de tiempo:

producto-sbom-2026-01-15T10-30-00Z.cdx.json

Retención

La retención de 10 años es una obligación legal

El artículo 13(13) exige que los fabricantes mantengan la documentación técnica a disposición de las autoridades de vigilancia del mercado durante al menos 10 años desde que el producto se introduce en el mercado, o durante el período de soporte, el plazo que sea mayor. El SBOM forma parte de esa documentación, por lo que el mismo plazo se le aplica.

La retención del artefacto de CI (90 días en los ejemplos anteriores) es para comodidad del desarrollador, no para cumplimiento. El requisito de 10 años necesita un almacén dedicado de largo plazo. CRA Evidence está diseñado específicamente para ello: almacenamiento versionado de SBOMs con reescaneo de vulnerabilidades y exportación de archivos técnicos, vinculado a cada lanzamiento del producto.

Si prefieres alojarlo tú mismo, cualquier almacén de objetos principal funciona una vez que activas los controles adecuados:

Almacén de objetos Controles a activar
Amazon S3 Control de versiones, políticas de ciclo de vida, Object Lock, controles de acceso
Azure Blob Storage Políticas de inmutabilidad, gestión de niveles de acceso
Google Cloud Storage Políticas de retención, control de versiones de objetos

Una política de ciclo de vida sola no basta. El almacén también debe soportar control de versiones, controles de acceso e idealmente inmutabilidad para satisfacer los requisitos de auditoría.

Errores comunes

Generación puntual del SBOM

Problema: crear un SBOM una sola vez y no actualizarlo.

Solución: automatiza la generación de SBOM en CI/CD. Cada compilación debe producir un SBOM nuevo.

Dependencias transitivas ausentes

Problema: el SBOM solo lista las dependencias directas, sin los paquetes anidados.

Solución: usa archivos de bloqueo, escanea artefactos compilados, activa las opciones de escaneo profundo.

Versión de formato incorrecta

Problema: usar CycloneDX 1.3 cuando TR-03183 recomienda 1.4+.

Solución: comprueba la versión de salida de tu herramienta. Actualiza las herramientas con regularidad.

Sin valores hash

Problema: los componentes sin hashes criptográficos no se pueden verificar.

Solución: asegúrate de que tu herramienta incluye hashes. Syft y Trivy añaden hashes SHA-256 cuando pueden leer los archivos del componente.

Creación manual

Problema: crear SBOMs a mano es propenso a errores e insostenible.

Solución: automatiza siempre. Las entradas manuales solo para componentes que las herramientas no detectan.

Ignorar los componentes internos

Problema: documentar solo las dependencias de código abierto, no el código propietario.

Solución: los componentes internos también necesitan documentación. Añádelos manualmente o configura las herramientas adecuadamente.

Lista de verificación de implementación de SBOM

Selección de formato
  • CycloneDX 1.4+ o SPDX 2.3+ elegido.
  • Formato JSON seleccionado (legible por máquina, no PDF ni hoja de cálculo).
  • Decisión de formato documentada para el equipo.

Cualquier formato satisface el CRA. BSI TR-03183 recomienda ambos. Cambiar de formato a mitad del ciclo de vida del producto es costoso, así que decide antes del primer lanzamiento.

Herramientas
  • Herramienta principal seleccionada: Syft, Trivy o cdxgen.
  • Herramienta instalada y probada localmente contra un artefacto real.
  • Salida validada contra el esquema de CycloneDX o SPDX.

Elige la herramienta según el artefacto. La tabla de comparativa muestra la mejor opción para contenedores, árboles de código fuente e imágenes de firmware.

Integración CI/CD
  • Generación de SBOM añadida al pipeline de compilación.
  • Artefactos almacenados con política de retención adecuada.
  • Generación activada en cada etiqueta de lanzamiento, no solo en los pushes a la rama principal.

Un lanzamiento sin SBOM correspondiente es un vacío de cumplimiento desde el primer día. Integra la generación en el pipeline para que el paso no se pueda omitir.

Aseguramiento de calidad
  • Todos los componentes tienen nombre, versión y proveedor.
  • Valores hash presentes en cada componente (SHA-256 mínimo).
  • Información de licencia incluida con identificadores de licencia SPDX.
  • Dependencias transitivas capturadas, no solo las directas.
  • Identificadores PURL usados para cada paquete.

Ejecuta cyclonedx validate y comprueba los hashes ausentes con jq '[.components[] | select(.hashes == null)] | length'.

Operaciones
  • SBOM versionado y nombrado junto al lanzamiento del producto que describe.
  • SBOMs históricos archivados con política de retención de 10 años.
  • Proceso documentado para que cualquier miembro del equipo pueda regenerarlo a demanda.

La retención es una obligación legal, no una tarea de mantenimiento. Mantén cada SBOM histórico vinculado al lanzamiento que describe durante todo el período.

CRA Evidence (opcional)
  • Token de API configurado en los secretos de CI.
  • Subida de SBOM automatizada en el lanzamiento vía CLI o API.
  • Puntuación de calidad TR-03183 revisada tras la primera subida.

CRA Evidence automatiza el reescaneo de vulnerabilidades, la puntuación de calidad y la exportación del expediente técnico con SBOMs integrados.

Preguntas frecuentes

¿El CRA exige un formato de SBOM específico?

No. El CRA exige un formato legible por máquina, pero no impone CycloneDX ni SPDX por su nombre. Ambos formatos satisfacen el Reglamento. BSI TR-03183 recomienda explícitamente CycloneDX 1.4+ o SPDX 2.3+, y cualquiera de los dos es una elección defendible ante los auditores. Elige uno y úsalo de forma coherente en todos los lanzamientos.

¿Hay que incluir las dependencias transitivas?

El texto del CRA dice «al menos las dependencias de nivel superior». Ese es el mínimo legal. BSI TR-03183 recomienda cobertura transitiva completa, y es lo que las autoridades y los clientes esperan cada vez más en la práctica. Escanear artefactos compilados en lugar de manifiestos de código fuente es la forma más sencilla de capturar el árbol de dependencias completo de forma automática.

¿El SBOM tiene que ser público?

No. El CRA no exige divulgación pública. Debes poder proporcionar el SBOM a las autoridades de vigilancia del mercado bajo petición. Compartirlo con clientes o publicarlo abiertamente es opcional y una decisión comercial. Muchos fabricantes proporcionan SBOMs a clientes empresariales como parte de la contratación.

¿Con qué frecuencia hay que actualizar el SBOM?

El CRA no establece una cadencia de calendario. Cada versión del producto debe tener un SBOM actualizado. En la práctica, eso significa regenerar en cada lanzamiento, tras actualizaciones de dependencias, tras parches de seguridad y cuando cambia la configuración de compilación. Automatizar la generación de SBOM en CI/CD convierte esto en automático en lugar de un paso manual que puedes olvidar.

¿Es suficiente un package.json o requirements.txt?

No. Los manifiestos de código fuente no son SBOMs. Un SBOM conforme al CRA debe estar en un formato estructurado legible por máquina (CycloneDX o SPDX), incluir hashes criptográficos para cada componente y reflejar el artefacto compilado en lugar del árbol de código fuente. Un package.json lista las dependencias previstas; un SBOM CycloneDX desde una imagen de contenedor escaneada documenta lo que realmente se ha distribuido.

¿Cuánto tiempo hay que conservar los SBOMs?

Los fabricantes deben conservar la documentación técnica durante al menos 10 años desde que el producto se introduce en el mercado, o durante el período de soporte, el plazo que sea mayor. El SBOM forma parte de esa documentación, así que el plazo de conservación se le aplica igualmente. (Art. 13(13).)

¿Qué hacer si un componente no tiene PURL ni hash?

Añádelo manualmente. Las herramientas omiten los SDK comerciales, las bibliotecas propietarias y los componentes internos que no aparecen en los registros de paquetes públicos. Una entrada manual en el SBOM es válida según el CRA. Un componente no documentado no lo es. Para los componentes de los que no puedes calcular un hash directamente, documenta al menos la ubicación de la fuente y la cadena de versión, y anota el vacío en tu expediente técnico.

Próximos pasos

Qué hacer a continuación

  1. Elige un formato ahora. Opta por CycloneDX 1.5 para proyectos nuevos. Instala Syft y ejecútalo contra tu repositorio principal o imagen de contenedor. Un SBOM funcional en 15 minutos es más útil que una decisión de formato perfecta que tarda una semana.
  2. Añade la generación de SBOM a tu pipeline CI/CD. Usa los ejemplos de GitHub Actions, GitLab CI o Jenkins anteriores. Guarda la salida como artefacto de lanzamiento para que cada versión tenga un SBOM correspondiente desde el momento en que sale.
  3. Valida la calidad. Ejecuta cyclonedx validate y comprueba que cada componente tiene hash y PURL. Los componentes sin hash no superan el listón de TR-03183 y no satisfarán a los auditores.
  4. Conecta con el escaneo de vulnerabilidades. Sube tu SBOM a CRA Evidence o ejecuta Grype contra él. Un SBOM que nunca se escanea te da documentación de cumplimiento, no postura de seguridad.
  5. Planifica ahora la retención de 10 años. Configura las políticas de ciclo de vida de artefactos antes de tener tres años de lanzamientos sin ellas. Aplicar reglas de retención retroactivamente es difícil y a veces imposible.

Requisitos: comprende lo que el CRA requiere para SBOMs en nuestra guía de requisitos SBOM.

Calidad: valida tu SBOM contra el estándar BSI TR-03183.

VEX: añade contexto de vulnerabilidades a tu SBOM con documentos VEX.


Este artículo es solo para fines informativos y no constituye asesoramiento legal. Para orientación específica sobre cumplimiento, consulta con asesores legales cualificados familiarizados con las regulaciones de productos de la UE.

CRA SBOM
Share

¿Se aplica el CRA a tu producto?

Responde 6 preguntas sencillas para saber si tu producto está dentro del ámbito del Reglamento de Ciberresiliencia de la UE. Obtén tu resultado en menos de 2 minutos.

¿Listo para lograr el cumplimiento del CRA?

Empieza a gestionar tus SBOMs y documentación de cumplimiento con CRA Evidence.

Análisis en profundidad de los temas del CRA

Guías permanentes sobre los requisitos, procesos y roles específicos definidos por la Ley de Ciberresiliencia.