Repository navigation
0.7.0
Decisions and versions you can trust, a check for brand-new releases, and a CI gate.
Added
- New-release check: every language package version the run knows about (inventory entries, or the image's or
lockfile's package list) is looked up on deps.dev, and versions published fewer than--release-age-daysago
(default 7;0turns it off) are flagged in a warning, a "New releases" tile and section, the executive summary,
andpackages.csv(newpublishedandnew_releasecolumns). Compromised releases are usually live for hours
or days before they are pulled and before any advisory exists. Up to 400 lookups per run. --fail-onfor CI: exit 3 when any ofmalicious,kev,act,critical,high,recentormismatchis
found, naming which. Findings set aside by evidence or an assessor decision do not count; malicious packages
always do. A gate whose check is turned off (--offline,--release-age-days 0,--no-registry-check) is
refused, and one whose check could not run fully (deps.dev errors, no package list) exits 1 rather than pass.- findings.csv column
triage_justification(optional OpenVEX justification), so decisions survive
findings.csv to OpenVEX and back unchanged. - Issue templates; security reports are pointed to private advisories.
Changed
- Breaking for existing findings.csv files:
mitigatedintriage_statusnow means not affected with the
justificationinline_mitigations_already_exist(CycloneDXprotected_by_mitigating_control), not fixed: a
compensating control is not a fix. Amitigatedrow now needstriage_notes; one without stops the run
(exit 2), where 0.6 read it asfixed. Rows already saved asfixedare unchanged. - A decision for another version of a finding that is still present is no longer listed as resolved.
- An inventory's "upgrade to" is the lowest listed fix that is fixed for every finding on its release line.
- PyPI metadata: current summary, Python 3.10 to 3.13 classifiers, Documentation and Sample report links. CI also
runs Python 3.11 and 3.12.
Fixed
- Two decisions for one vulnerability in one package at two versions overwrote each other; the one for the
installed version now wins (B3). - The tool could not read back its own openvex.json for OS packages (
pkg:deb/ubuntu/libc6loaded as package
ubuntu/libc6); the distro namespace is dropped, the epoch qualifier read, and encoded versions decoded
(7.88.1-10%2Bdeb12u14) (B4). - Notes starting with
-,=,+or@gained a quote, and multi-line notes were flattened, after a round trip
(B18, B21). - OSV commit hashes from GIT ranges could become the fix and "upgrade to" version (B5).
- Letter-patched versions sorted wrong (OpenSSL
1.1.1mbelow1.1.1l), so their fixes were missed; OpenSSL's
letters past z (0.9.8zato0.9.8zh) sort afterz, and PEP 440 pre-releases such as1.0astay before
1.0(B6). - "Upgrade to at least" could name a version that still had a vulnerability fixed on another release line (B7).
- PyPI names in an inventory
purlcolumn were not normalised, so OSV's fixes never matched (B8). - The same Go fix appeared twice when sources disagreed on the
vprefix (B19). - The sdist now contains the test fixtures, so its tests run (B11).
- A malformed pinned hash (
--trivy-sha256,--grype-sha256,verify --sha256) is an input error, exit 2 (B16). - Placeholder versions such as
4.x,4.1.Xand31.+are refused in an inventory (B17).