Race condition In github.com/moby/moby
Description
Docker: Race condition in docker cp allows bind mount redirection to host path
Summary
A race condition during docker cp mount setup allows a malicious container to redirect a bind mount target to an arbitrary host path, potentially overwriting host files or causing denial of service.
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 is created inside the container root and then a bind mount is attached using the container-relative path resolved to an absolute host path.
Between mountpoint creation and the mount() syscall, a process running inside the container can replace the destination (or a parent path component) with a symlink pointing to an arbitrary location on the host. The mount() syscall follows the symlink, causing the volume to be bind-mounted onto an arbitrary host path instead of the intended container path.
Impact
A malicious container can redirect a volume bind mount to an arbitrary host path. The impact depends on the volume content and mount options:
If the volume is writable, arbitrary host files at the redirected path could be overwritten with the volume's contents.
If the volume is read-only, the host path is masked by the mount for the duration of the operation, causing denial of service.
In all cases the mount is temporary (torn down after the docker cp completes), but the effects of any writes persist.
Conditions for exploitation
A container must have at least one volume mount.
A process inside the container must be able to rapidly create and swap symlinks at the 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.
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).
Mitigation
Update Impact
Minimal update. May introduce new vulnerabilities or breaking changes.
Ecosystem | Package | Affected version | Patched versions |
|---|---|---|---|
go | - | ||
go | 2.0.0-beta.14 | ||
go | - |
Aliases
References