
Aplicação web offline de binário único que ingere SBOMs CycloneDX, SPDX e syft, executa um conjunto de scanners de CVE, enriquece os resultados com EPSS, CISA-KEV e nuclei, e exporta SARIF, CSAF e PDF.
Um aplicativo web offline de binário único para investigar arquivos SBOM (Software Bill of Materials). Faça upload de um SBOM ou importe uma pasta deles, analise cada um com um conjunto de ferramentas independentes, revise os achados normalizados em uma única interface local e exporte o resultado em oito formatos. Sem instalação, sem acesso à rede, sem telemetria.
NOASSERTION explícito de um fornecedor de um
campo que está simplesmente ausente.A página inicial (/) lista todos os SBOMs armazenados e permanece utilizável à medida que o corpus
cresce:
log4j ou
openssl encontra todo SBOM que inclui esse componente. A consulta tem
limite de comprimento e é analisada de forma tolerante.Cada ferramenta é opcional em tempo de execução e detectada no PATH (substitua o binário
com SBA_TOOL_<NAME>_BIN). Os achados nunca dependem de uma única ferramenta.
| Ferramenta | Papel |
|---|---|
| syft | Normalizador de SBOM / conversor CycloneDX 1.6 |
| grype | Correspondência de CVE |
| trivy | Scanner de vulnerabilidades |
| osv-scanner | Consultas ao banco de dados OSV |
| bomber | Correspondência independente em conjunto |
| bomdrift | Drift de cadeia de suprimentos / typosquat (SARIF) |
| inspektr | Scanner de vulnerabilidades de SBOM (JSON) |
| shieldbom | Scanner offline de CVE para embarcados/IoT (SARIF) |
| provenant | Licença / copyright / proveniência (ScanCode) |
As primeiras oito ferramentas contribuem com achados de vulnerabilidade em formato CVE;
provenant é diferente — ele reporta proveniência de licença, copyright, detentor e autor,
que o auditor armazena e exibe como seu próprio formato de achado (uma
seção "Licence & provenance" por execução, incluída na exportação Markdown) em vez
de descartá-la.
Os scanners não conseguem ler todos os formatos diretamente: bomber consome apenas
CycloneDX ≤ 1.6, e nenhum dos scanners lê SPDX 3.0 JSON-LD. Em ambos os casos
o auditor normaliza a entrada para CycloneDX via syft convert primeiro, e
faz skip com um motivo documentado quando o syft não está disponível, em vez de deixar uma ferramenta
reportar zero pacotes. O banco de dados de vulnerabilidades do grype é atualizado uma vez por execução
(fora de banda) para que uma obsolescência rotineira seja uma varredura nova, não uma falha.
Após a análise, cada achado em formato CVE é enriquecido com três sinais reais obtidos de um serviço vulnlookup (padrão https://vulnlookup.ndaal.eu):
Cada achado mostra seus valores KEV, Nuclei, EPSS e Source, onde Source aponta de volta para o registro vulnlookup, e os achados são ordenados do mais urgente para o menos: entradas conhecidamente exploradas (KEV) vêm primeiro, depois aquelas com o maior percentil EPSS; achados sem enriquecimento mantêm a ordem em que o analisador os produziu. O enriquecimento viaja para todos os formatos de exportação — SARIF 2.1 / 2.2, Markdown, ODT, DOCX, PDF e CSAF 2.1 / 2.2, onde o CSAF carrega EPSS como métrica nativa e registra CISA-KEV e nuclei como notas — e o formulário de exportação agora marca todos os formatos por padrão.
Configure-o em Settings → Vulnerability enrichment: um botão liga/desliga (habilitado por padrão) e até três fontes vulnlookup, cada uma com uma URL base, uma porta TCP e uma porta QUIC (uma porta em branco é tratada como 443). As fontes 1 e 2 usam por padrão o https://vulnlookup.ndaal.eu público na porta 443; a fonte 3 usa por padrão um loopback https://127.0.0.1 nas próprias portas 8680 (TCP) / 8681 (QUIC) deste host, de modo que um vulnlookup co-localizado é um fallback funcional pronto para uso. As fontes são tentadas em ordem — a primeira é primária, as outras são fallbacks.
#![forbid(unsafe_code)]; a política de lint
nega atalhos que causam panic, aritmética não verificada e indexação não verificada
em código de produção.--encryption-key-file).--tls-key recusa uma chave RSA PKCS#1 (política
no-RSA) e, no Unix, um arquivo de chave legível por grupo ou por todos.GET /export/download serve apenas
nomes com uma extensão reconhecida de exportação ou sidecar de checksum, de modo que um
diretório de exportação mal configurado não possa entregar um arquivo de sistema.cargo audit está limpo.Instale a versão publicada do crates.io — cargo install a compila
a partir do código-fonte, cargo binstall busca o binário pré-compilado da
release do GitLab:
cargo install sbom-auditor # build from source
cargo binstall sbom-auditor # prebuilt GitLab-release binary
Ou compile este checkout diretamente (é necessária uma toolchain Rust estável recente):
cargo build --release
./target/release/sbom-auditor
Em seguida, abra https://127.0.0.1:8680 (o navegador avisará uma vez sobre o certificado autoassinado). A navegação superior executa Home, Upload, Import, Export, Components, Tools, Settings, seguida pelo seletor de tema escuro/claro, menu de idioma e menu de informações à direita. A interface é fornecida em 49 idiomas — inglês, alemão e francês, além de todos os idiomas oficiais europeus, norueguês Nynorsk, os três idiomas sámi oficiais na Noruega (sámi setentrional, lule e meridional), e três adições asiáticas — chinês (中文), hindi (हिन्दी) e urdu (اردو, da direita para a esquerda) — selecionáveis no menu de idiomas (e lembrados por navegador). A seção Supported GUI languages abaixo tem o detalhamento 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
Portas: 8680 serve a API e a interface web sobre TLS 1.3 (HTTP/1.1 + HTTP/2); 8681 está reservada para um futuro listener QUIC / HTTP-3 (ainda não implementado).
A interface web é fornecida em 49 idiomas. Inglês, alemão e francês são o conjunto mantido e escrito por humanos e estão fixados na frente do seletor de idiomas; todos os outros idiomas seguem em ordem alfabética pelo seu nome em inglês.
Três idiomas asiáticos entraram neste ciclo: chinês / 中文 (mandarim,
simplificado), hindi / हिन्दी e urdu / اردو. O urdu é da direita para a esquerda — o
aplicativo renderiza <html dir="rtl"> enquanto ele está selecionado.
Todos os idiomas além dos três fixados são traduzidos por máquina e aguardam revisão nativa; qualquer string ausente de uma tradução recorre automaticamente ao inglês. O seletor na página lista cada idioma pelo seu próprio endônimo de nome nativo e é a lista autoritativa — consulte-o em vez de uma enumeração aqui.
Isso se aplica apenas à interface web. Os relatórios gerados (SARIF, CSAF e a exportação PDF) e a API HTTP permanecem somente em inglês.
cargo nextest run # unit + integration suite
cargo test --doc # doctests
Harnesses adicionais: loom-harness/ (modelos de permutação de concorrência),
test/bruno/ (coleção de API), test/playwright/ (E2E de navegador),
test/example-corpus/ (API + GUI upload→analyze→export sobre o corpus de SBOMs
example/ incluído) e loadtest/ (cenários de carga Goose).
tests/scripts/test_examples_upload_via_api.sh (com um .bats irmão)
faz upload de cada SBOM de example/ contra uma instância em execução e verifica se cada
um produz um SARIF, um CSAF e um PDF via o ZIP transmitido por POST /export/download;
o TLS é verificado para hosts não-loopback e ignorado para o certificado
autoassinado do localhost, e --base-url aponta para qualquer instância (por
exemplo https://sbom.ndaal.eu/). A suíte
test/magnitude/ (Magnitude, *.mag.ts) adiciona verificações visuais orientadas por IA
da ordem da navbar e dos padrões de exportação, além de Start download; ela
complementa os testes determinísticos, precisa de um LLM para rodar e não faz parte
do portão de CI bloqueante. O diretório example/
carrega 651 SBOMs de teste públicos (Git LFS); veja
example/PROVENANCE.md. Veja
documentation/structure.md para o mapa de módulos
e o fluxo de requisições.
O código é licenciado sob Apache-2.0. Os assets de UI incluídos carregam suas próprias licenças
(Bootstrap MIT, htmx 0BSD, Roboto OFL-1.1); veja os sidecars .license
por arquivo em src/static/.