Esempio di SBOM commentato riga per riga, per un prodotto con firmware
Una SBOM (Software Bill of Materials, la distinta base del software) è l'elenco dei componenti software contenuti in un prodotto. Il Cyber Resilience Act la rende obbligatoria nella documentazione tecnica, ma non dice che aspetto deve avere. Qui ne costruiamo una, semplificata, per un controllore immaginario, e la leggiamo riga per riga: che cosa c'è, perché c'è, quali errori si vedono più spesso.
Che cos'è, in tre frasi
Una SBOM elenca i componenti software di un prodotto (librerie, sistema operativo, interpreti, driver, moduli di terzi) con nome, versione e fornitore di ciascuno, e dice quali componenti dipendono da quali. È scritta in un formato leggibile da un sistema automatico, così che si possa confrontare con le banche dati delle vulnerabilità senza lavoro manuale. Vale per una versione precisa del prodotto: a ogni nuova versione corrisponde una nuova SBOM.
Il regolamento chiede ai fabbricanti di «redigere una distinta base del software in un formato di uso comune e leggibile da un dispositivo automatico, che includa almeno le dipendenze di primo livello del prodotto» (Allegato I, Parte II, punto 1). Non impone un formato: nella pratica si usano CycloneDX o SPDX, entrambi aperti.
Il prodotto dell'esempio
Un controllore industriale immaginario, «CTRL-14B», firmware versione 3.2.0, con un sistema operativo embedded, un piccolo server web per la configurazione, uno stack di protocollo industriale fornito da terzi e alcune librerie di uso comune. La SBOM reale avrebbe oltre cento componenti; qui ne mostriamo sei, più l'intestazione.
L'intestazione: di che cosa parla questa SBOM
| Campo | Valore nell'esempio | Perché conta |
|---|---|---|
| Formato e versione | CycloneDX 1.6 | Dice al software che la legge come interpretarla. |
| Numero di serie | urn:uuid:… (identificativo univoco) | Distingue questa SBOM da ogni altra, anche dello stesso prodotto. |
| Data di creazione | 2026-10-07T09:12:00Z | Senza data non si sa se la SBOM è aggiornata. |
| Autore / strumento | Nome del fabbricante; strumento di generazione e versione | Indica da dove viene: una SBOM generata dalla build vale più di una compilata a mano. |
| Prodotto descritto | CTRL-14B, firmware 3.2.0, fornitore: il fabbricante | La SBOM vale per questa versione, non per «il CTRL-14B» in generale. |
Errore frequente: SBOM senza data o senza versione del prodotto. Si scopre dopo mesi che nessuno sa più a quale firmware corrisponde.
I componenti, riga per riga
| Componente | Versione | Fornitore | Identificativo | Licenza | Impronta |
|---|---|---|---|---|---|
| Sistema operativo embedded (kernel) | 6.1.112 | progetto open source | pkg:generic/linux@6.1.112 | GPL-2.0 | sha256:… |
| Libreria di cifratura | 3.0.16 | progetto open source | pkg:generic/openssl@3.0.16 | Apache-2.0 | sha256:… |
| Server web integrato | 1.24.0 | progetto open source | pkg:generic/nginx@1.24.0 | BSD-2-Clause | sha256:… |
| Libreria di compressione | 1.3.1 | progetto open source | pkg:generic/zlib@1.3.1 | Zlib | sha256:… |
| Interprete di script | 5.4.6 | progetto open source | pkg:generic/lua@5.4.6 | MIT | sha256:… |
| Stack protocollo industriale | 2.4.1 | fornitore commerciale | pkg:generic/fornitore/stack-ind@2.4.1 | commerciale | sha256:… |
Leggiamo le colonne.
- Nome e versione. Sono il minimo indispensabile. Una vulnerabilità pubblica dice «la libreria X dalla versione 3.0.0 alla 3.0.15 è vulnerabile»: senza la versione esatta non si può rispondere «ci riguarda?».
- Fornitore. Chi mantiene il componente e dove escono i suoi avvisi di sicurezza. Per i componenti commerciali è anche la persona da cui pretendere a sua volta una SBOM.
- Identificativo. Il «purl» (package URL) è un codice standard che permette alle banche dati di riconoscere il componente senza ambiguità. «OpenSSL», «openssl» e «libssl» per un essere umano sono la stessa cosa; per un programma no. Senza identificativi il confronto automatico fallisce in silenzio.
- Licenza. Non serve alla sicurezza ma alla conformità legale del prodotto; costa poco includerla e i clienti la chiedono.
- Impronta (hash). Una firma del file, che permette di verificare che il componente installato sia effettivamente quello dichiarato. La linea guida tedesca BSI TR-03183, riferimento tecnico molto usato dai clienti europei, la chiede tra i campi richiesti per ogni componente, insieme ad autore e data della SBOM, nome, versione, fornitore e dipendenze.
Le dipendenze tra componenti
| Componente | Dipende da | Livello |
|---|---|---|
| CTRL-14B firmware 3.2.0 | kernel, libreria di cifratura, server web, interprete di script, stack protocollo industriale | nessuno |
| Server web integrato | libreria di compressione, libreria di cifratura | primo livello |
| Libreria di compressione | (nessuna) | secondo livello |
Il regolamento chiede «almeno le dipendenze di primo livello»: i componenti che il prodotto usa direttamente. La libreria di compressione, nell'esempio, entra attraverso il server web: è di secondo livello. Qui sta una delle lezioni più importanti: molte vulnerabilità stanno nei componenti indiretti. Una SBOM che si ferma al primo livello soddisfa la lettera del regolamento ma lascia scoperta una parte del rischio. Uno studio del 2026 su circa 77.000 SBOM in circolazione ha trovato che più della metà non dichiara alcuna relazione tra i componenti.
Errore frequente: SBOM «piatta», con l'elenco dei componenti ma senza le relazioni. Si vede che cosa c'è, non da dove viene né che cosa cambia se si aggiorna un pezzo.
Da dove viene una SBOM
Ci sono tre modi di produrla, con qualità molto diverse.
- Dalla build. Gli strumenti che compilano il firmware (per esempio quelli dei sistemi Yocto o Buildroot per i dispositivi embedded) sanno esattamente che cosa hanno incluso: è la SBOM più fedele.
- Dall'analisi del firmware compilato. Strumenti che «aprono» il file binario e riconoscono i componenti dalle loro tracce. Utile quando non si hanno i sorgenti, per esempio per un componente di terzi; meno preciso, con il rischio di componenti non riconosciuti o versioni sbagliate.
- A mano. Una tabella compilata dall'ufficio tecnico. È meglio di nulla, ma invecchia subito e non copre i componenti indiretti.
Studi recenti mostrano che strumenti diversi, sullo stesso software, producono elenchi coerenti tra loro solo in una piccola minoranza di casi. Per questo il punto non è «avere una SBOM», ma sapere quanto è buona: completezza, versioni, identificativi, data, provenienza. Assiduo chiama questo giudizio «maturità della SBOM» (Iniziale, Intermedia, Avanzata o Da verificare) ed è una delle cose che il configuratore stima già dalle prime risposte.
Come si legge senza strumenti
Un file CycloneDX o SPDX è testo: si apre con un editor qualsiasi. Cinque controlli che chiunque può fare in dieci minuti, per esempio su una SBOM ricevuta da un fornitore:
- C'è la data, ed è recente rispetto alla versione del firmware?
- Ogni componente ha una versione precisa, non «3.x» o vuota?
- Ci sono identificativi (purl o simili) e non solo nomi?
- Il numero di componenti è plausibile? Un firmware con sistema operativo e server web non ha dieci componenti: ne ha decine o centinaia.
- Ci sono le dipendenze, o è un elenco piatto?
Dalla generazione all'uso
Una SBOM è utile solo se qualcuno la confronta ogni giorno con le vulnerabilità che escono, valuta quelle che toccano davvero il prodotto, decide e documenta. È il passaggio dal «generare» all'«usare», dove la maggior parte delle aziende si ferma: in un'indagine europea del 2026 il 74% ha automatizzato la generazione delle SBOM, ma solo il 9% ha una gestione matura (ENISA, 2026).
Domande frequenti
Devo pubblicare la SBOM?
No. Fa parte della documentazione tecnica e si consegna all'autorità su richiesta motivata (considerando 77; Allegato VII). Darla ai clienti è una scelta, spesso richiesta dai contratti.
CycloneDX o SPDX?
Il regolamento non sceglie. CycloneDX è oggi il più usato nei contesti di sicurezza e dai fabbricanti europei; SPDX è nato per le licenze ed è altrettanto valido. Conta più la qualità dei dati del formato.
Il mio fornitore mi dà un PDF con l'elenco dei componenti. Va bene?
È un inizio, ma non è «leggibile da un dispositivo automatico» e non si può confrontare con le banche dati senza ricopiarlo. Chiedi un file CycloneDX o SPDX, con versioni e identificativi.
Da dove cominciare
Non serve avere già una SBOM per partire. Il configuratore di Assiduo chiede a che punto sei (formato, copertura, aggiornamento) e, senza caricare file, ti dice se il tuo perimetro rientra nel servizio o se è meglio parlarne. Se non riesci a produrre la SBOM, possiamo aiutarti a crearla.
Fonti: regolamento (UE) 2024/2847, Allegato I Parte II punto 1, Allegato VII, considerando 77, articolo 13 paragrafo 24; BSI TR-03183-2; CycloneDX (ECMA-424) e SPDX (ISO/IEC 5962); ENISA, «SBOM Adoption State of Play 2026»; studi 2026 sulla qualità delle SBOM in circolazione. Leggi anche: la guida alla SBOM.