Skip to main content

End-to-end SBOM generation and vulnerability intelligence pipeline

Project description

sbom-sentinel

CI

SBOM generation and vulnerability intelligence pipeline for local directories, container images, and Git repositories.

Wraps Syft and Grype behind a four-command CLI, enriches results with the CISA Known Exploited Vulnerabilities (KEV) catalog, and produces a timestamped Markdown report per run. A GitHub Actions workflow ships with the repo for continuous scanning on every push.

Features

  • Generate SPDX-JSON SBOMs from local directories, container images, or Git URLs
  • Scan for vulnerabilities via Grype with optional severity gating (--fail-on)
  • Enrich results with the CISA KEV catalog; flagged CVEs are marked [KEV] in the report
  • Suppress findings via OpenVEX or CSAF documents; KEV conflicts are called out explicitly
  • Output scan results as JSON (default) or SARIF for GitHub Code Scanning
  • Date-stamped KEV cache; degrades gracefully when the catalog is unreachable

Prerequisites

Tool Purpose Install
Syft SBOM generation curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
Grype Vulnerability scanning curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin
Python >= 3.11 Runtime python.org
uv Package manager curl -LsSf https://astral.sh/uv/install.sh | sh

Installation

git clone https://github.com/Dashtid/sbom-sentinel.git
cd sbom-sentinel
uv sync

To install into an existing project without cloning:

uv add git+https://github.com/Dashtid/sbom-sentinel.git

Quick Start

Full three-stage pipeline against a local directory:

# Stage 1 — generate SBOM
sbom-sentinel sbom --target ./myapp --name myapp

# Stage 2 — scan (fail the build if High or Critical CVEs are found)
sbom-sentinel scan \
  --sbom sbom_output/myapp.spdx.json \
  --name myapp \
  --fail-on high

# Stage 3 — generate Markdown report with CISA KEV enrichment
sbom-sentinel report \
  --scan results/json/myapp_<timestamp>.json \
  --name myapp

Stages 2 and 3 can be run together with run:

sbom-sentinel run \
  --sbom sbom_output/myapp.spdx.json \
  --name myapp \
  --fail-on high

Container image target:

sbom-sentinel sbom --target docker:nginx:latest --name nginx

Remote Git repository:

sbom-sentinel sbom --target https://github.com/org/repo --name repo

Commands

Command Description
sbom Stage 1: generate an SPDX-JSON SBOM via Syft
scan Stage 2: scan an SBOM for vulnerabilities via Grype
report Stage 3: generate a Markdown report with KEV enrichment
run Orchestrator: run stages 2 and 3 in sequence

Pass --help to any command for the full option reference:

sbom-sentinel scan --help

VEX suppression

Pass an OpenVEX or CSAF document to suppress findings marked not_affected. Any suppressed CVE that also appears in CISA KEV is flagged in the report as a conflict requiring manual review.

sbom-sentinel run \
  --sbom sbom_output/myapp.spdx.json \
  --name myapp \
  --vex statements.vex.json

CI/CD

.github/workflows/ci.yml runs on every push to main and on pull requests:

  • Lintruff check with GitHub annotations
  • Type checkmypy in strict mode
  • Testpytest with coverage

Dependabot opens PRs weekly for GitHub Actions and Python dependency updates.

Development

See CONTRIBUTING.md for full setup and contribution guidelines.

uv sync                        # install all dependencies
uv run pytest                  # run the test suite
uv run ruff check .            # lint
uv run mypy sbom_sentinel      # type check

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sbom_sentinel-0.1.0.tar.gz (61.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sbom_sentinel-0.1.0-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file sbom_sentinel-0.1.0.tar.gz.

File metadata

  • Download URL: sbom_sentinel-0.1.0.tar.gz
  • Upload date:
  • Size: 61.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sbom_sentinel-0.1.0.tar.gz
Algorithm Hash digest
SHA256 55de7de3aaa38cf9e6f0849c4eb0279982a9766913765d999673330a4f43d1e7
MD5 9c6bbb1ca0a7fbae4647daa44d10e064
BLAKE2b-256 9cbd4f5649efa68252f79a9566501287df9204b8cff3b84f3a04ee1c6769aa79

See more details on using hashes here.

File details

Details for the file sbom_sentinel-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sbom_sentinel-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for sbom_sentinel-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bb668c28d5fcc02198d3faf1157dafbb7d9b665a4d17fa39853b090719f5c33a
MD5 dcec6942d46ad21f6a0a20022b23317a
BLAKE2b-256 d2c3e2cfae035c0c7563a41e038538105acea30d7d1474eedaec07b4b7178bbf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page