Skip to main content

Docker (Moby) CVE-2026-41568

| EUVDEUVD-2026-36527 MEDIUM
UNIX Symbolic Link (Symlink) Following (CWE-61)
2026-05-18 https://github.com/moby/moby GHSA-vp62-88p7-qqf5
6.1
CVSS 3.1 · Vendor: https://github.com/moby/moby
Share

Severity by source

Vendor (https://github.com/moby/moby) PRIMARY
6.1 MEDIUM
AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:L/A:H
SUSE
MEDIUM
qualitative
Red Hat
3.9 LOW
qualitative

Primary rating from Vendor (https://github.com/moby/moby).

CVSS VectorVendor: https://github.com/moby/moby

CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:L/A:H
Attack Vector
Local
Attack Complexity
High
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
None
Integrity
Low
Availability
High

Lifecycle Timeline

2
Source Code Evidence Fetched
May 18, 2026 - 18:35 vuln.today
Analysis Generated
May 18, 2026 - 18:35 vuln.today

DescriptionCVE.org

Summary

A race condition during docker cp mount setup allows a malicious container to create empty files or directories at arbitrary absolute paths on the host filesystem.

This advisory covers the race during mountpoint creation. The related race during the subsequent mount syscall is tracked in GHSA-rg2x-37c3-w2rh

Details

When copying files into a container, the daemon sets up a temporary filesystem view by bind-mounting volumes into a private mount namespace. During this setup, the mount destination path is first resolved within the container's root filesystem using GetResourcePath, and then used to create the mountpoint (file or directory) if it does not already exist via createIfNotExists.

Between path resolution and mountpoint creation, a process running inside the container can swap a path component for a symlink pointing to an arbitrary location on the host. Because createIfNotExists operates on the already-resolved absolute path using standard os.MkdirAll and os.OpenFile - which follow symlinks in intermediate path components - the symlink is followed and the file or directory is created outside the container root filesystem, as root.

Impact

A malicious container can create empty files or directories at arbitrary absolute paths on the host filesystem, running as root. This enables persistent denial of service - for example:

  • Converting /etc/docker/daemon.json into a directory prevents the daemon from restarting
  • Creating /etc/nologin prevents user logins
  • Overwriting critical system paths with empty files can break host services

The container does not gain read or write access to existing host files - only the ability to create new empty files or directories at chosen paths.

Conditions for exploitation

  • A container must be running with a process that can rapidly create and swap symlinks at a volume mount destination path.
  • An operator must initiate a docker cp into that container, or call the PUT /containers/{id}/archive or HEAD /containers/{id}/archive API endpoints.

Not affected

  • Containers that do not have volume mounts are not affected, as the race occurs during volume bind-mount setup.

Patches

Mountpoint creation is now scoped to the container root using os.Root (Go 1.24+), which refuses to follow symlinks that escape the opened root directory. All filesystem operations in createIfNotExists (MkdirAll, OpenFile) are performed through the os.Root handle, so even if a symlink swap occurs after path resolution, the creation stays confined to the container root.

Workarounds

  • Only run containers from trusted images.
  • Avoid using docker cp with untrusted running containers.
  • Use authorization plugins to restrict access to the archive API endpoints (PUT /containers/{id}/archive, HEAD /containers/{id}/archive).

AnalysisAI

Race condition in Docker's docker cp mount setup allows a process running inside a malicious container to create empty files or directories at arbitrary absolute paths on the host filesystem as root. Affected packages include github.com/docker/docker <= 28.5.2 and github.com/moby/moby <= 28.5.2, with a patch only confirmed for the moby/moby v2 branch at 2.0.0-beta.14. The CVSS vector reflects a scope-changed (S:C), high-availability-impact flaw requiring low privileges and high complexity; no public exploit or CISA KEV listing has been identified at time of analysis, but the attack is realistic when operators use docker cp against containers running untrusted workloads with volume mounts.

Technical ContextAI

CWE-61 (UNIX Symbolic Link Following) describes improper handling of symlink resolution, precisely the root cause here. Docker's daemon, when executing docker cp or servicing the PUT/HEAD /containers/{id}/archive API, constructs a temporary filesystem view by bind-mounting volumes into a private mount namespace. The destination path is resolved using GetResourcePath (which safely anchors resolution within the container root), and then createIfNotExists is called to ensure the mountpoint exists using standard Go os.MkdirAll and os.OpenFile. Critically, neither of those standard library calls is symlink-safe - they follow symlinks in intermediate path components. This creates a TOCTOU (time-of-check-to-time-of-use) window between GetResourcePath resolution and the createIfNotExists filesystem operation. Affected CPE packages are pkg:go/github.com_docker_docker, pkg:go/github.com_moby_moby, and pkg:go/github.com_moby_moby_v2. The fix, available in moby/moby v2, uses os.Root (introduced in Go 1.24), which opens a directory handle and performs all subsequent MkdirAll and OpenFile calls relative to that handle, refusing to follow any symlink that would escape the anchored root directory. A related race during the subsequent mount syscall itself is separately tracked under GHSA-rg2x-37c3-w2rh.

RemediationAI

For operators running moby/moby v2, upgrade to version 2.0.0-beta.14, where mountpoint creation is scoped to the container root using os.Root (Go 1.24+). This fix ensures all MkdirAll and OpenFile calls in createIfNotExists are performed through an anchored root handle that refuses symlink escapes, eliminating the race window. For docker/docker <= 28.5.2 and moby/moby (v1 line) <= 28.5.2, no upstream patch version has been confirmed in the available data - monitor https://github.com/moby/moby/security/advisories/GHSA-vp62-88p7-qqf5 for updates. In the interim, three workarounds are available: first, restrict docker cp and archive API usage to containers running only trusted images, eliminating the attacker-controlled process prerequisite; second, deploy an authorization plugin (Docker AuthZ plugin) to restrict or audit access to the PUT /containers/{id}/archive and HEAD /containers/{id}/archive API endpoints - note this adds operational overhead and may break automation that relies on these endpoints; third, avoid volume mounts in containers exposed to untrusted workloads where possible, since the vulnerability does not affect containers without volume mounts. None of these workarounds address the underlying race - they limit the conditions under which it can be triggered.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

CVE-2025-34221 CRITICAL POC
10.0 Sep 29

Vasion Print (formerly PrinterLogic) Virtual Appliance Host prior to version 25.2.169 and Application prior to version 2

CVE-2024-23054 CRITICAL POC
9.8 Feb 05

An issue in Plone Docker Official Image 5.2.13 (5221) open-source software that could allow for remote code execution du

CVE-2025-23211 CRITICAL POC
9.9 Jan 28

Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Rated critical seve

CVE-2026-46339 CRITICAL POC
10.0 May 19

Unauthenticated remote code execution in 9router (npm package) versions 0.4.30 through 0.4.36 allows network-adjacent at

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 12 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected
SUSE Linux Enterprise Micro 5.3 Affected

Share

CVE-2026-41568 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy