Classic builder cache poisoning

Overview

Source
ID
GHSA-xw73-rw38-6vjc
Aliases
CVE-2024-24557
GO-2024-2512

Description

The classic builder cache system is prone to cache poisoning if the image is built `FROM scratch`. Also, changes to some instructions (most important being `HEALTHCHECK` and `ONBUILD`) would not cause a cache miss.

An attacker with the knowledge of the Dockerfile someone is using could poison their cache by making them pull a specially crafted image that would be considered as a valid cache candidate for some build steps.

For example, an attacker could create an image that is considered as a valid cache candidate for: ``` FROM scratch MAINTAINER Pawel ```

when in fact the malicious image used as a cache would be an image built from a different Dockerfile.

In the second case, the attacker could for example substitute a different `HEALTCHECK` command.

### Impact

23.0+ users are only affected if they explicitly opted out of Buildkit (`DOCKER_BUILDKIT=0` environment variable) or are using the `/build` API endpoint (which uses the classic builder by default).

All users on versions older than 23.0 could be impacted. An example could be a CI with a shared cache, or just a regular Docker user pulling a malicious image due to misspelling/typosquatting.

Image build API endpoint (`/build`) and `ImageBuild` function from `github.com/docker/docker/client` is also affected as it the uses classic builder by default.

### Patches

Patches are included in Moby releases:

- v25.0.2 - v24.0.9 - v23.0.10

### Workarounds

- Use `--no-cache` or use Buildkit if possible (`DOCKER_BUILDKIT=1`, it's default on 23.0+ assuming that the buildx plugin is installed). - Use `Version = types.BuilderBuildKit` or `NoCache = true` in `ImageBuildOptions` for `ImageBuild` call.

Summary

20.13k
Total packages affected
Packages with at least one version that is affected by the advisory or has an affected dependency.
3.28k
Packages with a known fix
Packages with versions affected by the advisory that have a greater version that is not affected.
1.49%
Total ecosystem affected
The proportion of packages in the ecosystem that are affected by the advisory (fixed or not).
Affected Version: Introduced: 0, Fixed: 24.0.9, Introduced: 25.0.0, Fixed: 25.0.2
Patched/Unaffected
v24.0.9+incompatible
v25.0.2+incompatible
v25.0.3+incompatible
v25.0.5+incompatible
v25.0.7+incompatible
v26.0.0+incompatible
v27.1.2+incompatible
v27.2.0+incompatible
v27.2.1+incompatible
v27.3.0+incompatible
v27.3.1+incompatible
v27.4.0+incompatible
v27.4.1+incompatible
v27.5.0+incompatible
v27.5.1+incompatible
Affected
v25.0.1+incompatible
v25.0.0+incompatible
v24.0.8+incompatible
v24.0.7+incompatible
v24.0.6+incompatible
v24.0.5+incompatible
v24.0.0+incompatible
v23.0.16+incompatible
v23.0.15+incompatible
v23.0.14+incompatible
v23.0.10+incompatible
v23.0.9+incompatible
v23.0.8+incompatible
v23.0.7+incompatible
v23.0.5+incompatible
v23.0.4+incompatible
v23.0.1+incompatible
v20.10.27+incompatible
v20.10.26+incompatible
v20.10.22+incompatible
v20.10.21+incompatible
v20.10.20+incompatible
v20.10.19+incompatible
v20.10.12+incompatible
v20.10.11+incompatible
v20.10.10+incompatible
v20.10.9+incompatible
v20.10.8+incompatible
v20.10.6+incompatible
v20.10.5+incompatible
v20.10.4+incompatible
v20.10.3+incompatible
v20.10.2+incompatible
v20.10.1+incompatible
v20.10.0+incompatible
v1.13.1
v1.13.0
v1.12.6
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.3
v1.10.2
v1.10.1
v1.10.0
v1.9.1
v1.9.0
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.1
v1.7.0
v1.6.2
v1.6.1
v1.6.0
v1.5.0
v1.4.1
v1.4.0
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.2.0
v1.1.2
v1.1.1
v1.1.0
v1.0.1
v1.0.0
v0.12.0
v0.11.1
v0.11.0
v0.10.0
v0.9.1
v0.9.0
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
v0.7.2
v0.7.1
v0.7.0
v0.6.7
v0.6.6
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.8
v0.4.7
v0.4.6
v0.4.5
v0.4.4
v0.4.3
v0.4.2
v0.4.1
v0.4.0
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.8
v0.1.7
v0.1.6
v0.1.5
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Affected Version: Introduced: 0, Fixed: 24.0.9, Introduced: 25.0.0, Fixed: 25.0.2
Patched/Unaffected
v24.0.9+incompatible
v25.0.2+incompatible
v25.0.3+incompatible
v25.0.5+incompatible
v25.0.7+incompatible
v25.0.8+incompatible
v26.0.0+incompatible
v26.0.1+incompatible
v26.0.2+incompatible
v26.1.0+incompatible
v27.1.2+incompatible
v27.2.0+incompatible
v27.2.1+incompatible
v27.3.0+incompatible
v27.3.1+incompatible
v27.4.0+incompatible
v27.4.1+incompatible
v27.5.0+incompatible
v27.5.1+incompatible
v28.0.0+incompatible
v28.0.1+incompatible
v28.0.2+incompatible
v28.0.3+incompatible
v28.0.4+incompatible
Affected
v25.0.1+incompatible
v25.0.0+incompatible
v24.0.8+incompatible
v24.0.7+incompatible
v24.0.6+incompatible
v23.0.16+incompatible
v23.0.15+incompatible
v23.0.14+incompatible
v23.0.10+incompatible
v23.0.9+incompatible
v23.0.8+incompatible
v23.0.7+incompatible
v23.0.5+incompatible
v23.0.4+incompatible
v23.0.1+incompatible
v23.0.0+incompatible
v20.10.27+incompatible
v20.10.26+incompatible
v20.10.23+incompatible
v20.10.22+incompatible
v20.10.21+incompatible
v20.10.20+incompatible
v20.10.19+incompatible
v20.10.18+incompatible
v20.10.12+incompatible
v20.10.11+incompatible
v20.10.10+incompatible
v20.10.9+incompatible
v20.10.8+incompatible
v20.10.6+incompatible
v20.10.5+incompatible
v20.10.4+incompatible
v20.10.3+incompatible
v20.10.2+incompatible
v20.10.1+incompatible
v20.10.0+incompatible
v1.13.1
v1.13.0
v1.12.6
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.3
v1.10.2
v1.10.1
v1.10.0
v1.9.1
v1.9.0
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.1
v1.7.0
v1.6.2
v1.6.1
v1.6.0
v1.5.0
v1.4.1
v1.4.0
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.2.0
v1.1.2
v1.1.1
v1.1.0
v1.0.1
v1.0.0
v0.12.0
v0.11.1
v0.11.0
v0.10.0
v0.9.1
v0.9.0
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
v0.7.2
v0.7.1
v0.7.0
v0.6.7
v0.6.6
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.8
v0.4.7
v0.4.6
v0.4.5
v0.4.4
v0.4.3
v0.4.2
v0.4.1
v0.4.0
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.8
v0.1.7
v0.1.6
v0.1.5
v0.1.4
v0.1.3
v0.1.2
v0.1.1
v0.1.0