Sapper Revives Minefield to Deliver Accurate SBOM-Based Vulnerability Impact Reports for Cyber Resilience Act Compliance

Developer Perruer has forked the archived BitBom project Minefield into a new open-source tool called Sapper, fixing critical bugs in dependency graph construction and vulnerability matching. The original Minefield used roaring bitmaps and Tarjan's algorithm to build transitive dependency caches from SBOMs in O(n + m) time, but it incorrectly interpreted SPDX edge directions from protobom 0.6, creating false cycles and massively inflating dependent package counts. Additional fixes addressed SQLite memory database pooling issues, OSV range sorting errors with Go pseudo-versions and ECOSYSTEM ecosystems, and slow OSV ingestion by adding a package name index. Sapper now produces prioritized reports using CISA KEV and EPSS scores, showing exact shortest paths from vulnerable packages to root products while respecting OpenVEX statements. The tool maintains full air-gapped operation and supports CycloneDX 1.3–1.7 and SPDX 2.x formats. These improvements directly help organizations meet the 24-hour notification requirements under the EU Cyber Resilience Act for actively exploited vulnerabilities.

HabrTranslated from Russian

Read at source

Developer Perruer has continued the archived Minefield project from BitBom under the new name Sapper, adding critical fixes that enable accurate answers to the question of which products are affected by a given CVE through direct or transitive dependencies.

The original tool built a dependency graph from SBOMs where each package became a node identified by purl, storing parents and children in roaring bitmaps. Vulnerabilities from OSV were attached as additional nodes, turning impact queries into upward traversals from vulnerable packages. Minefield precomputed transitive closures using Tarjan's algorithm to collapse strongly connected components followed by dynamic programming, achieving O(n + m) performance.

SBOM Direction Bug Discovered After protobom Update

After updating the protobom library from 0.5 to 0.6, end-to-end tests showed dramatically inflated results: instead of six dependent packages, the system reported sixty. Investigation revealed that protobom 0.5 had silently dropped dependsOn edges from CycloneDX files, while version 0.6 correctly parsed both CycloneDX and SPDX relationships. The original Minefield code treated every edge as “from depends on to,” which is correct for CycloneDX but incorrect for SPDX predicates such as runtimeDependencyOf or containedBy that reverse the direction.

The fix introduces an explicit direction table that classifies each sbom.Edge_Type as fromDependsOnTo, toDependsOnFrom, or notADependency. After correction, test expectations were updated and independently verified by a Python script that parsed the same SBOM JSON files according to the CycloneDX and SPDX specifications.

Additional Reliability Fixes

  • Replaced mattn/go-sqlite3 with glebarez/sqlite to produce a single static binary without cgo.
  • Configured in-memory databases to use a single connection and enabled WAL mode with busy_timeout for file-based storage.
  • Fixed OSV range sorting that previously compared versions from the wrong slice, causing incorrect vulnerability status for multi-range records and Go pseudo-versions.
  • Added a package-name index that reduced full Go OSV database loading from tens of minutes to 7–8 seconds.

The new sapper report command traverses the cached graph to produce prioritized vulnerability impact lists ordered first by CISA KEV presence, then by EPSS score, then by number of affected products. It merges duplicate findings via alias relationships and respects OpenVEX documents that mark specific products as not affected.

Sapper remains fully air-gapped, accepts CycloneDX and SPDX files or archives, and can ingest KEV, EPSS, and OSV data. The project is available at github.com/Perruer/sapper under the Apache-2.0 license.

Meridian digestThe week's most consequential security stories, distilled into one briefing.See the digest

More in Supply Chain & Open Source

Passwordless Kubernetes Image Pulling with Artifact Keeper via ServiceAccount Tokens
Malicious Code Injected into LiteLLM Open Source AI Package via Supply Chain Attack
GhostAction Campaign Compromises 790 GitHub Repositories via Malicious Workflows