FR
live

Docker Engine 29.8.2 fixes a DNS flaw that disables TLS on image registries

The 29.8.2 release closes 14 daemon and BuildKit vulnerabilities, including CVE-2026-92543, which lets a malicious DNS response skip TLS verification or fall back to HTTP during an image pull. Update before your next CI/CD build and pin digests to block image substitution.

A container port in fog, a gantry crane lowering a single shipping container onto the wrong stack, one amber warning light glowing on the crane cab.

September 30, 2026. Docker ships Docker Engine 29.8.2, a maintenance release that closes 14 vulnerabilities across the daemon and BuildKit. September 30, 2026. The most severe, CVE-2026-92543, lets a malicious DNS response disable TLS certificate verification or fall back to HTTP when a client talks to an image registry. September 30, 2026. The vendor also bumps BuildKit to v0.33.1, fixing 11 flaws including several build-cache poisoning issues. Why it matters: CVE-2026-92543 opens the door to image substitution — the worst nightmare of a software supply chain, right in the middle of CI/CD pipelines.

A DNS response that strips TLS from the registry

The mechanism fits in one sentence. When the Docker client resolves a registry’s hostname, it trusts the DNS answer it receives to establish the connection. CVE-2026-92543 targets exactly that link: a forged DNS response can make the connection skip TLS certificate verification, or fall back to plaintext HTTP, while the operator still believes they are talking to their private registry.

The consequences stack up in two layers. First, registry credentials — often a GitLab or GitHub access token, or a cloud secret — travel in cleartext or to a third party. Second, the image being pulled can be swapped for a malicious one carrying the same name, which the daemon accepts and runs as if nothing had happened.

The danger is amplified by where this flaw sits in the code lifecycle. A registry is rarely queried by a human: CI runners, clusters, and build agents hit it continuously. An attacker in a man-in-the-middle position on the network — a shared Wi-Fi, a compromised DNS provider, a host inside the LAN — can poison the supply of an image that dozens of deployments will then consume downstream.

A four-step attack scenario

In practice, the attack unfolds in four steps. First, the attacker places themselves in the path of DNS resolution — a shared network, a compromised router, or a hijacked DNS provider is enough. Second, they answer the client’s query with the address of their own server, impersonating the legitimate registry. Third, the client, stripped of TLS verification or bounced to HTTP, accepts the connection and sends its credentials. Finally, the attacker serves a forged image that the daemon stores and then runs.

The most mundane entry point is not the production server but the developer’s laptop. A docker pull run from a corporate network, a hotel Wi-Fi, or a coworking space, against an unreliable DNS server, is enough to trigger the whole chain. Once resolution is diverted, the daemon does the rest without anyone noticing.

The lesson is simple: an image supply chain is defended where it resolves. Refusing any registry without TLS, pinning digests, and signing images makes forgery detectable even when DNS resolution has been compromised — the 29.8.2 fix closes the flaw, but it is these habits that keep the next one from punching the same hole.

Three daemon flaws, eleven in BuildKit

Docker Engine 29.8.2 is not just CVE-2026-92543. The daemon fixes two more flaws, and BuildKit closes eleven.

CVE-2026-53493 sits in the containerd image-pull path: a crafted OCI index with deeply nested or widely fanned-out descriptors can drive unbounded CPU and memory use. A poisoned public repository can take down a daemon that tries to resolve it — a denial-of-service vector at nearly zero cost.

CVE-2026-92542 concerns Swarm. An unprivileged user on a node could inject forged Ethernet frames into the encrypted overlay networks of peer nodes. The gap breaks the data-plane isolation of the cluster, exactly where encryption was supposed to hold.

The scope is broad in practice: every deployment on the 29.x line earlier than 29.8.2 is affected, and because the daemon and BuildKit ship together in most installs, a single upgrade covers both surfaces. Teams that pinned an older 29.x release for stability should treat this as the exception worth breaking the freeze for.

The bulk of the fix is elsewhere: the BuildKit update to v0.33.1 closes 11 CVEs, from CVE-2026-93315 through CVE-2026-93323, plus CVE-2026-93326. Many are denial-of-service against the build daemon: a malformed LLB operation, an oversized Dockerfile or .dockerignore, or a malicious external frontend can crash the daemon or exhaust its memory.

Two flaws in that list deserve extra attention because they hit the integrity of the build, not just its availability.

CVE-2026-93317 and CVE-2026-93318 allow build-cache poisoning: a client manipulating the low-level LLB API, or a malicious image, can deposit layers whose content does not match the announced digest. Because the cache is reused from one build to the next, the corruption then propagates silently to later builds.

CVE-2026-93326 targets source policies: a forged Git build source — via a Git bundle or a remote URL that does not match the expected identifier — can bypass rules that restrict which repositories may be built from. It is a chain-of-trust audit gap more than an execution bug: it lets you build from a repository your policy was meant to forbid.

The common thread is clear. While everyone watched the security of the final image, it is the intermediate steps — DNS resolution, cache, source — that turn out to be the most exposed. A software supply chain is defended at its boundaries, not only at its output.

What to patch and how to verify

The update is unambiguous: move the daemon to 29.8.2, which pulls BuildKit v0.33.1, containerd v2.3.6, and runc v1.5.2 into its static binaries. Check the installed version, then compare:

bash
# Daemon and client versions
docker version

# BuildKit version bundled with the daemon
docker buildx version

# Move the daemon to 29.8.2 on Debian/Ubuntu (apt example)
apt-get update && apt-get install -y docker-ce=5:29.8.2-* docker-ce-cli=5:29.8.2-*

The update alone does not neutralize the DNS risk behind CVE-2026-92543. Two structural habits complete it:

  • Pin digests. Reference images as image@sha256:… rather than a floating tag, so substitution becomes detectable: the content can no longer change without breaking the expected manifest.
  • Harden resolution. Enforce TLS on registries, publish private-registry certificates in the daemon configuration (/etc/docker/certs.d/), and monitor the DNS answers of build hosts.

CVE-2026-92542, for its part, requires patching every Swarm node and reviewing the rights of accounts that run code there: an unprivileged user must never reach the cluster’s data plane.

Self-hosters have one more surface to check: a pull-through cache or private mirror sits one hop earlier in the chain. It must enforce TLS and validate upstream digests itself, or the same attack applies there. A corporate Docker Hub mirror deserves the same severity as a production registry, since every build downstream inherits whatever it serves.

Verdict

If your runners or daemon pull images from a private registry, treat 29.8.2 as a priority security update: CVE-2026-92543 turns any network intermediary into an entry point to your supply chain. If you build with BuildKit against sensitive repositories, the update is equally urgent — cache poisoning and source-policy bypass corrupt whole builds without leaving a visible trace. In every case, the version is a prerequisite, not an end in itself: pin digests, enforce TLS, and restrict the accounts that touch the data plane, or the next DNS flaw will punch the same hole.

References

The cyber brief, every Tuesday

The flaws that matter and the patches to apply, in a ten-minute read.

No spam. One-click unsubscribe.
read next

On the same topic

Kubernetes 1.38 starts the post-quantum migration with ML-DSA certificates

The v1.38.0-alpha.1 pre-release adds beta support for ML-DSA signing of pod certificates and CSRs, preparing the control plane for the post-quantum era. Enable the CertificateSigningRequestMLDSA feature gate on a test cluster and map your gRPC dependencies before upgrading.

GitLab 19.4.1 closes two CVSS 9.9 RCEs in the CI/CD regex parser

On September 23, 2026, GitLab released a critical patch for 19.4.1, 19.3.3, and 19.2.7, closing two remote code execution flaws at CVSS 9.9 in the pipeline’s regular-expression parser, triggerable by a forged .gitlab-ci.yml file. Any authenticated user who can edit a CI/CD configuration becomes a vector: patch self-managed instances immediately.

← Back to the feed

Type at least two characters.

↑ ↓ navigate ↵ open esc dismiss