CVE-2024-45310: Github.com/opencontainers/runc Runc Can Be Confused To Vulnerability

MODERATE
Advisory Identifier: GHSA-jfvp-7x6p-h2pv
CVSS 3.6
CWE-363 CWE-61
Published
Advisory Summary

CVE-2024-45310 is a MODERATE (CVSS 3.6) runc can be confused to vulnerability (CWE-363: Race Condition Enabling Link Following) affecting Github.com/opencontainers/runc libraries in the Go ecosystem. The issue involves runc can be confused to create empty files/directories on the host. Remediation is available by upgrading affected packages to version 1.1.14, 1.2.0-rc.3.

CVE-2024-45310 at a Glance

CVE Identifier CVE-2024-45310
GHSA Identifier GHSA-jfvp-7x6p-h2pv
Severity MODERATE
CVSS v3.1 Base Score 3.6
CWE Classification CWE-363: Race Condition Enabling Link Following
Affected Product Github.com/opencontainers/runc
Package Ecosystem Go
Published Date
Last Updated

Security Impact

CVSS: 3.6

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

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

How to Fix CVE-2024-45310

To remediate this vulnerability, upgrade all affected Github.com/opencontainers/runc 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/opencontainers/runc fixed: 1.1.14
Upgrade github.com/opencontainers/runc to 1.1.14
github.com/opencontainers/runc fixed: 1.2.0-rc.3
Upgrade github.com/opencontainers/runc to 1.2.0-rc.3
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/opencontainers/runc

How to Check if You Are Affected

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

inspect dependencies for github.com/opencontainers/runc

Analyze the terminal output to locate any version of Github.com/opencontainers/runc in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.1.14), 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-363: Race Condition Enabling Link Following, where the product checks the status of a file or directory before accessing it, which produces a race condition in which the file can be replaced with a link before the access is performed, causing the product to access the wrong file. In Github.com/opencontainers/runc, 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

### Impact runc 1.1.13 and earlier as well as 1.2.0-rc2 and earlier can be tricked into creating empty files or directories in arbitrary locations in the host filesystem by sharing a volume between two containers and exploiting a race with os.MkdirAll. While this can be used to create empty files, existing files **will not** be truncated. An attacker must have the ability to start containers using some kind of custom volume configuration. Containers using user namespaces are still affected, but the scope of places an attacker can create inodes can be significantly reduced. Sufficiently strict LSM policies (SELinux/Apparmor) can also in principle block this attack -- we suspect the industry standard SELinux policy may restrict this attack's scope but the exact scope of protection hasn't been analysed. This is exploitable using runc directly as well as through Docker and Kubernetes. The CVSS score for this vulnerability is CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N (Low severity, 3.6). ### Workarounds Using user namespaces restricts this attack fairly significantly such that the attacker can only create inodes in directories that the remapped root user/group has write access to. Unless the root user is remapped to an actual user on the host (such as with rootless containers that don't use /etc/sub[ug]id), this in practice means that an attacker would only be able to create inodes in world-writable directories. A strict enough SELinux or AppArmor policy could in principle also restrict the scope if a specific label is applied to the runc runtime, though we haven't thoroughly tested to what extent the standard existing policies block this attack nor what exact policies are needed to sufficiently restrict this attack. ### Patches Fixed in runc v1.1.14 and v1.2.0-rc3. * `main` patches: * https://github.com/opencontainers/runc/pull/4359 * https://github.com/opencontainers/runc/commit/63c2908164f3a1daea455bf5bcd8d363d70328c7 * `release-1.1` patches: * https://github.com/opencontainers/runc/commit/8781993968fd964ac723ff5f360b6f259e809a3e * https://github.com/opencontainers/runc/commit/f0b652ea61ff6750a8fcc69865d45a7abf37accf ### Credits Thanks to Rodrigo Campos Catelin (@rata) and Alban Crequy (@alban) from Microsoft for discovering and reporting this vulnerability.

CVE-2024-45310 Affected Github.com/opencontainers/runc Versions

2 component(s)
Fixed Versions:
1.1.141.2.0-rc.3
Product / Package Ecosystem Affected Versions Fixed Version
github.com/opencontainers/runc
Go
< 1.1.14
1.1.14
github.com/opencontainers/runc
Go
≥ 1.2.0-rc.1
< 1.2.0-rc.3
1.2.0-rc.3

References

Frequently Asked Questions

What is CVE-2024-45310?
CVE-2024-45310 is a security vulnerability in Github.com/opencontainers/runc involving runc can be confused to create empty files/directories on the host under CWE-363: Race Condition Enabling Link Following.
Which Github.com/opencontainers/runc versions are affected?
Affected versions include releases prior to 1.1.14, 1.2.0-rc.3 across affected packages: github.com/opencontainers/runc.
What version fixes CVE-2024-45310?
Upgrading to 1.1.14, 1.2.0-rc.3 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/opencontainers/runc affected?
Yes, github.com/opencontainers/runc is affected in releases prior to 1.1.14, 1.2.0-rc.3. Upgrade your dependency to 1.1.14, 1.2.0-rc.3 or later.
What is the CVSS score of CVE-2024-45310?
CVE-2024-45310 has a CVSS v3.1 base score of 3.6 (MODERATE) with vector string CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N.
What CWE is associated with CVE-2024-45310?
CVE-2024-45310 is classified under CWE-363: Race Condition Enabling Link Following (The product checks the status of a file or directory before accessing it, which produces a race condition in which the file can be replaced with a link before the access is performed, causing the product to access the wrong file.).
How can I check Go dependencies for CVE-2024-45310?
Run the dependency tree command: 'inspect dependencies for github.com/opencontainers/runc'. 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-jfvp-7x6p-h2pv",
  "modified" : "2025-02-21T21:03:04Z",
  "published" : "2024-09-03T19:49:32Z",
  "aliases" : [ "CVE-2024-45310" ],
  "summary" : "runc can be confused to create empty files/directories on the host",
  "details" : "### Impact\nrunc 1.1.13 and earlier as well as 1.2.0-rc2 and earlier can be tricked into\ncreating empty files or directories in arbitrary locations in the host\nfilesystem by sharing a volume between two containers and exploiting a race\nwith os.MkdirAll. While this can be used to create empty files, existing\nfiles **will not** be truncated.\n\nAn attacker must have the ability to start containers using some kind of custom\nvolume configuration. Containers using user namespaces are still affected, but\nthe scope of places an attacker can create inodes can be significantly reduced.\nSufficiently strict LSM policies (SELinux/Apparmor) can also in principle block\nthis attack -- we suspect the industry standard SELinux policy may restrict\nthis attack's scope but the exact scope of protection hasn't been analysed.\n\nThis is exploitable using runc directly as well as through Docker and\nKubernetes.\n\nThe CVSS score for this vulnerability is\nCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N (Low severity, 3.6).\n\n### Workarounds\nUsing user namespaces restricts this attack fairly significantly such that the\nattacker can only create inodes in directories that the remapped root\nuser/group has write access to. Unless the root user is remapped to an actual\nuser on the host (such as with rootless containers that don't use\n/etc/sub[ug]id), this in practice means that an attacker would only be able to\ncreate inodes in world-writable directories.\n\nA strict enough SELinux or AppArmor policy could in principle also restrict the\nscope if a specific label is applied to the runc runtime, though we haven't\nthoroughly tested to what extent the standard existing policies block this\nattack nor what exact policies are needed to sufficiently restrict this attack.\n\n### Patches\nFixed in runc v1.1.14 and v1.2.0-rc3.\n\n* `main` patches:\n  * https://github.com/opencontainers/runc/pull/4359\n  *  https://github.com/opencontainers/runc/commit/63c2908164f3a1daea455bf5bcd8d363d70328c7\n* `release-1.1` patches:\n  * https://github.com/opencontainers/runc/commit/8781993968fd964ac723ff5f360b6f259e809a3e\n  * https://github.com/opencontainers/runc/commit/f0b652ea61ff6750a8fcc69865d45a7abf37accf\n\n### Credits\nThanks to Rodrigo Campos Catelin (@rata) and Alban Crequy (@alban) from\nMicrosoft for discovering and reporting this vulnerability.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N"
  }, {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N/U:Green"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/opencontainers/runc"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.1.14"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/opencontainers/runc"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "1.2.0-rc.1"
      }, {
        "fixed" : "1.2.0-rc.3"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/opencontainers/runc/security/advisories/GHSA-jfvp-7x6p-h2pv"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2024-45310"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/opencontainers/runc/pull/4359"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/opencontainers/runc/commit/63c2908164f3a1daea455bf5bcd8d363d70328c7"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/opencontainers/runc/commit/8781993968fd964ac723ff5f360b6f259e809a3e"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/opencontainers/runc/commit/f0b652ea61ff6750a8fcc69865d45a7abf37accf"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/opencontainers/runc"
  }, {
    "type" : "WEB",
    "url" : "https://security.netapp.com/advisory/ntap-20250221-0008"
  }, {
    "type" : "WEB",
    "url" : "http://www.openwall.com/lists/oss-security/2024/09/03/1"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-363", "CWE-61" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2024-09-03T19:49:32Z",
    "nvd_published_at" : "2024-09-03T19:15:15Z"
  }
}