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
merge into: Home-Network:main
Home-Network:main
Home-Network:renovate/kube-prometheus-stack-93.x
Home-Network:renovate/ghcr.io-renovatebot-renovate-44.x
Home-Network:renovate/gitea.home.keithjackson.dev-home-network-toolbox-main
Home-Network:chore/adopt-spec-sync
Home-Network:fix/wg-client-mtu-docs
Home-Network:fix/wg-home-peer-pihole-sources
Home-Network:feat/pihole-explicit-lan-names
Home-Network:feat/dns-via-cloudflare-tunnel
Home-Network:feature/cloudflare-tunnel-config
Home-Network:chore/rotate-cloudflared-tunnel
Home-Network:fix/cloudflared-creds-permission
Home-Network:feat/cloudflare-tunnel
Home-Network:feat/parallel-l0-checks
Home-Network:feat/gate-toolbox-container
Home-Network:fix/keycloak-servicemonitor-owner
Home-Network:feat/runner-capacity-2
Home-Network:chore/renovate-config-cleanup
Home-Network:fix/keycloak-operator-crds
Home-Network:feat/devcontainer-velero-cli
Home-Network:feat/gitea-28
Home-Network:feat/l0-externaldns-annotation-prefix
Home-Network:fix/public-dns-wan-a-record
Home-Network:feat/pm-agent-pr-mentions
Home-Network:docs/source-comment-audit
Home-Network:chore/pm-agent-digest-99
Home-Network:fix/pm-agent-triage-exit
Home-Network:chore/pm-agent-go-live
Home-Network:chore/pm-agent-runner-digest
Home-Network:feature/pm-agent-credentials
Home-Network:feat/pm-agent-registry-pull-secret
Home-Network:feat/pin-pihole-jackett-plex
Home-Network:fix/renovate-hold-auth-and-self
Home-Network:feat/renovate-track-keycloak-operator
Home-Network:fix/renovate-run-hygiene
Home-Network:fix/renovate-auth
Home-Network:fix/renovate-first-run
Home-Network:feat/keycloak-passkey-reconcile
Home-Network:fix/gitea-admit-buildkit
Home-Network:feat/image-pipeline
Home-Network:fix/renovate-config-filename
Home-Network:fix/vpn-ingress-l2-lease-collision
Home-Network:fix/renovate-cron-window
Home-Network:fix/renovate-invalid-config
Home-Network:fix/pihole-local-ttl
Home-Network:fix/unattended-upgrades-debian-sentinel
Home-Network:fix/ha-check-catastrophic-regex
Home-Network:feat/automated-upgrades
Home-Network:fix/coredns-ha
Home-Network:feat/keycloak-passkeys
Home-Network:fix/oauth2-proxy-oidc-startup-race
Home-Network:feat/graceful-cluster-shutdown
Home-Network:plex/volume-expamsion
Home-Network:fix/bulk-nfs-truenas
Home-Network:fix/peers-configmap-content-hash
Home-Network:vpn/add-keith-phone
Home-Network:fix/new-peer-ignores-template-comments
Home-Network:fix/vpn-ingress-ip-forward
Home-Network:feature/add-private-key-for-wireguard
Home-Network:fix/vpn-server-key-in-sops
Home-Network:docs/pm-agent-registry-pull-prereq
Home-Network:fix/vpn-runbook-ansible-command
Home-Network:feat/pm-agent-issue-to-pr
Home-Network:docs/agents-work-in-their-own-workspace
Home-Network:feat/vpn-remote-access-wireguard
Home-Network:feat/cilium-roll-out-on-config-change
Home-Network:docs/oauth2-sidecar-scrape-verified
Home-Network:fix/plex-resolver-independent-advertise
Home-Network:fix/plex-unblock-app-tier
Home-Network:feat/hubble-flow-export-plex
Home-Network:fix/oauth2-sidecar-metrics-scrape-netpol
Home-Network:feat/plex-vip-hostname-and-lan-networks
Home-Network:fix/plex-advertise-plexdirect
Home-Network:docs/pihole-ha-verified
Home-Network:feat/pihole-multi-replica
Home-Network:feat/pihole-declare-state
Home-Network:feat/plex-remote-access-l4
Home-Network:fix/cilium-cgroup-hostroot
Home-Network:fix/node-keycloak-hosts-pin
Home-Network:feat/public-dns-wan-target
Home-Network:fix/plex-quicksync-verification
Home-Network:sync-39-onto-main
Home-Network:fix/admin-approval-override
Home-Network:feat/quicksync-via-device-plugin
Home-Network:bugfix/arr-to-plex
Home-Network:feat/oauth2-proxy-api-route-per-app
Home-Network:feat/intel-gpu-device-plugin
Home-Network:feat/oauth2-proxy-auth-failure-visible
Home-Network:fix/render-selftest-runs-in-gate
Home-Network:feat/plex-quicksync
Home-Network:feat/sd-hardware-capability
Home-Network:fix/jackett-oauth2-proxy-session
Home-Network:feat/node-health-render-device
Home-Network:fix/oauth2-proxy-cookie-collision-fleet
Home-Network:fix/flux-deploy-notification-inhibited
Home-Network:feat/flux-deploy-notifications
Home-Network:feat/conformance-job-template
Home-Network:feat/conformance-trigger-kubeconfig
Home-Network:feat/conformance-runner-image
Home-Network:fix/crafty-oauth2-proxy-signin
Home-Network:chore/decisions-log-conflict-free
Home-Network:fix/crafty-bedrock-19132
Home-Network:fix/gitea-settings-comment-names-impossible-secret
Home-Network:feat/ci-is-the-approver
Home-Network:fix/kyverno-policy-was-never-applied
Home-Network:docs/handoff-2026-09-29
Home-Network:fix/secret-name-and-require-gitea-settings
Home-Network:feat/conformance-trigger-admission-boundary
Home-Network:fix/cluster-available-would-fake-a-green
Home-Network:feat/gitea-settings-drift-check
Home-Network:fix/gitea-admins-could-override-the-gate
Home-Network:docs/close-out-ci-hardening
Home-Network:docs/ci-reality-vs-phase-0
Home-Network:docs/runbooks-pr-flow
Home-Network:fix/dind-native-sidecar
Home-Network:fix/gate-push-trigger-matches-feat-prefix
Home-Network:feat/plex-claim-token-013124
Home-Network:fix/conformance-context-is-fail-open
Home-Network:docs/ci-delivery-flow-for-agents
Home-Network:feat/plex-claim-sops-secret
Home-Network:feat/prod-hardening
Home-Network:prod/deliver-fixes
Home-Network:docs/memattr-6-12-backport
Home-Network:migration/dns-apex-inversion
Home-Network:feat/prod-memattr-and-nodes
Home-Network:docs/node2-memory-refine
Home-Network:feat/prod-node-2
Home-Network:feat/r-state-03-proven
Home-Network:feat/ledger-section-parsing
Home-Network:feat/conformance-run-ledger
Home-Network:chore/cilium-split-merge2
Home-Network:feat/cilium-own-kustomization
Home-Network:docs/poststart-incident
Home-Network:fix/poststart-exit-status
Home-Network:fix/strict-postbuild-substitutions
Home-Network:docs/phase-7-open-prod-node-1
Home-Network:rescued/fix/act-runner-dind-readiness
Home-Network:rescued/fix/node-dns-resilient-upstream
Home-Network:docs/reconcile-with-reality
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implements
docs/17-vulnerability-visibility.md(ADR-0027) in full, R-VULN-01..09: a scheduled in-cluster Trivy scanner, an SSO-gated CVE page, aggregate-only metrics and alerts, and a Renovate-shaped triage bot.Depends on spec PR Home-Network/home-network-k3s#4, merge that first; SPEC_PIN not bumped. The merge SHA does not exist yet, and open PR #160 owns the pin backlog.
Requirements and spec sections served
platform/vuln-scanner/src/inventory.pysrc/main.py,src/trivy.pysrc/state.py,src/report.pysrc/page.py, sidecar, HTTPRoute (login blocked, see operator action).gitea/workflows/cve-triage.yamlplatform/vuln-scanner/alerts.yaml,src/metrics.py, promtool tests.gitea/workflows/scripts/cve_triage.pyplatform/vuln-scanner/acceptances.yaml,src/acceptances.py, L0 checkrbac.yaml,networkpolicy.yaml, digest pins,renovate.json5Also surfaces R-OBS-02/03, R-C2-02, R-UPD-01/02, R-SEC-02, R-IDP-06.
Own Flux tier (
clusters/base/vuln-scanner.yaml):wait: false,dependsOn: platform-config, nothing depends on it, so this tier cannot stall the platform.Gate
Local toolbox gate on
e1adc39: rc 3, UNDETERMINED, not green.conformance(L2/L3) skipped: no cluster.approval-policyis N/A offline and proves nothing locally. L2/L3 tests for this feature are scaffolds that do not run in CI.Renovate validator (
renovate:44.167.0, the tag the workflow runs): validated successfully.Operator action required
.gitea/**,conformance/**,clusters/**and RBAC, soapproval-policyis expected to be red in CI until an administrator reviews. That is the correct stopping point. No agent will post/approve-override.invalid_client) until then; the scanner, metrics and alerts are unaffected. An agent cannot do it: the client secret must be a new key in the existingplatform/keycloak/keycloak-realm-clients.sops.yaml(needs the age private key), and the live realm needs a one-timekcadmclient creation. Exact ordered steps are inplatform/vuln-scanner/README.md, "Operator action required". Those steps are UNVERIFIED.Expected after deploy
workflow_dispatchrun.Spec escalations
credential-requiredis defined as "the registry refused anonymous access", but the egress contract excludes LAN ranges, so the scanner cannot reach the private registry to be refused. Implemented by naming private registries inVULN_PRIVATE_REGISTRIES, short-circuiting before Trivy.Deviations from the recommended shape
script-srcin the CSP, one escaping path, and L1 tests exercise the real rendered page.report.json.UNVERIFIED until it runs in production
Nothing has been deployed. No runtime behaviour has been observed.
platform-adminsrestriction.10.43.210.10. The workflow has never run; Gitea behaviour is tested only against a fake.## Pending Approvalrow format, because issue #91 has no live approve row today.minimumReleaseAgebehaviour on a real update.🤖 Generated with Claude Code
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.