Back to Blog & Resources
CVE analysis / CI/CD / supply-chain security

2026 Container Image CVE Blocklist: Build a CI/CD Gate That Fails Closed

A verified CVE ledger, a testable promotion gate, and the boundaries an image scan cannot cover—from base libraries to container runtimes and CI controllers.

Riad DAHMANIK8SEC Security ResearchReviewed September 16, 2026
Neon shield and magnifying glass representing container image CVE policy inspection
Two enforcement lanes: artifact evidence controls image promotion; node inventory and platform policy control runtime exposure.

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.

Image contents
Base libraries, language dependencies and linked binaries. Scan the exact final artifact. A patched builder does not establish a patched runtime image.
Platform controllers
Ingress, certificate, CNI and CI components may arrive as images but possess infrastructure authority. Review their configuration and identities too.
Node runtime
containerd and Docker Engine usually live outside the workload image. A clean application SBOM cannot establish that the node daemon is patched.
Promotion authority
An accurate scan is ineffective if another job can sign arbitrary evidence, retag the release or deploy without verification.

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.

Corrections that matter. CVE-2026-5358 is REJECTED. CVE-2026-24051 is macOS/Darwin-specific, not a generic Linux CSI RCE. CVE-2026-75604 has Windows-hosting conditions. CVE-2026-3288 concerns rewrite-target annotations; CVE-2026-24512 concerns the Ingress path field.

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.

Adjudicated component, enforcement scope, prerequisites and patch evidence
CVE / componentScope / decisionMechanism 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?

Exact artifact + complete evidence + reviewed policy → release decision
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.

ExitDecisionMeaning
0pass-no-listed-matchThis check passed; other security checks still apply.
1denyAt least one deny entry matched. Stop promotion.
2evidence errorInvalid input, missing inventory or policy error. Stop.
3reviewPlatform-specific match needs an independently approved decision. Stop.
Empty does not mean safe. A scratch image may legitimately have no packages, while a custom binary may be invisible to the scanner. The evaluator stops for coverage review rather than declaring either clean.

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.

CI
Protect required checks and release credentials. Deploy the scanned digest; changed bytes require new evidence.
Registry
Retain immutable reports and attestations. Test actual pull/promotion rejection; a vulnerability dashboard is not enforcement.
Admission
Verify issuer, subject digest, predicate, policy version and age. Define outage behavior and a separately audited emergency path.
Node fleet
Inventory runtime and node-image patch provenance. Drain/replace affected nodes through supported platform operations.

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.

1 · Contain the verified route
Stop promotion of the affected digest; assess existing workloads and credential exposure. Record each temporary control and its owner.
2 · Repair the correct component
Update the dependency, relink the binary, replace the controller or patch the host runtime. Keep approved rollback configuration, but do not roll software back into a known vulnerable version.
3 · Validate the actual rollout
Rescan the new digest, confirm running imageIDs and check for residual old pods and stale approvals. Repeat the relevant harmless negative test.

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

QuestionRequired evidenceFalse 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
On this pageScopeCVE ledgerDecision mapReference gatePromotionRecoveryCheat sheetFinal word