feat(vuln): automated CVE visibility for production (R-VULN-*, ADR-0027) #165

Open
gitea-admin wants to merge 15 commits from feat/vuln-visibility into main
pull from: feat/vuln-visibility
15 Commits
Author SHA1 Message Date
jakman85andClaude Opus 5.5 e1adc3963c docs(vuln): handoff for automated CVE visibility
gate / gate (pull_request) Failing after 54s
gate / conformance (pull_request) Skipped
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 12:40:15 -06:00
jakman85 4ca0ebfac6 Merge branch 'wip/vuln-fixes' into feat/vuln-visibility 2026-11-09 12:38:41 -06:00
jakman85 1ff527f546 Merge branch 'wip/vuln-platform' into feat/vuln-visibility 2026-11-09 12:38:41 -06:00
jakman85andClaude Opus 5.5 d8b25a67fe fix(vuln): survive OOM kills, isolate bad upstream strings, label findings per line
Review findings on the integrated scanner:
- An OOM kill no longer wedges the loop: inFlight is persisted before each scan, and on restart
  that image is marked failed and sits out full runs for 20h.
- One bad upstream string can no longer freeze the report: safe_url requires an exact lowercase
  scheme, acceptance reasons are bounded, /triage urls use the same rule, and report.build
  repairs or drops any entry the schema would refuse. lastCompleteRunAt advances only after a
  report is actually published.
- The private registry reports credential-required, not failed: VULN_PRIVATE_REGISTRIES names
  it, and Trivy is not invoked.
- loadError clears after a full run against a good inventory.
- Every image under platform/vuln-scanner stays out of Renovate auto-merge.
- The page labels status and target state per line, and mixed acceptance reads as mixed.

The Keycloak client is still an operator action: its key must go in an existing encrypted file
that an agent must not modify. platform/vuln-scanner/README.md has the exact steps.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 12:28:29 -06:00
jakman85andClaude Opus 5.5 1763e27859 fix(vuln): metric label extractor handles escaped quotes in f-strings
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 12:28:28 -06:00
jakman85andClaude Opus 5.5 4c82c64b2f docs(vuln): list the CVE triage workflow in the workflows README
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 10:30:43 -06:00
jakman85andClaude Opus 5.5 d06dff9a19 fix(vuln): no-per-cve-label check also matches escaped-quote label forms
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 10:29:05 -06:00
jakman85 b1a6fe6503 Merge branch 'wip/vuln-platform' into feat/vuln-visibility 2026-11-09 10:29:05 -06:00
jakman85 b265d08278 Merge branch 'wip/vuln-bot' into feat/vuln-visibility 2026-11-09 10:29:05 -06:00
jakman85 2b9dcef6c7 Merge branch 'wip/vuln-scanner' into feat/vuln-visibility 2026-11-09 10:29:05 -06:00
jakman85andClaude Opus 5.5 d4bea8a78c feat(vuln): encrypted oauth2-proxy credential for the CVE page
Generated through pipes and encrypted to the repo's public age recipient; values never echoed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 09:43:12 -06:00
jakman85andClaude Opus 5.5 b85d1e3ed7 feat(vuln): vuln-scanner platform manifests, Flux tier, alerts, L0/L2/L3 tests
Hand-authored platform/vuln-scanner (non-gating Flux tier, digest-pinned Trivy 0.76.1 and
python 3.14.9-alpine, read-only RBAC, per-pod oauth2-proxy, internal-only cve.<domain>),
five alerts with promtool tests, R-VULN-01..09 registry entries, and vuln-* L0 checks with
mutation self-tests. src/ and the bot workflow are integrated separately.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 09:42:52 -06:00
jakman85andClaude Opus 5.5 50ec2297ee feat(vuln): scanner service and fixture-driven L1 tests
Stdlib-only scanner per docs/17: Kubernetes API inventory, Trivy runner,
persisted state, schema-validated report.json, strict acceptances parser,
server-rendered page, aggregate metrics, internal API, and a scan loop
that stays live while scanning.

L1 tests under conformance/tests/l1-rendering/vuln-scanner-* run the
actual modules against recorded fixtures with a fake Trivy runner.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 09:41:23 -06:00
jakman85andClaude Opus 5.5 ec6b39bb91 feat(vuln): point the triage bot's fallback at the pinned scanner ClusterIP
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 09:39:55 -06:00
jakman85andClaude Opus 5.5 c3c72c47bb feat(vuln): CVE triage bot workflow, script and L1 tests
Scheduled Gitea Actions bot in the Renovate shape: maintains a
counts-only CVE Dashboard issue, derives remediation states from
Renovate's dashboard and PRs, ticks approve rows for exact-matched
images with an unaccepted CRITICAL with a fix, and posts the heartbeat.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-09 09:39:24 -06:00