
App web offline in singolo binario che importa SBOM CycloneDX, SPDX e syft, esegue un insieme di scanner CVE, arricchisce i risultati con EPSS, CISA-KEV e nuclei ed esporta in SARIF, CSAF e PDF.
Un'applicazione web offline a binario singolo per analizzare file SBOM (Software Bill of Materials). Carica un SBOM o importa una cartella di essi, analizza ciascuno con un insieme di strumenti indipendenti, esamina i risultati normalizzati in un'unica interfaccia locale ed esporta il risultato in otto formati. Nessuna installazione, nessun accesso alla rete, nessuna telemetria.
NOASSERTION esplicito di un fornitore
da un campo semplicemente assente.La pagina iniziale (/) elenca ogni SBOM memorizzato e rimane utilizzabile
man mano che il corpus cresce:
log4j o openssl trova ogni
SBOM che include quel componente. La query ha una lunghezza massima ed è
analizzata in modo permissivo.Ogni strumento è opzionale a runtime e viene rilevato nel PATH (sovrascrivi
il binario con SBA_TOOL_<NAME>_BIN). I risultati non dipendono mai da un
singolo strumento.
| Strumento | Ruolo |
|---|---|
| syft | Normalizzatore SBOM / convertitore CycloneDX 1.6 |
| grype | Corrispondenza CVE |
| trivy | Scanner di vulnerabilità |
| osv-scanner | Ricerche nel database OSV |
| bomber | Corrispondenza indipendente d'insieme |
| bomdrift | Drift della supply-chain / typosquat (SARIF) |
| inspektr | Scanner di vulnerabilità SBOM (JSON) |
| shieldbom | Scanner CVE offline per embedded/IoT (SARIF) |
| provenant | Licenza / copyright / provenienza (ScanCode) |
I primi otto strumenti contribuiscono con risultati di vulnerabilità in
forma di CVE; provenant è diverso — riporta la provenienza di licenza,
copyright, titolare e autore, che l'auditor memorizza e visualizza come una
propria forma di risultato (una sezione "Licence & provenance" per esecuzione,
inclusa nell'esportazione Markdown) anziché scartarla.
Gli scanner non riescono a leggere direttamente ogni formato: bomber
consuma solo CycloneDX ≤ 1.6, e nessuno degli scanner legge SPDX 3.0 JSON-LD.
In entrambi i casi l'auditor normalizza prima l'input in CycloneDX tramite
syft convert, e salta con una motivazione documentata quando syft non è
disponibile anziché lasciare che uno strumento riporti zero pacchetti. Il
database delle vulnerabilità di grype viene aggiornato una volta per esecuzione
(fuori banda), così una consueta obsolescenza è una scansione nuova, non una
fallita.
Dopo l'analisi, ogni risultato in forma di CVE viene arricchito con tre segnali reali prelevati da un servizio vulnlookup (predefinito https://vulnlookup.ndaal.eu):
Ogni risultato mostra i suoi valori KEV, Nuclei, EPSS e Source, dove Source rimanda al record vulnlookup, e i risultati sono ordinati dal più urgente: le voci note come sfruttate (KEV) in testa, poi quelle con il percentile EPSS più alto; i risultati senza arricchimento mantengono l'ordine in cui l'analizzatore li ha prodotti. L'arricchimento viaggia in ogni formato di esportazione — SARIF 2.1 / 2.2, Markdown, ODT, DOCX, PDF e CSAF 2.1 / 2.2, dove CSAF porta EPSS come metrica nativa e registra CISA-KEV e nuclei come note — e il modulo di esportazione ora seleziona ogni formato per impostazione predefinita.
Configuralo in Settings → Vulnerability enrichment: un interruttore on/off (abilitato per impostazione predefinita) e fino a tre sorgenti vulnlookup, ciascuna con un URL di base, una porta TCP e una porta QUIC (una porta vuota è trattata come 443). Le sorgenti 1 e 2 predefinite sono la pubblica https://vulnlookup.ndaal.eu sulla porta 443; la sorgente 3 predefinita è un loopback https://127.0.0.1 sulle porte 8680 (TCP) / 8681 (QUIC) di questo host, così un vulnlookup co-locato è un fallback funzionante fin da subito. Le sorgenti vengono provate in ordine — la prima è primaria, le altre sono fallback.
#![forbid(unsafe_code)];
la policy dei lint vieta scorciatoie che causano panic, aritmetica non
controllata e indicizzazione non controllata nel codice di produzione.--encryption-key-file).--tls-key rifiuta una chiave RSA
PKCS#1 (policy no-RSA) e, su Unix, un file di chiave leggibile da gruppo o da
tutti.GET /export/download serve solo nomi con un'estensione di esportazione o di
sidecar di checksum riconosciuta, così una directory di esportazione
malconfigurata non può distribuire un file di sistema.cargo audit è
pulito.Installa la release pubblicata da crates.io — cargo install la compila dai
sorgenti, cargo binstall recupera il binario precompilato dalla release
GitLab:
cargo install sbom-auditor # build from source
cargo binstall sbom-auditor # prebuilt GitLab-release binary
Oppure compila direttamente questo checkout (è richiesta una toolchain Rust stabile recente):
cargo build --release
./target/release/sbom-auditor
Poi apri https://127.0.0.1:8680 (il browser avviserà una volta riguardo al certificato autofirmato). La navigazione in alto esegue Home, Upload, Import, Export, Components, Tools, Settings, seguiti dall'interruttore di tema scuro/chiaro, dal menu della lingua e dal menu info sulla destra. L'interfaccia è disponibile in 49 lingue — inglese, tedesco e francese più ogni lingua ufficiale europea, il norvegese Nynorsk, le tre lingue sami ufficiali in Norvegia (sami settentrionale, di Lule e meridionale) e tre aggiunte asiatiche — cinese (中文), hindi (हिन्दी) e urdu (اردو, da destra a sinistra) — selezionabili dal menu della lingua (e ricordate per browser). La sezione Supported GUI languages qui sotto contiene la ripartizione completa.
--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
Porte: 8680 serve l'API e l'interfaccia web su TLS 1.3 (HTTP/1.1 + HTTP/2); 8681 è riservata a un futuro listener QUIC / HTTP-3 (non ancora implementato).
L'interfaccia web è disponibile in 49 lingue. Inglese, tedesco e francese sono l'insieme mantenuto e scritto da esseri umani ed è fissato in testa al selettore di lingua; ogni altra lingua segue in ordine alfabetico secondo il suo nome inglese.
Tre lingue asiatiche si sono aggiunte in questo ciclo: cinese / 中文
(mandarino, semplificato), hindi / हिन्दी e urdu / اردو. L'urdu è da destra a
sinistra — l'applicazione renderizza <html dir="rtl"> mentre è selezionato.
Ogni lingua oltre le tre fissate è tradotta automaticamente e in attesa di revisione madrelingua; qualsiasi stringa mancante da una traduzione ricade automaticamente sull'inglese. Il selettore nella pagina elenca ogni lingua con il proprio endonimo nativo ed è l'elenco autorevole — consultalo anziché un'enumerazione qui.
Questo vale solo per l'interfaccia web. I report generati (SARIF, CSAF e l'esportazione PDF) e l'API HTTP rimangono solo in inglese.
cargo nextest run # unit + integration suite
cargo test --doc # doctests
Harness aggiuntivi: loom-harness/ (modelli di permutazione della
concorrenza), test/bruno/ (collezione API), test/playwright/ (E2E del
browser), test/example-corpus/ (API + GUI upload→analyze→export sul corpus
SBOM example/ incluso) e loadtest/ (scenari di carico Goose).
tests/scripts/test_examples_upload_via_api.sh (con un .bats gemello)
carica ogni SBOM di example/ contro un'istanza in esecuzione e verifica che
ciascuno produca un SARIF, un CSAF e un PDF tramite lo ZIP di POST /export/download in streaming; TLS è verificato per host non-loopback e
saltato per il certificato autofirmato di localhost, e --base-url punta a
qualsiasi istanza (per esempio https://sbom.ndaal.eu/). La suite
test/magnitude/ (Magnitude, *.mag.ts) aggiunge controlli visivi guidati
dall'IA sull'ordine della navbar e sui valori predefiniti di esportazione più
Start download; integra i test deterministici, richiede un LLM per essere
eseguita e non fa parte del gate CI bloccante. La directory example/
contiene 651 SBOM di test pubblici (Git LFS); vedi
example/PROVENANCE.md. Vedi
documentation/structure.md per la mappa dei
moduli e il flusso delle richieste.
Il codice è concesso in licenza Apache-2.0. Le risorse UI incluse portano le
proprie licenze (Bootstrap MIT, htmx 0BSD, Roboto OFL-1.1); vedi i sidecar
.license per file sotto src/static/.