Skip to content

CVE-2026-41579: Verified Reproduction

CVE-2026-41579: runc symlink deletion via malicious /dev symlink in container image

CVE-2026-41579 is verified against the affected target. This low reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00206.

REPRO-2026-00206 Jul 2, 2026 CVE entry .txt
Severity
LOW
CVSS
3.3
Confidence
HIGH
Reproduced in
25m 21s
Tool calls
181
Spend
$2.20
01 · Overview

What Is CVE-2026-41579?

CVE-2026-41579 is a low-severity symlink-following issue (CWE-61) in opencontainers/runc where a malicious container image can trick runc into deleting a host file and creating symlinks on the host during rootfs setup. Pruva reproduced it (reproduction REPRO-2026-00206).

02 · Severity & CVSS

CVE-2026-41579 Severity & CVSS Score

CVE-2026-41579 is rated low severity, with a CVSS base score of 3.3 out of 10.

LOW threat level
3.3 / 10 CVSS base
Weakness CWE-61 (UNIX Symbolic Link Following)

Low — limited impact or hard to exploit. Address in the normal cycle.

How to Reproduce CVE-2026-41579

$ pruva-verify REPRO-2026-00206
or curl -O https://www.pruva.dev/api/v1/reproductions/REPRO-2026-00206/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh
Run in a VM or disposable container. This exploits a real vulnerability.
06 · Proof of Reproduction

Proof of Reproduction for CVE-2026-41579

Security impact — reproduced
  • reached the target end-to-end
  • on the real production code path
  • high confidence
  • the upstream fix blocks the same trigger
Trigger

container image rootfs where /dev is a symlink to an attacker-controlled host directory

Attack chain
  1. runc run cve-ptmx-test -b /bundle
  2. rootfs /dev setup
  3. setupPtmx/setupDevSymlinks
How the agent worked 480 events · 181 tool calls · 25 min
25 minDuration
181Tool calls
146Reasoning steps
480Events
1Dead-ends
Agent activity over 25 min
Support
31
Hypothesis
2
Repro
189
Judge
21
Variant
233
0:0025:21

Root Cause and Exploit Chain for CVE-2026-41579

Versions: prior to 1.3.6, 1.4.0-rc.1 through 1.4.3, and 1.5.0-rc.1 through 1.5.0-rc.3

CVE-2026-41579 is a low-severity host filesystem integrity issue in opencontainers/runc. When runc prepares a container rootfs, the functions setupPtmx and setupDevSymlinks operate on path strings under the bundle rootfs before pivot_root(2) occurs. If the container image has /dev as a symlink that points outside the rootfs (for example to a host directory controlled by the attacker), filepath.Join(rootfs, "/dev/ptmx") resolves through the symlink and runc deletes or re-creates files on the host. A malicious image can therefore trick runc into removing an existing file named ptmx and creating a small fixed set of device symlinks in an attacker-chosen host directory.

  • Package / component: opencontainers/runc
  • Affected versions: prior to 1.3.6, 1.4.0-rc.1 through 1.4.3, and 1.5.0-rc.1 through 1.5.0-rc.3
  • Risk level: low (per upstream advisory)
  • Consequences: Arbitrary deletion of a host file named ptmx and creation of a limited set of hardcoded symlinks in a host directory reachable via a malicious /dev symlink. Not exploitable under Docker, but exploitable via other runc-based runtimes that do not mask /dev with a top-level read-only layer.

Impact Parity

  • Disclosed / claimed maximum impact: Arbitrary file deletion and symlink creation on the host filesystem through a malicious container image (/dev symlink).
  • Reproduced impact from this run: Vulnerable runc deleted a decoy file named ptmx and replaced it with a symlink in an attacker-controlled directory; fixed runc left the decoy untouched.
  • Parity: full for the documented filesystem-integrity impact. The reproduction does not demonstrate privilege escalation or code execution, which is consistent with the advisory's low-severity rating.

Root Cause

The bug is in runc's rootfs preparation code. Before the container pivots into its rootfs, setupPtmx and setupDevSymlinks use filepath.Join(rootfs, "/dev/...") and then call os.Remove / os.Symlink. Because the operations happen before pivot_root, a /dev entry in the image that is a symlink to an attacker-controlled host directory is followed, causing the operations to affect the host path instead of the container rootfs.

Upstream fix commit:

  • opencontainers/runc@864db8042dbb — "rootfs: make /dev initialisation code fd-based"

The fix rewrites the /dev setup code to operate on file descriptors relative to the opened rootfs directory, so symlinks in the image cannot redirect the operations to host paths.

Reproduction Steps

The reproduction is implemented in bundle/repro/reproduction_steps.sh. At a high level it:

  1. Verifies Docker is available.
  2. Downloads the vulnerable runc release binary (v1.3.5) and the fixed release binary (v1.3.6).
  3. Builds a minimal OCI rootfs from the official busybox image.
  4. Builds two privileged Docker images (repro-runc-vuln and repro-runc-fixed) that each contain one runc binary and the rootfs.
  5. Inside a privileged container, replaces /bundle/rootfs/dev with a symlink to /controlled_dev and creates a decoy /controlled_dev/ptmx.
  6. Generates an OCI bundle with runc spec, disables the terminal, and sets the command to /bin/true.
  7. Runs runc run cve-ptmx-test -b /bundle.
  8. Checks whether the decoy file was deleted.

Expected evidence:

  • Vulnerable (1.3.5): the ptmx decoy is removed and /controlled_dev contains symlinks such as ptmx -> pts/ptmx, core -> /proc/kcore, fd -> /proc/self/fd, etc.
  • Fixed (1.3.6): the ptmx decoy remains untouched and runc does not create host symlinks.

Evidence

  • bundle/logs/repro_vuln.log — vulnerable runc 1.3.5 deletes the decoy and creates host symlinks.
  • bundle/logs/repro_fixed.log — fixed runc 1.3.6 preserves the decoy.
  • bundle/logs/build_repro-runc-vuln.log — Docker build log for the vulnerable image.
  • bundle/logs/build_repro-runc-fixed.log — Docker build log for the fixed image.
  • bundle/repro/runtime_manifest.json — runtime evidence manifest produced by the script.

Key excerpts:

Vulnerable run:

RUN_VERSION: runc version 1.3.5
BEFORE: /controlled_dev/ptmx present?
-rw-r----    1 root     root            10 ... ptmx
...
AFTER: /controlled_dev contents:
-rw-r--r--    ... ptmx
RESULT: decoy deleted

Fixed run:

RUN_VERSION: runc version 1.3.6
BEFORE: /controlled_dev/ptmx present?
-rw-r--r--    ... ptmx
...
AFTER: /controlled_dev contents:
-rw-r--r--    ... ptmx
RESULT: decoy preserved

Recommendations / Next Steps

  • Upgrade runc to a patched version: 1.3.6, 1.4.3, or 1.5.0 (or later).
  • Higher-level runtimes that consume runc should ensure container images cannot ship a /dev symlink that resolves to a host path, or rely on the patched runc version.
  • Regression tests should include a rootfs where /dev is a symlink to a controlled host directory and verify that setupPtmx/setupDevSymlinks do not operate on the host path.

Additional Notes

  • The script is idempotent: it re-downloads only missing binaries, rebuilds the Docker images each run, and uses unique container names.
  • The reproduction uses the real runc CLI binary and the real OCI bundle execution path (runc run), not a reimplemented parser or mocked environment.
  • The Docker-in-Docker privileged container is required in this sandbox because the host environment lacks CAP_SYS_ADMIN and a writable cgroup hierarchy; inside the privileged container runc has the capabilities needed to create a genuine container.
  • No sanitizer or crash is involved; the proof relies on the filesystem state difference between the vulnerable and fixed versions.

CVE-2026-41579 Reproduction Transcript

The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.

Full session Replay every step — scrub the timeline or play it back.

Event 1/40
0:004:34
0:00
session startedaccounts/fireworks/models/kimi-k2p7-code · CVE-2026-41579 · REPRO-20
0:03
0:05
web search
0:07
0:08
0:12
0:14
0:15
web search
0:19
0:21
0:27
0:28
web search
0:34
0:35
0:41
0:44
0:50
0:52
1:19
1:19
extract_facts
no facts extracted
1:21
1:21
1:21
supportrepro
4:31
4:33
4:33
4:33
4:34
08 · How to Fix

How to Fix CVE-2026-41579

Coming soon

Step-by-step mitigation and hardening guidance for CVE-2026-41579 — configuration checks, workarounds where no patch exists, and how to verify you're protected — is on the way.

10 · FAQ

FAQ: CVE-2026-41579

How does the CVE-2026-41579 symlink attack work?

A malicious image with /dev symlinked to an attacker-chosen host directory causes runc to delete an existing file named ptmx on the host and create a small, fixed set of device symlinks in that attacker-controlled directory. This is not exploitable under Docker, but affects other container tooling built on runc that does not mask /dev with a top-level read-only layer.

Which runc versions are affected by CVE-2026-41579, and where is it fixed?

Versions prior to 1.3.6, 1.4.0-rc.1 through 1.4.3, and 1.5.0-rc.1 through 1.5.0-rc.3 are affected; it is fixed in 1.3.6, 1.4.3, and 1.5.0.

How severe is CVE-2026-41579?

It is rated low severity per upstream: the impact is limited to arbitrary deletion of a host file named ptmx and creation of a limited, hardcoded set of symlinks in a host directory reachable via the malicious /dev symlink.

How can I reproduce CVE-2026-41579?

Download the verified script from this page and run it in an isolated environment against a vulnerable runc build with a container image whose /dev is a symlink to an attacker-controlled host directory. It shows the vulnerable runc deleting a decoy ptmx file and replacing it with a symlink in that directory, then confirms the fixed build does not.
11 · References

References for CVE-2026-41579

Authoritative sources for CVE-2026-41579 — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.