CVE-2025-68121 and Docker: What you need to know before you update

5 min read
March 20, 2026
March 18, 2026
Last updated:
March 20, 2026
Portainer Team
Portainer Team
,
Follow on LinkedIn
Table of Contents

Share this post
This is some text inside of a div block.

Key takeaways

A vulnerability in Go's crypto/tls library (CVE-2025-68121) is currently affecting every version of Docker Engine except the most recent release. The CVSS score is 10.0 critical. Whether or not you believe this is genuinely dangerous in your environment, that score alone will trigger automated compliance alerts, and most enterprise security policies prohibit running software with a CVE above 9.0. The practical consequence is that this lands on someone's desk regardless of how you assess the actual risk.

Let’s explain what's actually going on, and why the fix is more involved than it looks.

What the vulnerability is

This is not a bug in Docker itself. It's a flaw in the Go standard library that affects any binary compiled with a vulnerable version of Go. The issue is in crypto/tls: under specific conditions involving TLS session resumption, certificate validation can be bypassed if the underlying TLS config is mutated between the initial handshake and a resumed one. Wiz's research team has noted that exploitation requires an attacker to already possess a previously valid certificate, which argues that the NVD score of 10.0 is aggressive... but that nuance does not change your compliance posture. The score is what it is, and your tooling will flag accordingly.

Which Docker versions are affected

All Go versions below 1.24.13, and Go 1.25.0 through 1.25.6, are vulnerable. Working through Docker's release history, that means (as of writing) every currently deployed Docker Engine version except 29.3.0. The entire 28.x branch shipped with Go 1.24.9 at its most recent patch and has not received a backported fix. The 29.x branch was vulnerable through 29.2.1, which shipped with Go 1.25.6. Docker Engine 29.3.0, released March 2026, is the first clean build.

You can verify what you're running with:

docker version --format '{{.Server.GoVersion}}'

If the output is anything below go1.24.13 or between go1.25.0 and go1.25.6, you're on a vulnerable build.

Why the update is not straightforward

The fix requires updating to Docker Engine 29.3.0. That means crossing the v29.0 boundary, which introduced breaking API changes with real operational consequences. Persistent volume drivers that were compatible with 28.x and earlier may not work correctly after the upgrade. Swarm behavior changed materially in v29.0 as well, with changes to encrypted overlay networking that directly affect production Swarm deployments.

The short version: do not trigger an automated update without testing first. If you have persistent storage drivers (anything beyond bind mounts and native NFS), validate those explicitly before rolling out to production. If you are running Docker Swarm at scale, the 29.0 API changes are significant enough to warrant a proper upgrade plan with a tested rollback path.

A word on Swarm specifically

If you are running Docker Swarm in production today, this vulnerability creates some pressure to address your orchestration strategy. Remediating CVE-2025-68121 requires an upgrade that meaningfully changes how Swarm behaves. That is not a reason to panic. It is, however, a reasonable prompt to ask whether the upgrade effort is better spent migrating toward Kubernetes rather than patching your way through another generation of a platform Docker Inc. has been quietly deprioritizing for years. If you have been deferring that conversation, this is a good moment to have it. Portainer supports both paths, and can manage a Kubernetes migration without forcing you to rebuild your entire operational model from scratch.

For more guidance around how to begin your migration from Docker Swarm to Kubernetes, we’ve prepared a whitepaper to outline your options and start you on your journey.

{{article-cta}}

We’re also here to help as well - reach out to our team for assistance.

A note on Portainer

Portainer is built as a Go binary, so it was also affected. Our latest LTS patch release (2.39.1) includes the updated Go runtime, and we recommend upgrading Portainer alongside your Docker update if you haven’t already.

Infrastructure Moves Fast. Stay Ahead.

Subscribe to our monthly newsletter

Conclusion

Plan the update to Docker 29.3.0. Test your storage drivers and any Swarm-specific configurations before rolling it out. If you are on an older LTS-style deployment running 28.x, recognize that there is no patched version in that branch and you are dependent on your distro vendor backporting the Go runtime.

For Swarm operators: treat this as the prompt to accelerate your Kubernetes migration planning. Do not let a compliance timer force you into a rushed upgrade with consequences you have not thought through.

Portainer Team
Follow on LinkedIn

https://www.portainer.io/whitepapers/running-docker-swarm-in-2026

Tip  / Call out

No items found.