OSV vulnerability matcher for Bomly.
It enriches packages in a Bomly scan with vulnerability data from OSV.dev, then flags vulnerabilities listed in the CISA KEV catalog as actively exploited.
Already inside the Bomly CLI. This matcher ships embedded in the
bomlybinary as the built-inosvmatcher — you do not need to install this plugin to use OSV enrichment. This repository is the matcher's home as a standalone module: the Bomly CLI consumes the same code in-process, and the plugin binary serves it to hosts that run matchers as managed subprocesses.
- Plugin id / descriptor name:
osv - Kind: matcher
- Module path:
github.com/bomly-dev/bomly-plugin-osv-matcher
This matcher performs network calls only during enrichment (bomly scan --enrich), never during audit-only runs:
https://api.osv.dev— batch vulnerability queries and per-vulnerability detail records.https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json— the KEV catalog (skippable withdisable_kev).
Responses are cached on disk (default ~/.bomly/cache/osv,
~/.bomly/cache/osv-vulns, and ~/.bomly/cache/kev). Cache failures are
non-fatal: the matcher logs a warning and continues without caching.
Embedded execution is configured through the Bomly CLI's own osv settings.
Managed execution reads a JSON block under plugins.matchers.osv:
| Key | Type | Default | Meaning |
|---|---|---|---|
api_base |
string | https://api.osv.dev |
OSV API base URL |
cache_dir |
string | ~/.bomly/cache/osv |
Package-level result cache |
cache_ttl |
duration string | 24h |
Package-level cache TTL |
bypass_cache |
bool | false |
Always fetch fresh results |
disable_kev |
bool | false |
Skip the KEV enrichment pass |
kev_cache_dir |
string | ~/.bomly/cache/kev |
KEV catalog cache |
kev_cache_ttl |
duration string | 6h |
KEV catalog cache TTL |
vuln_detail_cache_dir |
string | ~/.bomly/cache/osv-vulns |
Per-vulnerability detail cache |
vuln_detail_cache_ttl |
duration string | 168h |
Detail cache TTL |
The matcher advertises package-updates-v1. When the host sets
AcceptPackageUpdates, Match leaves the request registry untouched and
returns one delta per enriched package (PURL, Matched, and the vulnerability
list). This is safe because every registry mutation the legacy in-place path
performs is expressible through Package.MergeFrom: vulnerabilities are
unioned by (Source, ID) and Matched is ORed in. The equivalence is pinned
by TestMatchDeltaEquivalence.
make test # unit tests + SDK conformance suite
make build # build bin/bomly-plugin-osv-matcher