Security Vulnerability Report
中文
CVE-2025-52881 CVSS 7.5 HIGH

CVE-2025-52881

Published: 2025-11-06 21:15:43
Last Modified: 2025-12-03 18:37:18

Description

runc is a CLI tool for spawning and running containers according to the OCI specification. In versions 1.2.7, 1.3.2 and 1.4.0-rc.2, an attacker can trick runc into misdirecting writes to /proc to other procfs files through the use of a racing container with shared mounts (we have also verified this attack is possible to exploit using a standard Dockerfile with docker buildx build as that also permits triggering parallel execution of containers with custom shared mounts configured). This redirect could be through symbolic links in a tmpfs or theoretically other methods such as regular bind-mounts. While similar, the mitigation applied for the related CVE, CVE-2019-19921, was fairly limited and effectively only caused runc to verify that when LSM labels are written they are actually procfs files. This issue is fixed in versions 1.2.8, 1.3.3, and 1.4.0-rc.3.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:linuxfoundation:runc:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:linuxfoundation:runc:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:linuxfoundation:runc:1.4.0:rc1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:linuxfoundation:runc:1.4.0:rc2:*:*:*:*:*:* - VULNERABLE
runc < 1.2.8
runc 1.2.7
runc < 1.3.3
runc 1.3.2
runc < 1.4.0-rc.3
runc 1.4.0-rc.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Conceptual PoC for CVE-2025-52881 # Note: This is for educational purposes only #!/bin/bash # Prerequisites: Docker with unshare and privileged container support # Step 1: Create a container with shared mounts unshare --mount --propagation shared \ docker run --rm -it --privileged \ -v /tmp/exploit:/target alpine:latest /bin/sh # Inside the container: # Step 2: Create a symlink to redirect procfs writes # mkdir -p /tmp/exploit # ln -s /target/malicious_file /proc/self/attr/current # Step 3: Trigger the vulnerable code path # This typically happens when runc writes LSM labels during container init # The actual exploitation requires precise timing to win the race condition # Recommended to use a separate process continuously triggering the race # Example race trigger (pseudo-code): # while true; do # unshare --user # nsenter -t $$ -m -u -n -i # done

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-52881", "sourceIdentifier": "[email protected]", "published": "2025-11-06T21:15:42.817", "lastModified": "2025-12-03T18:37:17.917", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "runc is a CLI tool for spawning and running containers according to the OCI specification. In versions 1.2.7, 1.3.2 and 1.4.0-rc.2, an attacker can trick runc into misdirecting writes to /proc to other procfs files through the use of a racing container with shared mounts (we have also verified this attack is possible to exploit using a standard Dockerfile with docker buildx build as that also permits triggering parallel execution of containers with custom shared mounts configured). This redirect could be through symbolic links in a tmpfs or theoretically other methods such as regular bind-mounts. While similar, the mitigation applied for the related CVE, CVE-2019-19921, was fairly limited and effectively only caused runc to verify that when LSM labels are written they are actually procfs files. This issue is fixed in versions 1.2.8, 1.3.3, and 1.4.0-rc.3."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 7.3, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "ACTIVE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "HIGH", "subIntegrityImpact": "HIGH", "subAvailabilityImpact": "HIGH", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 0.8, "impactScore": 6.0}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-61"}, {"lang": "en", "value": "CWE-363"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:linuxfoundation:runc:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.2.8", "matchCriteriaId": "889E52A1-D7B0-4DC8-BD63-9413A1DD9EEB"}, {"vulnerable": true, "criteria": "cpe:2.3:a:linuxfoundation:runc:*:*:*:*:*:*:*:*", "versionStartIncluding": "1.3.0", "versionEndExcluding": "1.3.3", "matchCriteriaId": "F3193A96-E882-439B-984E-782315C62F69"}, {"vulnerable": true, "criteria": "cpe:2.3:a:linuxfoundation:runc:1.4.0:rc1:*:*:*:*:*:*", "matchCriteriaId": "082E3496-822B-481B-AC2F-DA8DCAFC28FF"}, {"vulnerable": true, "criteria": "cpe:2.3:a:linuxfoundation:runc:1.4.0:rc2:*:*:*:*:*:*", "matchCriteriaId": "71C62E90-6357-44A4-B582-28B1F1D9B16D"}]}]}], "references": [{"url": "http://github.com/opencontainers/runc/commit/a41366e74080fa9f26a2cd3544e2801449697322", "source": "[email protected]", "tags": ["Patch"]}, {"url": "http://github.com/opencontainers/runc/commit/fdcc9d3cad2f85954a241ccb910a61aaa1ef47f3", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/opencontainers/runc/blob/v1.4.0-rc.2/RELEASES.md", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/opencontainers/runc/commit/3f925525b44d247e390e529e772a0dc0c0bc3557", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/opencontainers/runc/commit/435cc81be6b79cdec73b4002c0dae549b2f6ae6d", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/opencontainers/runc/commit/44a0fcf685db051c80b8c269812bb177f58 ... (truncated)