01 · A blocklist is a release decision—not an exploit detector
Your pipeline can report zero critical findings and still promote an image that crosses a dangerous trust boundary. It can also fail every build on a rejected CVE or a Windows-only condition in a Linux deployment. Neither outcome is evidence-driven security.
The objective here is precise: stop promotion when a trusted scan reports a listed vulnerable component, or when the evidence is incomplete. This is a reviewed September 2026 baseline, not an automatically maintained threat feed or a claim that every listed package is remotely exploitable everywhere.
Threat model: an untrusted change introduces a vulnerable dependency; a compromised builder can forge reports; a controller or runtime turns limited input into wider authority. The reference evaluator assumes a trusted promotion job whose policy and tools cannot be rewritten by the application pull request. If the change being reviewed can disable its own gate, the gate is advisory.
The boundaries are image → container process, controller → Kubernetes API and runtime → host. Container UID 0, a usable token and host-root execution are different findings. Each transition needs evidence; no CVE identifier proves all three.
02 · The verified CVE ledger: 37 candidates, three decisions
Reviewed September 16, 2026 against public CNA records and maintainer references: 34 deny-on-match entries, two platform-review entries and one rejected exclusion. “Deny” is this reference policy's conservative release choice, not a severity rating or proof of active exploitation. A review match also stops promotion; it is not an automatic exception.
Listed patch versions are historical fix floors. Select a supported release containing all applicable fixes; branch backports and product editions change the right answer. No KEV membership, CVSS score or “exploited within hours” assertion is inferred from a vulnerability title.
Download reviewed ledger and policy · JSON · v1.0.0. Its example approval window expires September 23, 2026; renewal requires another review.
| CVE / component | Scope / decision | Mechanism and remediation |
|---|---|---|
| CVE-2026-5450 glibc | image DENY | One-byte scanf heap overwrite requires a specific %mc width and controlled input. Use distribution patch/backport evidence, not only the upstream version. Primary reference |
| CVE-2026-0861 glibc | image DENY | memalign-family integer overflow requires control of very large size and alignment inputs. Review the call path and distribution fixes. Primary reference |
| CVE-2026-5928 glibc | image DENY | ungetwc can crash or under-read a buffer under particular character-encoding conditions. Disclosure is not a demonstrated RCE. Primary reference |
| CVE-2026-5358 glibc | rejected EXCLUDED | CNA rejected the NIS+ issue: the provisional API and trusted-server requirement did not establish the claimed security boundary crossing. Primary reference |
| CVE-2026-5435 glibc | image DENY | Deprecated DNS printing functions can write out of bounds on TSIG records. Patch the distribution package; review legacy API use. Primary reference |
| CVE-2026-45447 OpenSSL | image DENY | PKCS7_verify use-after-free; conditional code execution, not all TLS processing. Fix floors: 3.0.21, 3.4.6, 3.5.7, 3.6.3, 4.0.1. CMS APIs are not affected. Primary reference |
| CVE-2026-21441 urllib3 | image DENY | Redirect decompression can exhaust resources with preload_content=False. Affected 1.22 to before 2.6.3; disabling redirects is a limited workaround. Primary reference |
| CVE-2026-21226 azure-core Python | image DENY | Authorized network attacker and unsafe deserialization. Affected 1.1.0 to before 1.38.0; not a universal unauthenticated RCE. Primary reference |
| CVE-2026-50195 containerd | node/runtime DENY | Checkpoint import can poison a local image tag consumed by another pod under IfNotPresent/Never. Fix floors 2.1.9, 2.2.5, 2.3.2. Victim identity is not automatically host root. Primary reference |
| CVE-2026-53492 containerd | node/runtime DENY | Untrusted checkpoint CDI edits require enabled CDI and a matching host device specification. Fix floors 2.1.9, 2.2.5, 2.3.2. Primary reference |
| CVE-2026-53488 containerd | node/runtime DENY | Unvalidated image labels can reach a label-consuming plugin and host execution. Fix floors 1.7.33, 2.0.10, 2.1.9, 2.2.5, 2.3.2. Primary reference |
| CVE-2026-46680 containerd | node/runtime DENY | Numeric image User parsing can bypass runAsNonRoot. Fix floors 1.7.32, 2.0.9, 2.2.4, 2.3.1; subsequent advisories need newer fixes. Container root is not host root. Primary reference |
| CVE-2026-53489 containerd | node/runtime DENY | Checkpoint log symlink handling can expose host files through container logs. Fix floors 2.1.9, 2.2.5, 2.3.2. Primary reference |
| CVE-2026-47262 containerd | node/runtime DENY | Crafted image causes runtime memory exhaustion. Fix floors 1.7.33, 2.0.10, 2.1.9, 2.2.5, 2.3.2; package scanning alone does not inspect every malicious metadata condition. Primary reference |
| CVE-2026-34040 Moby / Docker Engine | node/runtime DENY | Daemon authorization-plugin bypass, fixed in 29.3.1. A workload-image scan does not attest to the node daemon. Primary reference |
| CVE-2026-56848 Node.js | image DENY | HTTP/2 re-entrancy produces use-after-free in affected 22.x, 24.x, 26.x lines. Apply July 2026 security releases or later supported fixes; bug class alone is not reliable RCE proof. Primary reference |
| CVE-2026-58043 Node.js | image DENY | Permission-model path boundary handling over-grants filesystem access. Requires --permission and relevant grants; consult July 2026 fixes. Primary reference |
| CVE-2026-21636 Node.js | image DENY | Experimental v25 network permission boundary can be bypassed via Unix-domain sockets. Review local socket access as well as TCP egress. Primary reference |
| CVE-2026-75604 Next.js | platform review REVIEW | Windows-hosted routing/cache path traversal can expose build data and enable RCE under documented conditions. Fixes 15.5.24 and 16.3.3. Linux match requires applicability review. Primary reference |
| CVE-2026-4342 ingress-nginx | controller DENY | Combined annotations permit configuration injection under controller authority. Fix floors 1.13.9, 1.14.5, 1.15.1; review current support and follow-ups. Primary reference |
| CVE-2026-3288 ingress-nginx | controller DENY | rewrite-target annotation injection; separate from path-field injection. Fix floors 1.13.8, 1.14.4, 1.15.0. Primary reference |
| CVE-2026-24512 ingress-nginx | controller DENY | Ingress path-field injection can expose controller-accessible Secrets. Fix floors 1.13.7, 1.14.3; review Ingress write authority. Primary reference |
| CVE-2026-42945 NGINX native engine | image/controller DENY | Native rewrite-module heap overflow requires a particular directive/capture pattern; code execution depends on ASLR conditions. Open Source fix 1.30.1, also 1.31.0; Plus has separate patch lines. Primary reference |
| CVE-2026-33555 HAProxy | image DENY | HTTP/3 body-length handling can cause backend request desynchronization. Introduced in 2.6; record cites 3.3.6 fix. Check maintained-branch backports. Primary reference |
| CVE-2026-55204 HAProxy | image DENY | HPACK NULL dereference under memory pressure causes worker DoS. Record covers through 3.4.0 and fix commit 9a6d1fe; verify its inclusion in your release. Primary reference |
| CVE-2026-25518 cert-manager | controller DENY | Attacker-controlled/intercepted DNS can crash DNS-01 processing. Affected 1.18.0–1.18.4 and 1.19.0–1.19.2; fixes 1.18.5, 1.19.3. Availability impact, not credential theft. Primary reference |
| CVE-2026-41184 Calico install-cni | controller DENY | Token-template substitution can log ServiceAccount credentials; default kubeconfig path is unaffected. Fixes include 3.31.6 and 3.32.0; review log readers and rotate established exposures. Primary reference |
| CVE-2026-41185 Calico Azure IPAM | controller DENY | Token-based configurations can write credentials to node CNI logs. Edition-specific fixes differ; inventory log readers and rotate confirmed exposures. Primary reference |
| CVE-2026-6720 calicoctl | tool image DENY | Explicit info/debug logging can disclose connection credentials. Default panic logging is unaffected. Review CI logs and edition-specific fixes. Primary reference |
| CVE-2026-41186 Calico debug server | controller DENY | Opt-in unauthenticated pprof listeners can expose sensitive process data; disabled by default. Calico fixes include 3.31.6, 3.32.1; other editions differ. Primary reference |
| CVE-2026-24051 OpenTelemetry Go SDK | platform review REVIEW | Local PATH hijacking of ioreg is macOS/Darwin-specific, not generic Linux CSI RCE. Fixed 1.40.0; advisory lower-bound fields differ between 1.20.0 and 1.21.0. Primary reference |
| CVE-2025-61729 Go crypto/x509 | image DENY | Certificate hostname-error formatting can exhaust resources. Fixes Go 1.24.11 and 1.25.5; rebuild affected binaries, not just the OS base. Primary reference |
| CVE-2026-53435 Jenkins | CI controller DENY | config.xml deserialization can cross into HTTP handling and privileged actions. Fixes 2.568 / LTS 2.555.3. No exploitation-in-hours claim is asserted. Primary reference |
| CVE-2026-70426 Jenkins Remoting | CI controller/agent DENY | Fallback deserialization class-filter bypass for malicious agents or Agent/Connect holders. Fixes Jenkins 2.576 / LTS 2.568.2; consult Remoting branch fixes. Primary reference |
| CVE-2026-84645 Jenkins | CI controller DENY | Nested top-level configuration objects can handle HTTP requests and lead to RCE. Fixes 2.580 / LTS 2.568.3; earlier floors do not cover this follow-up. Primary reference |
| CVE-2026-33001 Jenkins | CI controller DENY | Unsafe tar symlink extraction can write under controller permissions; job configuration or agent control required. Fixes 2.555 / LTS 2.541.3. Primary reference |
| CVE-2022-36804 Bitbucket Server / Data Center | CI control plane DENY | Command injection requires repository read access, possibly anonymous for public repositories. Historical 2022 vulnerability; use vendor branch-specific ranges. Primary reference |
Why score-only and version-only rules both fail
The glibc maintainer describes a constrained scanf pattern; Ubuntu publishes distribution-specific fixed builds. The score cannot establish your application uses that pattern. An older-looking upstream version cannot establish that a distribution backport is missing. Record the conservative promotion decision separately from deployment-specific exploitability. glibc advisory; Ubuntu package status.
03 · Interactive decision map: what authorizes release?
Which bytes were scanned?
Use a repository-qualified digest. For a multi-platform image, inspect each runnable platform manifest and retain its relationship to the parent index. An amd64 result does not cover arm64.
Who produced the report?
Generate evidence in a trusted job. Protect the scanner, database source and policy revision. A digest field in untrusted JSON is a claim, not authentication.
Is the identifier still valid?
Review CNA state, aliases and vendor corrections. Rejected identifiers should not create permanent build failures. The sample uses exact CVE-ID matching; alias normalization is separate.
Is the condition applicable?
Separate package presence, affected build, reachable code and platform conditions. Conservative release blocking does not prove a working exploit.
Can another route deploy?
Require the gate on manual releases and emergency paths too. Keep release credentials out of untrusted build jobs and test denial of missing evidence.
Does the node remain exposed?
Map actual workload placement to node/runtime fix evidence. An application rebuild cannot replace the host daemon; platform patching needs its own gate.
04 · A small, testable gate—not a silently successful pipe
The downloadable evaluator supports Trivy container-image JSON schema 2 only. It rejects invalid structure, empty inventory, mismatched repository digest, expired policy and explicit suppressed findings. Grype uses another report shape; silently feeding it to a Trivy policy is not interoperability.
Download reference evaluator · JavaScript module · v1.0.0. Requires Node.js 22+. Review and place both downloaded files in a trusted policy workspace. Do not execute code fetched from a moving URL without verifying the approved revision.
Collect in a trusted Linux CI job
Prerequisites: approved Trivy executable, Node.js 22+, registry read access, downloaded evaluator/policy, and IMAGE set to a single-platform repository digest. Pin your scanner by verified release checksum or image digest. The temporary directory is job evidence, not a deployment output.
bashset -euo pipefail
: "${IMAGE:?Set IMAGE to registry/repository@sha256:...}"
work=$(mktemp -d)
printf '{}\n' > "$work/trivy.yaml"
: > "$work/empty.ignore"
trivy --version > "$work/scanner-version.txt"
trivy image \
--config "$work/trivy.yaml" --cache-dir "$work/cache" \
--image-src remote --platform linux/amd64 \
--scanners vuln --pkg-types os,library --list-all-pkgs \
--severity UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL \
--ignorefile "$work/empty.ignore" --ignore-unfixed=false \
--show-suppressed --skip-db-update=false \
--exit-code 0 --format json --output "$work/report.json" "$IMAGE"
node image-gate-v1.mjs "$work/report.json" image-cve-policy-v1.json "$IMAGE"
# Retain evidence with your CI provider's always-run artifact step.
# Promotion must require this job to succeed.--exit-code 0 delegates finding decisions to the evaluator; scanner execution errors still fail the shell step. No pipeline hides the scanner's exit behind a later command. Consult the Trivy CLI reference for the pinned release.
| Exit | Decision | Meaning |
|---|---|---|
| 0 | pass-no-listed-match | This check passed; other security checks still apply. |
| 1 | deny | At least one deny entry matched. Stop promotion. |
| 2 | evidence error | Invalid input, missing inventory or policy error. Stop. |
| 3 | review | Platform-specific match needs an independently approved decision. Stop. |
What the sample does not implement
The digest check compares report fields; it does not authenticate their producer. A fresh cache requests current data but cannot prove an upstream mirror is fresh. Production adoption must enforce scanner/database trust and age, reject unexpected TRIVY_* overrides, normalize aliases, cover every architecture and bind evidence cryptographically. Run integration cases using a known affected artifact and a vendor-patched artifact. The reference unit fixtures are not a claim that your registry has been scanned.
“No listed match” is narrower than “vulnerability-free.” Keep your severity, exploitation, support-lifecycle and configuration rules. Vendor advisory matching and package provenance matter; see Trivy vulnerability matching.
05 · Carry the decision through promotion and admission
A report is not a signature; a signature is not a security approval. Establish the producer identity, artifact digest, platform, scanner version, database age, policy version and approval freshness. Only the trusted promotion service should attest that these checks passed. An application job must not authorize its own release by uploading arbitrary JSON.
These authorized read-only commands collect node and workload evidence separately. The runtime version string is a triage lead, not proof that a distribution fix is absent.
bashkubectl get nodes -o json | jq '.items[] | {
node:.metadata.name, runtime:.status.nodeInfo.containerRuntimeVersion,
osImage:.status.nodeInfo.osImage, kernel:.status.nodeInfo.kernelVersion
}'
kubectl get pods -A -o json | jq '.items[] | {
namespace:.metadata.namespace, pod:.metadata.name, node:.spec.nodeName,
images:[.spec.initContainers[]?.image,.spec.containers[]?.image,
.spec.ephemeralContainers[]?.image],
imageIDs:[.status.initContainerStatuses[]?.imageID,
.status.containerStatuses[]?.imageID,
.status.ephemeralContainerStatuses[]?.imageID]
}'Keep exports restricted because they expose infrastructure structure. K8SEC Agent can correlate read-only workload, identity and exposure relationships; it does not patch nodes, execute in pods or collect Secret values.
06 · Detection, exceptions and recovery
Route a package match to its image owner, an incomplete scan to the evidence-pipeline owner, and an unapproved running digest to platform security. Monitor overridden checks, registry retagging, unexpected attestation issuers, stale database warnings and node-version drift. A previous green build cannot explain a different digest running today.
A generic runtime alert cannot detect a CVE number. Unexpected child processes, credential-file reads or controller egress support hypotheses; attribution needs context. If a controller wrote credentials into retained logs, patching the behavior does not revoke credentials already copied out. Preserve evidence, restrict log readers and rotate confirmed exposures through the incident process.
Exceptions are signed decisions, not ignored strings
Name the CVE, package, exact digest, environment, owner, rationale, control, independent approver and expiry. A VEX “not affected” assertion needs a trusted issuer and a defensible justification. A blanket package ignore is not equivalent. The reference evaluator implements no waiver feature; add one only with scope, signature and expiry tests.
Handle confirmed exploitation through incident response rather than ordinary release exceptions. Remove rejected entries through policy review, preserving why. Re-review the ledger weekly and on vendor correction. An old identifier such as CVE-2022-36804 remains relevant when affected software remains deployed.
07 · Operator cheat sheet and release checklist
| Question | Required evidence | False conclusion |
|---|---|---|
| Same artifact? | Digest, platform and runtime imageID relationship | “We scanned that tag yesterday.” |
| Patched package? | Exact package build and vendor backport status | “The upstream number is old.” |
| Complete coverage? | Inventory, binary provenance and acknowledged gaps | “No packages means no risk.” |
| Patched node? | Runtime/node-image inventory and vendor fix | “The application SBOM is clean.” |
| Enforced decision? | Denied alternate release/admission tests | “The dashboard is green.” |
| Recovered exposure? | Rollout plus credential/integrity review | “A rebuild revoked stolen tokens.” |
0 controls verified
This browser-only checklist resets on reload. It does not scan or transmit your environment.
08 · Final word: fail on evidence you can defend
I want a release gate to explain which bytes it inspected, which policy it applied and where its visibility stops. A large red number cannot answer those questions. Neither can a clean report for the wrong artifact.
A credible blocklist rejects bad releases without inventing certainty.
Riad DAHMANI — K8SEC Security Research
Primary sources and verification trail
Each row links its public CNA record and primary reference. The implementation follows the Trivy report schema. Policy choices and enforcement guidance are K8SEC analysis, not vendor compliance requirements. JavaScript has fixture tests; shell examples receive syntax validation, not live production execution. The confidential source document is not distributed.
Connect artifact risk to infrastructure authority
The companion article follows model proposals through tools, identities and independent evidence.
Read the agentic-attack anatomy Explore KAOS