CVE-2024-24557: Github.com/docker/docker Classic Builder Cache Poisoning Vulnerability

MODERATE
Advisory Identifier: GHSA-xw73-rw38-6vjc
CVSS 6.9
CWE-345 CWE-346
Published
Advisory Summary

CVE-2024-24557 is a MODERATE (CVSS 6.9) classic builder cache poisoning vulnerability (CWE-345: Insufficient Verification of Data Authenticity) affecting Github.com/docker/docker libraries in the Go ecosystem. The issue involves classic builder cache poisoning. Remediation is available by upgrading affected packages to version 24.0.9, 25.0.2.

CVE-2024-24557 at a Glance

CVE Identifier CVE-2024-24557
GHSA Identifier GHSA-xw73-rw38-6vjc
Severity MODERATE
CVSS v3.1 Base Score 6.9
CWE Classification CWE-345: Insufficient Verification of Data Authenticity
Affected Product Github.com/docker/docker
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 6.9

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:H/A:L).

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

How to Fix CVE-2024-24557

To remediate this vulnerability, upgrade all affected Github.com/docker/docker dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/docker/docker fixed: 24.0.9
Upgrade github.com/docker/docker to 24.0.9
github.com/moby/moby fixed: 24.0.9
Upgrade github.com/moby/moby to 24.0.9
github.com/moby/moby fixed: 25.0.2
Upgrade github.com/moby/moby to 25.0.2
github.com/docker/docker fixed: 25.0.2
Upgrade github.com/docker/docker to 25.0.2
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/docker/docker

How to Check if You Are Affected

To determine whether your application is affected by CVE-2024-24557, inspect your project dependencies for Github.com/docker/docker:

inspect dependencies for github.com/docker/docker

Analyze the terminal output to locate any version of Github.com/docker/docker in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 24.0.9), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-345: Insufficient Verification of Data Authenticity, where the product does not sufficiently verify the origin or authenticity of data, in a way that causes it to accept invalid data. In Github.com/docker/docker, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

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.

CVE-2024-24557 Affected Github.com/docker/docker Versions

4 component(s)
Fixed Versions:
24.0.925.0.2
Product / Package Ecosystem Affected Versions Fixed Version
github.com/docker/docker
Go
< 24.0.9
24.0.9
github.com/moby/moby
Go
< 24.0.9
24.0.9
github.com/moby/moby
Go
≥ 25.0.0
< 25.0.2
25.0.2
github.com/docker/docker
Go
≥ 25.0.0
< 25.0.2
25.0.2

References

Frequently Asked Questions

What is CVE-2024-24557?
CVE-2024-24557 is a security vulnerability in Github.com/docker/docker involving Classic builder cache poisoning under CWE-345: Insufficient Verification of Data Authenticity.
Which Github.com/docker/docker versions are affected?
Affected versions include releases prior to 24.0.9, 25.0.2 across affected packages: github.com/docker/docker, github.com/moby/moby.
What version fixes CVE-2024-24557?
Upgrading to 24.0.9, 25.0.2 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/docker/docker affected?
Yes, github.com/docker/docker is affected in releases prior to 24.0.9, 25.0.2. Upgrade your dependency to 24.0.9, 25.0.2 or later.
Is github.com/moby/moby affected?
Yes, github.com/moby/moby is affected in releases prior to 24.0.9, 25.0.2. Upgrade your dependency to 24.0.9, 25.0.2 or later.
What is the CVSS score of CVE-2024-24557?
CVE-2024-24557 has a CVSS v3.1 base score of 6.9 (MODERATE) with vector string CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:H/A:L.
What CWE is associated with CVE-2024-24557?
CVE-2024-24557 is classified under CWE-345: Insufficient Verification of Data Authenticity (The product does not sufficiently verify the origin or authenticity of data, in a way that causes it to accept invalid data.).
How can I check Go dependencies for CVE-2024-24557?
Run the dependency tree command: 'inspect dependencies for github.com/docker/docker'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-xw73-rw38-6vjc",
  "modified" : "2024-07-05T18:59:04Z",
  "published" : "2024-02-01T20:51:19Z",
  "aliases" : [ "CVE-2024-24557" ],
  "summary" : "Classic builder cache poisoning",
  "details" : "The classic builder cache system is prone to cache poisoning if the image is built `FROM scratch`.\nAlso, changes to some instructions (most important being `HEALTHCHECK` and `ONBUILD`) would not cause a cache miss.\n\n\nAn 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.\n\nFor example, an attacker could create an image that is considered as a valid cache candidate for:\n```\nFROM scratch\nMAINTAINER Pawel\n```\n\nwhen in fact the malicious image used as a cache would be an image built from a different Dockerfile.\n\nIn the second case, the attacker could for example substitute a different `HEALTCHECK` command.\n\n\n### Impact\n\n23.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).\n\nAll 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.\n\nImage build API endpoint (`/build`) and `ImageBuild` function from `github.com/docker/docker/client` is also affected as it the uses classic builder by default. \n\n\n### Patches\n\nPatches are included in Moby releases:\n\n- v25.0.2\n- v24.0.9\n- v23.0.10\n\n### Workarounds\n\n- Use `--no-cache` or use Buildkit if possible (`DOCKER_BUILDKIT=1`, it's default on 23.0+ assuming that the buildx plugin is installed).\n- Use `Version = types.BuilderBuildKit` or `NoCache = true` in `ImageBuildOptions` for `ImageBuild` call.\n\n",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:C/C:L/I:H/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/docker/docker"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "24.0.9"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/moby/moby"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "24.0.9"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/moby/moby"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "25.0.0"
      }, {
        "fixed" : "25.0.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/docker/docker"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "25.0.0"
      }, {
        "fixed" : "25.0.2"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/moby/moby/security/advisories/GHSA-xw73-rw38-6vjc"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2024-24557"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/moby/moby/commit/3e230cfdcc989dc524882f6579f9e0dac77400ae"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/moby/moby/commit/fca702de7f71362c8d103073c7e4a1d0a467fadd"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/moby/moby/commit/fce6e0ca9bc000888de3daa157af14fa41fcd0ff"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/moby/moby"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-345", "CWE-346" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2024-02-01T20:51:19Z",
    "nvd_published_at" : "2024-02-01T17:15:10Z"
  }
}