Aplicación web offline de binario único que ingiere SBOMs de CycloneDX, SPDX y syft, ejecuta un conjunto de escáneres de CVE, enriquece los hallazgos con EPSS, CISA-KEV y nuclei, y exporta SARIF, CSAF y PDF.
Una aplicación web offline de binario único para investigar archivos SBOM (Software Bill of Materials). Suba un SBOM o importe una carpeta de ellos, analice cada uno con un conjunto de herramientas independientes, revise los hallazgos normalizados en una única interfaz local y exporte el resultado en ocho formatos. Sin instalación, sin acceso a la red, sin telemetría.
NOASSERTION explícito de un proveedor de un
campo que simplemente está ausente.La página de inicio (/) lista cada SBOM almacenado y sigue siendo usable a medida que el corpus
crece:
log4j o
openssl encuentra cada SBOM que incluye ese componente. La consulta tiene
un límite de longitud y se analiza de forma permisiva.Cada herramienta es opcional en tiempo de ejecución y se detecta en PATH (sobrescriba el binario
con SBA_TOOL_<NAME>_BIN). Los hallazgos nunca dependen de una sola herramienta.
| Herramienta | Rol |
|---|---|
| syft | Normalizador de SBOM / conversor a CycloneDX 1.6 |
| grype | Comparador de CVE |
| trivy | Escáner de vulnerabilidades |
| osv-scanner | Consultas a la base de datos OSV |
| bomber | Comparador de conjunto independiente |
| bomdrift | Deriva de cadena de suministro / typosquat (SARIF) |
| inspektr | Escáner de vulnerabilidades de SBOM (JSON) |
| shieldbom | Escáner de CVE embebido/IoT offline (SARIF) |
| provenant | Licencia / copyright / procedencia (ScanCode) |
Las primeras ocho herramientas aportan hallazgos de vulnerabilidad con forma de CVE;
provenant es diferente — informa la procedencia de licencia, copyright, titular y autor,
que el auditor almacena y muestra como su propia forma de hallazgo (una
sección "Licence & provenance" por ejecución, incluida en la exportación a Markdown) en lugar
de descartarla.
Los escáneres no pueden leer todos los formatos directamente: bomber consume solo
CycloneDX ≤ 1.6, y ninguno de los escáneres lee SPDX 3.0 JSON-LD. En ambos casos
el auditor normaliza la entrada a CycloneDX mediante syft convert primero, y
omite con una razón documentada cuando syft no está disponible en lugar de dejar que una herramienta
informe cero paquetes. La base de datos de vulnerabilidades de grype se actualiza una vez por ejecución
(fuera de banda) para que una obsolescencia rutinaria sea un escaneo nuevo, no uno fallido.
Tras el análisis, cada hallazgo con forma de CVE se enriquece con tres señales reales obtenidas de un servicio vulnlookup (por defecto https://vulnlookup.ndaal.eu):
Cada hallazgo muestra sus valores KEV, Nuclei, EPSS y Source, donde Source enlaza de vuelta al registro de vulnlookup, y los hallazgos se ordenan de más urgente a menos: las entradas de explotación conocida (KEV) van primero, luego las que tienen el percentil EPSS más alto; los hallazgos sin enriquecimiento mantienen el orden en que los produjo el analizador. El enriquecimiento viaja a cada formato de exportación — SARIF 2.1 / 2.2, Markdown, ODT, DOCX, PDF y CSAF 2.1 / 2.2, donde CSAF lleva EPSS como métrica nativa y registra CISA-KEV y nuclei como notas — y el formulario de exportación ahora marca cada formato por defecto.
Configúrelo en Settings → Vulnerability enrichment: un interruptor de activación/desactivación (habilitado por defecto) y hasta tres fuentes vulnlookup, cada una con una URL base, un puerto TCP y un puerto QUIC (un puerto en blanco se trata como 443). Las fuentes 1 y 2 por defecto son el público https://vulnlookup.ndaal.eu en el puerto 443; la fuente 3 por defecto es un loopback https://127.0.0.1 en los puertos 8680 (TCP) / 8681 (QUIC) propios de este host, de modo que un vulnlookup co-ubicado es un respaldo funcional desde el principio. Las fuentes se prueban en orden — la primera es la primaria, las otras son respaldos.
#![forbid(unsafe_code)]; la política de lints
deniega atajos que provocan pánico, aritmética no verificada e indexación no verificada
en código de producción.--encryption-key-file).--tls-key rechaza una clave RSA PKCS#1 (política
no-RSA) y, en Unix, un archivo de clave legible por grupo o por todos.GET /export/download sirve solo
nombres con una extensión reconocida de exportación o de archivo auxiliar de suma de verificación, de modo que un
directorio de exportación mal configurado no pueda entregar un archivo del sistema.cargo audit está limpio.Instale la versión publicada desde crates.io — cargo install la compila
desde el código fuente, cargo binstall obtiene el binario precompilado desde la
versión de GitLab:
cargo install sbom-auditor # build from source
cargo binstall sbom-auditor # prebuilt GitLab-release binary
O compile directamente esta copia de trabajo (se requiere una cadena de herramientas Rust estable reciente):
cargo build --release
./target/release/sbom-auditor
Luego abra https://127.0.0.1:8680 (el navegador advertirá una vez sobre el certificado autofirmado). La navegación superior ejecuta Home, Upload, Import, Export, Components, Tools, Settings, seguida del conmutador de tema claro/oscuro, el menú de idioma y el menú de información a la derecha. La interfaz se distribuye en 49 idiomas — inglés, alemán y francés más todos los idiomas oficiales europeos, noruego nynorsk, los tres idiomas sami oficiales en Noruega (sami septentrional, lule y meridional), y tres adiciones asiáticas — chino (中文), hindi (हिन्दी) y urdu (اردو, de derecha a izquierda) — seleccionables desde el menú de idioma (y recordados por navegador). La sección Supported GUI languages a continuación tiene el desglose completo.
--port <PORT> Listen port (default 8680, env SBA_PORT)
--bind <ADDR> Bind address (default 127.0.0.1, env SBA_BIND)
--data-dir <DIR> Data directory (SQLite store + stored SBOMs)
--db <PATH> Database path (default <data-dir>/auditor.db)
--encryption-key-file <F> Enable storage encryption with this 32-byte key
--tls-cert <F> --tls-key <F> Operator certificate instead of self-signed
--allow-non-loopback Permit binding a non-loopback address
--check-update Check gitlab.com for a newer release, then exit
--self-update Download + verify + install the latest release
--help Full option list
Puertos: 8680 sirve la API y la interfaz web sobre TLS 1.3 (HTTP/1.1 + HTTP/2); 8681 está reservado para un futuro listener QUIC / HTTP-3 (aún no implementado).
La interfaz web se distribuye en 49 idiomas. Inglés, alemán y francés son el conjunto mantenido y de autoría humana y están fijados al frente del conmutador de idiomas; todos los demás idiomas siguen en orden alfabético por su nombre en inglés.
Tres idiomas asiáticos se incorporaron en este ciclo: chino / 中文 (mandarín,
simplificado), hindi / हिन्दी y urdu / اردو. El urdu es de derecha a izquierda — la
aplicación renderiza <html dir="rtl"> mientras está seleccionado.
Todos los idiomas más allá de los tres fijados están traducidos automáticamente y pendientes de revisión nativa; cualquier cadena que falte en una traducción recurre automáticamente al inglés. El conmutador en la página lista cada idioma por su propio endónimo de nombre nativo y es la lista autoritativa — consúltelo en lugar de una enumeración aquí.
Esto se aplica solo a la interfaz web. Los informes generados (SARIF, CSAF y la exportación a PDF) y la API HTTP siguen siendo solo en inglés.
cargo nextest run # unit + integration suite
cargo test --doc # doctests
Arnés adicionales: loom-harness/ (modelos de permutación de concurrencia),
test/bruno/ (colección de API), test/playwright/ (E2E de navegador),
test/example-corpus/ (API + GUI subida→análisis→exportación sobre el corpus
de SBOM example/ incluido) y loadtest/ (escenarios de carga Goose).
tests/scripts/test_examples_upload_via_api.sh (con un .bats hermano)
sube cada SBOM de example/ contra una instancia en ejecución y verifica que cada uno
produzca un SARIF, un CSAF y un PDF mediante el ZIP transmitido de POST /export/download;
TLS se verifica para hosts no loopback y se omite para el certificado autofirmado de localhost,
y --base-url apunta a cualquier instancia (por
ejemplo https://sbom.ndaal.eu/). La
suite test/magnitude/ (Magnitude, *.mag.ts) añade comprobaciones visuales impulsadas por IA
del orden de la barra de navegación y los valores predeterminados de exportación más Start download;
complementa las pruebas deterministas, necesita un LLM para ejecutarse y no forma parte
de la puerta de CI bloqueante. El directorio example/
contiene 651 SBOM de prueba públicos (Git LFS); consulte
example/PROVENANCE.md. Consulte
documentation/structure.md para el mapa de módulos
y el flujo de solicitudes.
El código está licenciado bajo Apache-2.0. Los recursos de interfaz incluidos llevan sus propias licencias
(Bootstrap MIT, htmx 0BSD, Roboto OFL-1.1); consulte los archivos auxiliares .license
por archivo bajo src/static/.