Skip to content

Lead with the VEX divergence — local scans show three findings the gate does not - #20

Merged
kevinpinscoe merged 1 commit into
mainfrom
GH-2
Aug 9, 2026
Merged

Lead with the VEX divergence — local scans show three findings the gate does not#20
kevinpinscoe merged 1 commit into
mainfrom
GH-2

Conversation

@kevinpinscoe

Copy link
Copy Markdown
Owner

Documentation only — no workflow change. Tracked in YouTrack GH-2; governed by gitops
PLAN.md item 11c.

This repo is not in scope for item 11a: the image is single-platform (linux/amd64),
so there is no second architecture to scan.

The problem

This is the only image in the fleet that suppresses anything, and the README documented
neither the suppressions nor the blocking gate. It still described python:3.14-slim
with 30 blocking findings and a warn-only gate — two base images out of date.

The practical consequence: anyone scanning this image locally sees three high-severity
CVEs while the gate reports zero and passes.
Nothing told them that was expected, or
how to reproduce what the gate actually sees. That reads like the gate is broken or the
image is unpatched, and neither is true.

The fix

The supply-chain section now opens with that discrepancy rather than burying it:

grype "$IMG"# 3 high findings
grype "$IMG" --vex .vex/openvex.json # 0 — what the gate actually sees

It names all three CVEs, states why the vulnerable code is unreachable, and records that
each is superseded by a named CPython release — so the document is temporary by
construction and there is a clear trigger to delete it (base reaches 3.15 stable).

Measured while writing this

Scanned the published image at ghcr.io/kevinpinscoe/python-docker-fun:latest rather
than trusting the numbers already in PLAN.md:

TotalHigh + Critical
no VEX123
with --vex .vex/openvex.json90

All three suppressions appear in grype's ignoredMatches under rule namespace vex, so
they are genuinely VEX-driven and not simply absent.

This also confirmed something 11a depended on: the bare pkg:oci/<name> product
identifier still matches when the scan target is a per-platform digest rather than a
manifest-list digest. Had it not, these three suppressions would have silently stopped
applying the moment per-platform scanning was introduced in the sibling repos.

…gate does not
This is the only image in the fleet that suppresses anything, and the README
described neither the suppressions nor the blocking gate. It still documented
python:3.14-slim with 30 blocking findings and a warn-only gate, two base images
out of date.
The section now opens with the discrepancy a reader will actually hit: a plain
`grype` run reports three high-severity CVEs while the gate reports zero and
passes. It gives the exact command that reproduces the gate
(--vex .vex/openvex.json), names all three CVEs and why the vulnerable code is
unreachable, and states that they are superseded by CPython 3.15 so the document
is temporary by construction.
Measured against the published image while writing this: 12 findings total, 3 at
high, 0 unsuppressed.
Refs gitops PLAN.md item 11c, YouTrack GH-2.
@kevinpinscoe
kevinpinscoe merged commit a3d65f8 into mainAug 9, 2026
1 check passed
@kevinpinscoe
kevinpinscoe deleted the GH-2 branch August 9, 2026 20:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@kevinpinscoe