Generazione SBOM (Software Bill of Materials)

Oltre alla verifica delle vulnerabilità, il processo di build produce un SBOM (Software Bill of Materials): un inventario formale e machine-readable di tutte le dipendenze del progetto, con i relativi identificativi univoci (PURL), hash crittografici, licenze e relazioni di dipendenza transitive.

Formati prodotti

Il progetto genera l’SBOM in due formati standard:

  • CycloneDX: standard OWASP, ottimizzato per security e vulnerability tracking;

  • SPDX: standard Linux Foundation (ISO/IEC 5962:2021), ottimizzato per compliance legale e licenze.

Entrambi i formati vengono generati ad ogni build in formati diversi (JSON, XML, RDF) tramite i plugin Maven cyclonedx-maven-plugin e spdx-maven-plugin.

Utilizzo

La generazione dell’SBOM è integrata nel ciclo di build Maven e si attiva automaticamente nella fase package:

mvn package

In alternativa è possibile attivarla esplicitamente nella fase verify, saltando compilazione e packaging:

mvn verify -Dsbom=verify -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none

Configurazione

La generazione è controllata tramite le seguenti proprietà Maven nel root pom.xml:

  • sbom: fase master (default: package, usare none per disabilitare tutti i formati);

  • sbom.output.dir: directory di output (default: ${project.basedir}/sbom);

  • sbom.includeTestScope: include le dipendenze con scope test (default: false);

  • sbom.cyclonedx: fase per CycloneDX (eredita da sbom, none per disabilitare solo CycloneDX);

  • sbom.cyclonedx.format: formato CycloneDX (json, xml, all, default: all);

  • sbom.spdx: fase per SPDX (eredita da sbom, none per disabilitare solo SPDX);

  • sbom.spdx.json: attivazione formato JSON SPDX (eredita da sbom.spdx);

  • sbom.spdx.rdfxml: attivazione formato RDF/XML SPDX (eredita da sbom.spdx).

Artefatti prodotti

Al termine del build, nella directory sbom/ sono disponibili:

sbom/
├── cyclonedx/
│   ├── bom.cdx.json      (CycloneDX 1.6 - formato JSON)
│   └── bom.cdx.xml       (CycloneDX 1.6 - formato XML)
└── spdx/
    ├── bom.spdx.json     (SPDX 2.3 - formato JSON)
    └── bom.spdx.rdf.xml  (SPDX 2.3 - formato RDF/XML)

Esempio di comandi

Per generare l’SBOM senza eseguire compilazione, testsuite, packaging e verifiche:

mvn verify -Dsbom=verify -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none

Per generare solo CycloneDX:

mvn verify -Dsbom=verify -Dsbom.spdx=none -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none

Per generare solo SPDX:

mvn verify -Dsbom=verify -Dsbom.cyclonedx=none -Dcompile=none -Dtestsuite=none -Dpackage=none -Dowasp=none -Dosv=none

Per disabilitare del tutto la generazione SBOM durante un mvn package:

mvn package -Dsbom=none

Per includere anche le dipendenze di test nell’SBOM:

mvn package -Dsbom.includeTestScope=true