sbomqs Integration with DefectDojo
sbomqs Integration with DefectDojo
sbomqs is an open source command-line tool from Interlynk that scores the quality of a Software Bill of Materials. It reads SPDX and CycloneDX documents and rates them on a 0 to 10 scale, feature by feature, against criteria such as the NTIA minimum elements and BSI TR-03183 guidance: whether components carry names, versions, suppliers, licenses, checksums, and identifiers. It does not look for vulnerabilities. Its score command can write the results as JSON, which DefectDojo imports.
sbomqs Integration with DefectDojo
We started running sbomqs because customers and regulators began asking for SBOMs, and we realized ours were technically valid but thin. A document with no suppliers and no license data passes a schema check and still fails the person who needs to use it. Importing sbomqs results into DefectDojo turns each weak spot in an SBOM into a Finding on the Asset that ships it, so the team that owns the build can see the gap, fix the generator, and watch the Finding close on the next import.
Why sbomqs Matters
An SBOM is only as useful as the data inside it. Vulnerability matching, license review, and supplier risk all depend on fields that many generators leave empty.
- sbomqs measures completeness feature by feature, so you learn exactly which element is missing rather than getting a single pass or fail.
- It scores against published expectations, including the NTIA minimum elements and BSI TR-03183, which is the language customers and auditors use.
- It works on both SPDX and CycloneDX, so one quality check covers SBOMs from different build tools.
- Missing data hides risk. A component with no version or identifier cannot be matched against vulnerability databases, so a gap in the SBOM can quietly become a gap in SCA coverage.
- A score on its own is easy to ignore. Tracking each gap as work with an owner is what gets generators fixed.
Advantages of This Integration
What we gained by sending sbomqs results through DefectDojo:
- Gaps become actionable items. Each feature that scores below its maximum becomes a Finding with the category, feature name, score, and the sbomqs explanation (for example "0/1 have supplier names").
- Only real gaps are imported. Features at full score and features sbomqs marks as ignored for the run are skipped, so the Test lists only what needs work.
- Severity that reflects the size of the gap. An element that is entirely absent imports as Medium, a weak score as Low, and a nearly complete one as Info, which gives a natural order for fixing.
- Progress over time. Reimporting the score for each new build mitigates gaps that were fixed and reactivates any that return when a generator changes.
- SBOM quality next to SBOM content. Quality Findings live on the same Asset as SCA results, so reviewers can see whether a clean vulnerability report rests on a complete inventory.
How This Integration Works
DefectDojo imports sbomqs output with the sbomqs Scan scan type.
1. Score the SBOM as JSON. Run sbomqs against the SBOM your build produces:
sbomqs score sbom.json --json > sbomqs.json
2. Import the report. In the UI, open the Engagement, choose Import Scan Results, select sbomqs Scan, and upload the file. To automate it, use the API in Community Edition or DefectDojo Pro:
curl "https://YOUR_INSTANCE/api/v2/import-scan/"
-H "Authorization: Token $DD_API_TOKEN"
-F "scan_type=sbomqs Scan"
-F "file=@sbomqs.json"
-F "product_name=payments-api"
-F "engagement_name=SBOM Quality"
-F "auto_create_context=true"
DefectDojo Pro users can run the same import from a pipeline with Universal Importer:
universal-importer import
--defectdojo-url "https://YOUR_INSTANCE.cloud.defectdojo.com/"
--scan-type "sbomqs Scan"
--report-path "./sbomqs.json"
--product-name "payments-api"
--engagement-name "SBOM Quality"
--auto-create-context
3. Reimport for every release. Send later reports to /api/v2/reimport-scan/ against the same Test. Gaps that the next SBOM fills are mitigated, and new ones are added.
The parser reads every document listed in the report's files section, so a report covering more than one SBOM produces Findings for each, identified by file name.
Data Granularity: What Gets Imported
| DefectDojo Field | Source in sbomqs Report | Notes |
|---|---|---|
| Title | category and feature |
Formatted as category: feature |
| Severity | score relative to max_score |
0 is Medium, below half is Low, half or more is Info, maximum is not imported |
| Description | sbomqs description plus details |
Adds category, feature, score of max, SBOM file name, spec and version, document average, scoring engine version |
| Mitigation | Fixed guidance | Regenerate the SBOM with a tool that fills the element, or enrich the document |
| File Path | file_name |
The scored SBOM |
| Component Name | file_name |
Also the scored SBOM, used in deduplication |
| Tool ID (vuln_id_from_tool) | feature |
For example comp_with_supplier |
| CVE / CWE | Not set | These Findings describe document gaps, not weaknesses |
| Finding type | Static | |
| Deduplication | Hashcode | vuln_id_from_tool, component_name |
Use Cases
In a CI/CD pipeline: The build generates an SBOM, runs sbomqs on it, and reimports the score into a Test for that service. If a dependency update or generator change drops supplier or license data, a new Finding appears on the Asset before the SBOM goes to a customer.
Before delivering SBOMs to customers: A product security team checks every SBOM against NTIA minimum elements before it leaves the company. Open Medium Findings mean an element is missing entirely, which is a clear reason to hold the release of the document.
When comparing SBOM generators: A platform team scoring output from two or three generators imports each into its own Test. The Findings show which tool leaves which elements empty, which makes the choice of generator a data question.
For regulatory readiness: Organizations preparing for SBOM requirements can report on how many Assets still have gaps in required elements and track that number down over time.
Operational Tips
- The highest severity sbomqs Findings can reach is Medium. If SBOM completeness is a release requirement for you, set SLAs for Medium and Low that match, or raise severity on specific features during triage.
- Keep the SBOM file name stable between builds. The file name is the component used in deduplication, so renaming
sbom.jsonto include a version number creates a new set of Findings each time. - Some features may not apply to your use case. Risk-accept them with a note explaining why, so they stay documented instead of reappearing as open work.
- Info Findings mark elements that are mostly present. Use
minimum_severity=Lowon import if you only want to track larger gaps. - Tag imports with the SBOM format and generator, for example
tags=cyclonedx,syft, to compare quality across toolchains in metrics. - Read the Description before fixing. The scoring engine version and document average score are recorded there, which helps explain why a score moved after an sbomqs upgrade.
- Run sbomqs on the exact SBOM you publish, not an intermediate file, so the Findings describe what customers receive.