BSI TR-03183: livelli di qualità SBOM e conformità CRA

Il Regolamento sulla ciberresilienza (CRA) impone un Software Bill of Materials, ma delega i dettagli tecnici ad altri strumenti. Richiede uno SBOM leggibile automaticamente che copra almeno le dipendenze di primo livello del prodotto, e qui la specificità del Regolamento si esaurisce. Nessun elenco di campi. Nessuna versione minima di formato. Nessuno schema per le advisory. L’Ufficio federale tedesco per la sicurezza informatica (BSI) ha colmato questa lacuna con BSI TR-03183, una linea guida tecnica in tre parti che indica versioni esatte di formato, elenca ogni campo obbligatorio e collega la generazione degli SBOM alla pubblicazione delle advisory sulle vulnerabilità. La si consideri come la specifica pratica alla base dell’obbligo normativo, non una norma concorrente.

Sintesi

  • BSI TR-03183 è pubblicata in tre parti: Parte 1 (requisiti generali di ciberresilienza derivanti dal CRA), Parte 2 (SBOM), Parte 3 (segnalazioni e notifiche di vulnerabilità). La Parte 2 v2.1.0 è stata rilasciata il 20 agosto 2025 ed è la linea guida SBOM corrente.
  • TR-03183 richiede CycloneDX versione 1.6 o superiore, oppure SPDX versione 3.0.1 o superiore. Gli altri formati non sono conformi.
  • La specifica organizza i campi dati in tre categorie: Required (sempre obbligatori), Additional (obbligatori quando i dati esistono) e Optional. La versione v2.1.0 non prevede livelli denominati «Basic», «Standard» o «Comprehensive».
  • CSAF 2.0 è il formato raccomandato per le advisory sulle vulnerabilità, e TR-03183 richiede il tag CSAF: nel file security.txt quando si pubblicano documenti CSAF. VEX non è mai imposto: è descritto solo come profilo CSAF.
  • Il BSI considera TR-03183 una soluzione provvisoria: sarà sostituita una volta che saranno pubblicati gli standard armonizzati CEN/CENELEC dell’UE. Fino ad allora è la guida più dettagliata disponibile.
  • I parametri di conformità sono: minimo CycloneDX 1.6, hash SHA-512 per ogni componente distribuibile, metadati di creatore e timestamp a livello di documento SBOM, e una pipeline di advisory CSAF.
v2.1.0
Parte 2 corrente
Rilasciata il 20 agosto 2025
Formato minimo
O SPDX 3.0.1
SHA-512
Hash richiesto
Per ogni componente
3 parti
Struttura del documento
Generale, SBOM, Vulnerabilità

Che cos’è BSI TR-03183

BSI è l’agenzia nazionale tedesca per la cibersicurezza. La sua Linea guida tecnica TR-03183 porta il titolo completo Cyber Resilience Requirements for Manufacturers and Products, con parti numerate e versionate in modo indipendente. La linea guida è rivolta ai fabbricanti che si preparano al Regolamento sulla ciberresilienza dell’UE, traducendo gli obblighi dell’Allegato I del CRA in requisiti tecnici concreti e verificabili.

Le tre parti del documento, con le versioni correnti al momento della redazione:

Parte Versione Pubblicazione Ambito
Parte 1 v0.10.0 12 settembre 2025 Requisiti generali di ciberresilienza derivanti dal CRA, dall’Allegato I, dall’Allegato II e dall’Allegato VII
Parte 2 v2.1.0 20 agosto 2025 Software Bill of Materials (SBOM): formati, campi, generazione e aggiornamenti
Parte 3 v1.0.0 20 agosto 2025 Segnalazioni e notifiche di vulnerabilità, inclusi CVD, security.txt e advisory CSAF

Il BSI inquadra la linea guida come strumento transitorio:

"This Technical Guideline will be superseded in the current form as soon as its content is covered by the corresponding standardisation deliverables under the aforementioned standardisation request."

Questa linea guida sarà sostituita nella forma attuale non appena i suoi contenuti saranno coperti dai risultati di normalizzazione corrispondenti previsti dalla richiesta di normalizzazione citata.

Questa affermazione orienta il modo in cui si dovrebbe considerare TR-03183. Rappresenta la lettura del BSI di come dovrebbero essere strutturati un programma SBOM e di gestione delle vulnerabilità conformi al CRA, mentre gli standard armonizzati CEN/CENELEC sono ancora in fase di elaborazione. Quando questi saranno pubblicati, gli standard armonizzati prevarranno; fino ad allora, TR-03183 è la specifica pubblica più dettagliata allineata all’Allegato I del CRA.

graph LR
    A[BSI TR-03183]
    A --- P1[Parte 1
Requisiti generali
di ciberresilienza] A --- P2[Parte 2
SBOM] A --- P3[Parte 3
Segnalazioni di
vulnerabilità] P2 --- F1[CycloneDX 1.6
o SPDX 3.0.1] P2 --- F2[Campi obbligatori, aggiuntivi
e opzionali] P3 --- C1[CSAF 2.0
avvisi] P3 --- C2[security.txt
tag CSAF] style A fill:#008080,stroke:#005f5f,color:#fff style P1 fill:#e8f4f8,stroke:#008080,color:#333 style P2 fill:#e8f4f8,stroke:#008080,color:#333 style P3 fill:#e8f4f8,stroke:#008080,color:#333 style F1 fill:#f8fafc,stroke:#008080,color:#333 style F2 fill:#f8fafc,stroke:#008080,color:#333 style C1 fill:#f8fafc,stroke:#008080,color:#333 style C2 fill:#f8fafc,stroke:#008080,color:#333

Le lacune del CRA che TR-03183 colma

Si può leggere il CRA dall’inizio alla fine senza scoprire quali campi devono figurare nel documento, quale versione di formato soddisfa l’obbligo, o come pubblicare le advisory risultanti. TR-03183 colma tre lacune specifiche.

Lacuna nel testo del CRA Cosa specifica TR-03183
Il CRA richiede uno SBOM ma non elenca campi dati (Allegato I parte II (1)) TR-03183 enumera i campi Required, Additional e Optional sia per il documento SBOM che per ogni componente
Il CRA indica che i formati devono essere «comunemente usati e leggibili automaticamente» senza nominarne alcuno TR-03183 li nomina: «CycloneDX, versione 1.6 o superiore» o «System Package Data Exchange (SPDX), versione 3.0.1 o superiore»
Il CRA richiede la segnalazione delle vulnerabilità attivamente sfruttate al CSIRT coordinatore e a ENISA senza specificare un formato pubblico per le advisory (Articolo 14) TR-03183 allinea le advisory a CSAF 2.0 e fa riferimento alla norma ISO/IEC 20153:2025

Per il dettaglio degli obblighi del CRA relativi a questi aspetti, si consulti Requisiti SBOM del CRA. Per l'orologio di segnalazione dell'Articolo 14 che rende operativi i dati aggiornati sui componenti, si consulti segnalazione di vulnerabilità e incidenti CRA.

Campi Required, Additional e Optional

La versione v2.1.0 di TR-03183 non utilizza le parole «Basic», «Standard» o «Comprehensive». Qualsiasi diagramma o sintesi di un fornitore che presenti tre «livelli di qualità» con queste denominazioni introduce una struttura che la specifica non contiene. Il modello di conformità della v2.1.0 è binario a livello di campo: un campo è Required (sempre presente), Additional (obbligatorio quando i dati esistono) o Optional.

Le tre categorie di campi:

Categoria Significato Esempi
Required per lo SBOM stesso Campi a livello di documento che DEVONO essere sempre presenti Creatore dello SBOM, Timestamp
Required per ogni componente Campi a livello di componente che DEVONO essere sempre presenti Nome del componente, Versione del componente, Licenze di distribuzione, Hash (SHA-512), Dipendenze da altri componenti, Nome file, Proprietà executable, Proprietà archive, Proprietà structured, Creatore del componente
Additional per ogni componente Obbligatori se i dati esistono, omessi altrimenti URI del codice sorgente, URI della forma distribuibile del componente, Altri identificatori univoci (CPE, purl), Licenze originali
Optional per ogni componente POSSONO essere inclusi Licenza effettiva, Hash del codice sorgente, URL del file security.txt

TR-03183 impone anche la risoluzione ricorsiva delle dipendenze: la risoluzione va eseguita per ogni componente incluso nell’ambito della fornitura, non solo per le dipendenze immediate. Questa è la sua risposta al vago limite delle «dipendenze di primo livello» previsto dall’Allegato I parte II (1) del CRA: percorrere l’intero albero delle dipendenze.

La v2.1.0 non contiene alcun elenco di livelli «Basic / Standard / Comprehensive»

Versioni precedenti di sintesi pubbliche (incluse alcune nelle comunicazioni passate del BSI stesso) presentavano TR-03183 come una specifica con tre livelli di qualità con quei nomi. La v2.1.0 non utilizza questa tassonomia. Se la propria checklist di audit fa riferimento a «Tier 1», «Comprehensive tier» o simili, sta facendo riferimento a un modello che non corrisponde più alla specifica pubblicata. Aggiornare alle categorie Required / Additional / Optional.

Requisiti campo per campo

I campi candidati che la maggior parte dei team richiede, con la rispettiva categoria nella v2.1.0.

Campo Categoria Note
Creatore dello SBOM Required (a livello SBOM) Email o URL del produttore
Timestamp Required (a livello SBOM) ISO 8601
Nome del componente Required Sempre presente per ogni voce
Versione del componente Required Versione esatta, non un intervallo
Creatore del componente Required Corrisponde a «Supplier» nel linguaggio precedente
Nome file del componente Required Spesso assente nell’output predefinito degli strumenti
Dipendenze da altri componenti Required Risolte ricorsivamente
Licenze di distribuzione Required Licenze nella forma distribuita
Hash del componente distribuibile Required SHA-512
Proprietà executable Required Booleano: il componente è eseguibile?
Proprietà archive Required Booleano: il componente è un archivio?
Proprietà structured Required Booleano: indicatore di payload strutturato
URI del codice sorgente Additional Obbligatorio se noto
URI del componente distribuibile Additional Obbligatorio se noto
Altri identificatori univoci (CPE, purl) Additional Obbligatori se disponibili; non incondizionatamente richiesti
Licenze originali Additional Licenza upstream prima della distribuzione
Licenza effettiva Optional Risultato della riconciliazione delle licenze
Hash del codice sorgente Optional Hash del sorgente prima della compilazione
URL di security.txt Optional Puntatore al punto di accesso per la divulgazione delle vulnerabilità

La riga che sorprende maggiormente molti team è quella degli altri identificatori univoci (CPE, purl). I team trattano gli URL di pacchetto come chiave primaria di uno SBOM. In TR-03183 v2.1.0, il purl ricade nella categoria Additional, obbligatorio solo quando i dati esistono. L’identificatore di componente incondizionato è l’hash SHA-512 dell’artefatto distribuibile, abbinato a nome e versione. Se gli strumenti utilizzati non riescono a calcolare il purl per una libreria interna privata, la conformità non viene compromessa. Se non riescono a calcolare l’hash SHA-512, sì. Si consulti Errori comuni negli SBOM per le lacune relative ai campi.

Supporto CycloneDX e SPDX

TR-03183 indica i formati accettati e le versioni minime:

"A newly generated or updated SBOM MUST be in JSON- or XML-format and a valid SBOM according to one of the following specifications in one of the specified versions: CycloneDX, version 1.6 or higher"

Uno SBOM generato o aggiornato DEVE essere in formato JSON o XML e deve essere uno SBOM valido in base a una delle seguenti specifiche nelle versioni indicate: CycloneDX, versione 1.6 o superiore.

"System Package Data Exchange (SPDX), version 3.0.1 or higher"

System Package Data Exchange (SPDX), versione 3.0.1 o superiore.

Le note di rilascio della v2.1.0 documentano anche il percorso di aggiornamento: la v2.0.0 (20 settembre 2024) ha portato CycloneDX dalla versione 1.4 alla 1.5 e SPDX da versioni precedenti alla 2.2.1. La v2.1.0 (20 agosto 2025) ha portato CycloneDX dalla 1.5 alla 1.6 e SPDX dalla 2.2.1 alla 3.0.1.

L’implicazione pratica è che gli strumenti che producono output CycloneDX 1.4 per impostazione predefinita (ancora comuni in configurazioni CI datate) non sono conformi alla v2.1.0. CycloneDX 1.6 ha introdotto un supporto più raffinato per asset crittografici e ML BOM; la versione 3.0.1 di SPDX è una rivisitazione importante con un nuovo modello di payload. La configurazione CI richiede un flag esplicito --spec-version 1.6 o equivalente. Per un confronto tra i due formati e la maturità degli strumenti disponibili, si consulti CycloneDX vs SPDX.

Un esempio di struttura CycloneDX 1.6 allineata a TR-03183, con i campi Required a livello di documento compilati:

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.6",
  "serialNumber": "urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79",
  "version": 1,
  "metadata": {
    "timestamp": "2027-01-15T10:00:00Z",
    "tools": [
      { "vendor": "Example", "name": "syft", "version": "1.10.0" }
    ],
    "authors": [
      { "name": "Example GmbH security team", "email": "security@example.de" }
    ],
    "component": {
      "type": "firmware",
      "name": "SmartSensor Pro",
      "version": "2.4.1",
      "supplier": { "name": "Example GmbH", "url": ["https://example.de"] },
      "purl": "pkg:firmware/example/smartsensor-pro@2.4.1"
    }
  },
  "components": [
    {
      "type": "library",
      "name": "openssl",
      "version": "3.0.12",
      "purl": "pkg:generic/openssl@3.0.12",
      "licenses": [{ "license": { "id": "Apache-2.0" } }],
      "hashes": [
        { "alg": "SHA-512", "content": "ddaf35a193617aba..." }
      ],
      "supplier": { "name": "OpenSSL Software Foundation" },
      "properties": [
        { "name": "executable", "value": "true" },
        { "name": "archive", "value": "false" }
      ]
    }
  ],
  "dependencies": [
    {
      "ref": "pkg:firmware/example/smartsensor-pro@2.4.1",
      "dependsOn": ["pkg:generic/openssl@3.0.12"]
    }
  ]
}

Le voci authors, timestamp e hashes SHA-512 sono i campi Required a livello di documento e di componente che più spesso mancano nelle configurazioni CI predefinite. Prima di considerare un output conforme a TR-03183, lo si validi con cyclonedx-cli validate --input-version 1.6.

TR-03183, CSAF e VEX

TR-03183 tratta insieme le funzionalità di SBOM e advisory sulle vulnerabilità. La regola principale è semplice: CSAF è raccomandato per le advisory ed è operativamente richiesto per la pubblicazione in security.txt. VEX non è mai imposto.

Meccanismo Forza Significato
CSAF 2.0 come formato di advisory Raccomandato «The recommended format for distributing vulnerability information is CSAF (including also VEX as a profile)»
Tag CSAF in security.txt DEVE Il riferimento a documenti CSAF in security.txt deve iniziare con il tag CSAF:
URI dei metadati del provider DOVREBBE Il fabbricante DOVREBBE fornire l’URI di provider-metadata.json per i documenti CSAF
ISO/IEC 20153:2025 Riferimento La forma internazionale standardizzata di CSAF v2.0
VEX Informativo VEX compare come profilo CSAF e come uno dei possibili canali «should» per le informazioni sulle vulnerabilità

CSAF (Common Security Advisory Framework) versione 2.0 è uno standard OASIS pubblicato il 18 novembre 2022, con Errata 01 rilasciata il 26 gennaio 2024. Definisce uno schema JSON per le advisory di sicurezza leggibili automaticamente. I CERT tedeschi (BSI-CERT, CERT-Bund) pubblicano e consumano CSAF per impostazione predefinita; l’editor Secvisogram e il validatore OASIS CSAF sono gli strumenti standard.

Il collegamento con l’Articolo 14 è più sfumato di quanto alcune analisi lascino intendere. L’Article 14 del CRA stabilisce le scadenze per la segnalazione a ENISA e al CSIRT coordinatore (24 ore per l’avviso preliminare, 72 ore per la notifica della vulnerabilità, 14 giorni per il rapporto finale). Non specifica un formato pubblico per le advisory. TR-03183 colma questa lacuna: dopo aver notificato ENISA, il documento CSAF pubblicato tramite il file security.txt è l’artefatto operativo che i clienti acquisiscono. Senza una pipeline per le advisory CSAF attiva prima dell'11 settembre 2026, si può ancora soddisfare l’Article 14, ma non le aspettative relative ai contratti di fornitura e al security.txt che derivano da TR-03183.

Una nota a parte su VEX. TR-03183 menziona VEX solo come profilo CSAF e come uno dei possibili canali per lo scambio di informazioni sulle vulnerabilità; non è mai obbligatorio. Dal punto di vista del CRA, VEX è utile per dichiarazioni not_affected a livello di componente che evitano il rumore di allarme quando uno SBOM contiene una libreria con una CVE nota che non è effettivamente raggiungibile dal proprio codice. Non è un obbligo TR-03183. Lo si utilizzi dove aggiunge chiarezza.

TR-03183 si applica al di fuori della Germania?

TR-03183 è una linea guida tecnica nazionale tedesca emessa dal BSI, non un regolamento a livello UE, e non afferma applicabilità al di fuori della Germania.

In pratica, tre fattori rendono TR-03183 rilevante per i fabbricanti con sede al di fuori della Germania.

In primo luogo, il mercato tedesco è il più grande dell’UE e gli acquisti delle imprese tedesche fanno sempre più riferimento esplicito a TR-03183. Se si vende a un cliente tedesco, ci si aspetti linguaggio relativo a TR-03183 nei questionari di sicurezza e nei contratti di fornitura.

In secondo luogo, al momento non esiste una specifica alternativa allineata al CRA con un livello di dettaglio comparabile, quindi i fabbricanti ricorrono a TR-03183 come riferimento pratico.

In terzo luogo, TR-03183 è costruito attorno agli stessi allegati del CRA che si devono comunque soddisfare: Allegato I, Allegato II e Allegato VII. La documentazione preparata secondo TR-03183 produce le prove tecniche che un’autorità di vigilanza del mercato dell’UE si aspetta nel fascicolo dell’Annex VII, SBOM incluso. Si consulti la documentazione tecnica per l’elenco completo dei contenuti dell’Annex VII.

Adottare TR-03183 volontariamente è una scelta ingegneristica difendibile, ma non un requisito legale al di fuori della Germania. Se i propri prodotti non includono un componente hardware, la questione si chiude qui. Se lo includono, lo stesso documento può contenere le voci HBOM accanto ai componenti software.

Domande frequenti

Quali sono gli elementi minimi NTIA?

I Minimum Elements For a Software Bill of Materials (SBOM) dell’NTIA, pubblicati il 12 luglio 2021 dal Dipartimento del Commercio degli Stati Uniti, definiscono una base che la maggior parte degli SBOM allineati al CRA supera agevolmente. I sette campi dati sono: Supplier Name (Nome del fornitore), Component Name (Nome del componente), Version of the Component (Versione del componente), Other Unique Identifiers (Altri identificatori univoci), Dependency Relationship (Relazione di dipendenza), Author of SBOM Data (Autore dei dati SBOM) e Timestamp (Marca temporale). Il documento definisce anche tre categorie di primo livello: Data Fields (Campi dati), Automation Support (Supporto all’automazione) e Practices and Processes (Pratiche e processi), che contiene «Known Unknowns» come sotto-elemento, non come categoria di primo livello. TR-03183 v2.1.0 aggiunge agli sette elementi NTIA: hash SHA-512, nome file e le proprietà Executable, Archive e Structured, oltre alla risoluzione obbligatoria delle dipendenze. La sola conformità NTIA non soddisfa TR-03183.

Che cos’è CSAF 2.0?

CSAF (Common Security Advisory Framework) versione 2.0 è uno standard OASIS pubblicato il 18 novembre 2022, per le advisory di sicurezza leggibili automaticamente: quali versioni del prodotto sono colpite, quali sono corrette, quali mitigazioni esistono e come i clienti devono rispondere. TR-03183 raccomanda CSAF come formato per la condivisione delle informazioni sulle vulnerabilità, e richiede il tag CSAF: nel file security.txt quando si pubblicano documenti CSAF. CSAF 2.0 è anche la base della norma internazionale ISO/IEC 20153:2025. Gli strumenti standard sono l’editor Secvisogram e il validatore OASIS CSAF. I CERT tedeschi pubblicano e consumano CSAF per impostazione predefinita, quindi se si vende a clienti tedeschi conviene considerare CSAF come richiesto anziché facoltativo.

È necessario il VEX per ogni CVE?

No. TR-03183 non impone VEX. Inquadra VEX come profilo CSAF e lo tratta come canale raccomandato, non obbligatorio, per le informazioni sulle vulnerabilità. Dal punto di vista del CRA, VEX è utile per dichiarazioni not_affected a livello di componente che evitano il rumore di allarme quando uno SBOM contiene una libreria con una CVE nota che non è effettivamente raggiungibile dal proprio codice. CycloneDX 1.6 consente le asserzioni VEX inline nel documento SBOM, eliminando la necessità di un file separato per ogni CVE. Emettere VEX dove aggiunge chiarezza dimostra la diligenza dovuta ai sensi dell’Articolo 13(5) del CRA. Emettere VEX per ogni CVE dello SBOM non è un obbligo TR-03183 e raramente rappresenta un uso efficiente del tempo degli analisti.

TR-03183 si applica al di fuori della Germania?

Dal punto di vista legale, no. TR-03183 è una linea guida nazionale tedesca emessa dal BSI, non legge dell’UE, e non afferma applicabilità al di fuori della Germania. In pratica resta rilevante in tutta l’UE per tre motivi: la Germania è il mercato più grande dell’UE, gli acquisti tedeschi fanno riferimento diretto a TR-03183 e al momento non esiste una specifica alternativa allineata al CRA con un dettaglio comparabile. Adottarlo è una scelta ingegneristica solida anziché un obbligo legale al di fuori della Germania.

Passi successivi

  1. Si verifichi l’output SBOM corrente rispetto all’elenco dei campi di TR-03183. Si confermino i campi Required a livello di documento SBOM (creatore, timestamp), ogni campo Required a livello di componente (nome, versione, creatore, nome file, dipendenze, licenze di distribuzione, hash SHA-512, proprietà executable, archive e structured) e i campi Additional dove i dati esistono. Molte configurazioni CI predefinite omettono il nome file, le proprietà booleane e l’hash SHA-512.
  2. Si aggiorni la configurazione degli strumenti per produrre output CycloneDX 1.6 o SPDX 3.0.1 come minimo. Gli output CycloneDX 1.4 e 1.5 accettati nelle revisioni precedenti di TR-03183 non sono più conformi alla v2.1.0. Si consulti CycloneDX vs SPDX per le opzioni di strumenti e validatori.
  3. Si integri la generazione di advisory CSAF 2.0 nel processo di risposta alle vulnerabilità. Si configuri un file security.txt con il tag CSAF: e l’URI di provider-metadata.json. Si scelga l’editor Secvisogram e il validatore OASIS CSAF, salvo che non si disponga già di strumenti per le advisory. Si colleghi questo lavoro all’orologio dell’Articolo 14 che inizia l'11 settembre 2026, trattato in segnalazione di vulnerabilità e incidenti CRA.
  4. Si inserisca lo SBOM allineato a TR-03183 nel fascicolo tecnico dell’Allegato VII, dove figura ai punti 2(b) e 8 dell’elenco dei contenuti. Per i prodotti con hardware integrato, lo stesso documento può contenere le voci HBOM, poiché CycloneDX 1.6 gestisce sia i tipi di componenti software che hardware.
  5. Se gestire l’acquisizione di CycloneDX 1.6, la validazione dei campi TR-03183 e la generazione di advisory CSAF su più versioni del prodotto è un onere che non si vuole mantenere manualmente, CRA Evidence gestisce l’acquisizione degli SBOM, il tracciamento dei componenti e la valutazione della qualità conforme a TR-03183 su tutto il portfolio di prodotti.