Cloudanix VulnDB

CVE-2024-21626

High · 8.6

CVSS

8.6

EPSS

18.9%

Published

Jan 31, 2024

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A bug in container software can let attackers break out of their isolated environment and reach the underlying computer system.

Weaponized
Exploitation
Local Privilege
Attacker needs
User Interaction
Complexity
Low
Impact
Full Compromise
Component
Container Runtime
Class
Container Escape
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Internal file descriptor leak in runc allows a newly-spawned container process (via runc exec or run) to obtain a working directory in the host filesystem namespace, granting direct access to host files and enabling semi-arbitrary host binary overwrites for full escape.

Why it matters to the business

Successful exploitation breaks container isolation on Linux hosts, risking full host compromise, lateral movement to other containers, and data exfiltration. Weaponized public exploits combined with a rising EPSS score increase urgency for organizations running container workloads at scale.

How an attack unfolds

An attacker supplies a malicious container image or issues a runc exec command; the leaked file descriptor causes the container process to inherit a host-namespace working directory. This enables reading or writing host files, with variants allowing overwrite of host binaries to achieve complete container escape.

How to fix it

Upgrade opencontainers/runc to version 1.1.12 or later, specifically commit 51d5e94601ceffbbd85688df1c928ecccbfa4685. Rebuild and redeploy all container images and orchestration configurations that depend on the patched runc binary.

How to confirm the fix worked

Verify the installed runc binary reports version 1.1.12 or contains commit 51d5e94601ceffbbd85688df1c928ecccbfa4685; run integration tests that attempt to access host paths from within a container to confirm isolation is restored.

Typical attack path

  1. Craft or obtain a malicious OCI image or prepare a runc exec invocation targeting the vulnerable runc binary
  2. Trigger container creation (runc run) or process execution (runc exec) on a host running runc 1.1.11 or earlier
  3. Exploit the leaked file descriptor so the container process receives a working directory inside the host filesystem namespace
  4. Use host filesystem access to read sensitive data or overwrite semi-arbitrary host binaries for persistent escape

How to detect it

Review runc process logs and container runtime audit events for unexpected working-directory paths that resolve outside container rootfs; correlate with exec or run operations and look for subsequent host-file access attempts by container PIDs.

  • runc.*exec.*host filesystem
  • working directory.*host namespace
  • container escape via file descriptor leak

What your security team should do

  • Immediately upgrade all runc installations to the fixed commit and rebuild dependent container images
  • Scan container registries and CI/CD pipelines for images built with vulnerable runc versions
  • Enable runtime monitoring for unexpected host filesystem access originating from container processes
  • Review and tighten seccomp and AppArmor/SELinux policies around runc exec operations

The record

runc is a CLI tool for spawning and running containers on Linux according to the OCI specification. In runc 1.1.11 and earlier, due to an internal file descriptor leak, an attacker could cause a newly-spawned container process (from runc exec) to have a working directory in the host filesystem namespace, allowing for a container escape by giving access to the host filesystem ("attack 2"). The same attack could be used by a malicious image to allow a container process to gain access to the host filesystem through runc run ("attack 1"). Variants of attacks 1 and 2 could be also be used to overwrite semi-arbitrary host binaries, allowing for complete container escapes ("attack 3a" and "attack 3b"). runc 1.1.12 includes patches for this issue.

Affected packages

Ecosystem Package Introduced Fixed
Go github.com/opencontainers/runc 1.0.0-rc93 1.1.12
AlmaLinux:8 aardvark-dns 0 2:1.0.1-38.module_el8.9.0+3627+db8ec155
AlmaLinux:8 aardvark-dns 0 2:1.7.0-1.module_el8.9.0+3657+d86e192f
AlmaLinux:8 buildah 0 1:1.24.6-7.module_el8.9.0+3627+db8ec155
AlmaLinux:8 buildah 0 1:1.31.3-3.module_el8.9.0+3717+81096349
AlmaLinux:8 buildah-tests 0 1:1.24.6-7.module_el8.9.0+3627+db8ec155
AlmaLinux:8 buildah-tests 0 1:1.24.6-7.module_el8.9.0+3687+dcd7ef8f
AlmaLinux:8 buildah-tests 0 1:1.31.3-3.module_el8.9.0+3717+81096349
AlmaLinux:8 cockpit-podman 0 46-1.module_el8.7.0+3344+5bcd850f
AlmaLinux:8 cockpit-podman 0 75-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 conmon 0 2:2.1.4-2.module_el8.9.0+3627+db8ec155
AlmaLinux:8 conmon 0 2:2.1.4-2.module_el8.9.0+3687+dcd7ef8f
AlmaLinux:8 conmon 0 3:2.1.8-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 container-selinux 0 2:2.205.0-3.module_el8.9.0+3627+db8ec155
AlmaLinux:8 container-selinux 0 2:2.221.0-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 containernetworking-plugins 0 1:1.1.1-6.module_el8.9.0+3711+04fcca5e
AlmaLinux:8 containernetworking-plugins 0 1:1.3.0-8.module_el8.9.0+3717+81096349
AlmaLinux:8 containers-common 0 2:1-38.module_el8.9.0+3627+db8ec155
AlmaLinux:8 containers-common 0 2:1-71.module_el8.9.0+3717+81096349
AlmaLinux:8 crit 0 3.15-3.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 crit 0 3.15-3.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 crit 0 3.18-4.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 criu 0 3.15-3.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 criu 0 3.15-3.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 criu 0 3.18-4.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 criu-devel 0 3.15-3.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 criu-devel 0 3.15-3.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 criu-devel 0 3.18-4.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 criu-libs 0 3.15-3.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 criu-libs 0 3.15-3.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 criu-libs 0 3.18-4.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 crun 0 1.8.7-1.module_el8.9.0+3683+33eb0feb
AlmaLinux:8 crun 0 1.8.7-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 fuse-overlayfs 0 1.9-2.module_el8.9.0+3627+db8ec155
AlmaLinux:8 fuse-overlayfs 0 1.12-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 libslirp 0 4.4.0-1.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 libslirp 0 4.4.0-1.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 libslirp 0 4.4.0-1.module_el8.8.0+3615+3543c705
AlmaLinux:8 libslirp-devel 0 4.4.0-1.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 libslirp-devel 0 4.4.0-1.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 libslirp-devel 0 4.4.0-1.module_el8.8.0+3615+3543c705
AlmaLinux:8 netavark 0 2:1.0.1-38.module_el8.9.0+3627+db8ec155
AlmaLinux:8 netavark 0 2:1.7.0-2.module_el8.9.0+3717+81096349
AlmaLinux:8 oci-seccomp-bpf-hook 0 1.2.5-2.module_el8.8.0+3468+16b86c82
AlmaLinux:8 oci-seccomp-bpf-hook 0 1.2.9-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 podman 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-catatonit 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-catatonit 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-docker 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-docker 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-gvproxy 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-gvproxy 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-plugins 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-plugins 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-remote 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-remote 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 podman-tests 0 2:4.0.2-26.module_el8.9.0+3722+7fd8ab2b.alma.1
AlmaLinux:8 podman-tests 0 3:4.6.1-8.module_el8.9.0+3717+81096349
AlmaLinux:8 python3-criu 0 3.15-3.module_el8.6.0+2877+8e437bf5
AlmaLinux:8 python3-criu 0 3.15-3.module_el8.6.0+3137+d33c3efb
AlmaLinux:8 python3-criu 0 3.18-4.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 python3-podman 0 4.0.0-2.module_el8.9.0+3711+04fcca5e
AlmaLinux:8 python3-podman 0 4.6.0-2.module_el8.9.0+3717+81096349
AlmaLinux:8 runc 0 1:1.1.12-1.module_el8.9.0+3722+7fd8ab2b
AlmaLinux:8 runc 0 1:1.1.12-1.module_el8.9.0+3717+81096349
AlmaLinux:8 skopeo 0 2:1.6.2-9.module_el8.9.0+3687+dcd7ef8f.alma.1
AlmaLinux:8 skopeo 0 2:1.6.2-9.module_el8.9.0+3711+04fcca5e.alma.1
AlmaLinux:8 skopeo 0 2:1.13.3-3.module_el8.9.0+3717+81096349
AlmaLinux:8 skopeo-tests 0 2:1.6.2-9.module_el8.9.0+3687+dcd7ef8f.alma.1
AlmaLinux:8 skopeo-tests 0 2:1.6.2-9.module_el8.9.0+3711+04fcca5e.alma.1
AlmaLinux:8 skopeo-tests 0 2:1.13.3-3.module_el8.9.0+3717+81096349
AlmaLinux:8 slirp4netns 0 1.1.8-3.module_el8.9.0+3627+db8ec155
AlmaLinux:8 slirp4netns 0 1.2.1-1.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 toolbox 0 0.0.99.4-5.module_el8.9.0+3627+db8ec155
AlmaLinux:8 toolbox 0 0.0.99.4-5.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 toolbox-tests 0 0.0.99.4-5.module_el8.9.0+3627+db8ec155
AlmaLinux:8 toolbox-tests 0 0.0.99.4-5.module_el8.9.0+3643+9234dc3b
AlmaLinux:8 udica 0 0.2.6-4.module_el8.9.0+3627+db8ec155
AlmaLinux:8 udica 0 0.2.6-20.module_el8.8.0+3615+3543c705
AlmaLinux:9 runc 0 4:1.1.12-1.el9_3
Chainguard buildctl 0 0.12.5-r1
Chainguard buildkitd 0 0.12.5-r1
Chainguard cadvisor 0 0.48.1-r4
Chainguard cadvisor-compat 0 0.48.1-r4
Chainguard ctop 0 0.7.7-r13
Chainguard datadog-agent 0 7.50.3-r1
Chainguard datadog-agent-core-integrations 0 7.50.3-r1
Chainguard datadog-agent-core-integrations-fips 0 7.50.3-r1
Chainguard datadog-agent-fakeintake 0 7.50.3-r1
Chainguard datadog-agent-fakeintake-fips 0 7.50.3-r1
Chainguard datadog-agent-fips 0 7.50.3-r1
Chainguard datadog-agent-jmx 0 7.50.3-r1
Chainguard datadog-agent-jmx-fips 0 7.50.3-r1
Chainguard datadog-agent-oci-compat 0 7.50.3-r1
Chainguard datadog-agent-oci-compat-fips 0 7.50.3-r1
Chainguard datadog-agent-s6-overlay 0 7.50.3-r1
Chainguard datadog-agent-s6-overlay-fips 0 7.50.3-r1
Chainguard datadog-cluster-agent 0 7.50.3-r1
Chainguard datadog-cluster-agent-fips 0 7.50.3-r1
Chainguard datadog-cluster-agent-oci-compat 0 7.50.3-r1
Chainguard datadog-cluster-agent-oci-compat-fips 0 7.50.3-r1
Chainguard docker 0 25.0.2-r0
Chainguard docker-config-mirror-gcr 0 25.0.2-r0
Chainguard docker-dind 0 25.0.2-r0
Chainguard docker-dind-compat 0 25.0.2-r0
Chainguard docker-init 0 25.0.2-r0
Chainguard docker-modprobe-compat 0 25.0.2-r0
Chainguard docker-oci-entrypoint 0 25.0.2-r0
Chainguard docker-rootless 0 25.0.2-r0
Chainguard dockerd 0 25.0.2-r0
Chainguard dockerd-oci-entrypoint 0 25.0.2-r0
Chainguard dockerd-service 0 25.0.2-r0
Chainguard dogstatsd 0 7.50.3-r1
Chainguard grype 0 0.74.4-r1
Chainguard ingress-nginx-controller 0 1.9.6-r1
Chainguard ingress-nginx-controller-compat 0 1.9.6-r1
Chainguard ingress-nginx-controller-fips 0 1.9.5-r1
Chainguard ingress-nginx-controller-fips-compat 0 1.9.5-r1
Chainguard k3d 0 5.6.0-r6
Chainguard k3d-proxy 0 5.6.0-r6
Chainguard k3d-tools 0 5.6.0-r6
Chainguard k3s 0 1.29.0-r1
Chainguard k3s-embedded 0 1.29.0-r1
Chainguard k3s-images 0 1.29.0-r1
Chainguard k3s-multicall 0 1.29.0-r1
Chainguard k3s-static 0 1.29.0-r1
Chainguard k9s 0 0.31.8-r0
Chainguard kaniko 0 1.20.1-r0
Chainguard kaniko-compat 0 1.20.1-r0
Chainguard kaniko-warmer 0 1.20.1-r0
Chainguard kaniko-warmer-compat 0 1.20.1-r0
Chainguard kots 0 1.107.0-r1
Chainguard kots-compat 0 1.107.0-r1
Chainguard kots-symlink-compat 0 1.107.0-r1
Chainguard kube-apiserver-1.28 0 1.28.9-r0
Chainguard kube-apiserver-1.28-default 0 1.28.9-r0
Chainguard kube-apiserver-1.29 0 1.29.3-r1
Chainguard kube-apiserver-1.29-default 0 1.29.3-r1
Chainguard kube-apiserver-fips-1.27 0 1.27.12-r1
Chainguard kube-apiserver-fips-1.27-default 0 1.27.12-r1
Chainguard kube-apiserver-fips-1.28 0 1.28.9-r0
Chainguard kube-apiserver-fips-1.28-default 0 1.28.9-r0
Chainguard kube-apiserver-fips-1.29 0 1.29.15-r2
Chainguard kube-apiserver-fips-1.29-default 0 1.29.15-r2
Chainguard kube-controller-manager-1.28 0 1.28.9-r0
Chainguard kube-controller-manager-1.28-default 0 1.28.9-r0
Chainguard kube-controller-manager-1.29 0 1.29.3-r1
Chainguard kube-controller-manager-1.29-default 0 1.29.3-r1
Chainguard kube-controller-manager-fips-1.27 0 1.27.12-r1
Chainguard kube-controller-manager-fips-1.27-default 0 1.27.12-r1
Chainguard kube-controller-manager-fips-1.28 0 1.28.9-r0
Chainguard kube-controller-manager-fips-1.28-default 0 1.28.9-r0
Chainguard kube-controller-manager-fips-1.29 0 1.29.15-r2
Chainguard kube-controller-manager-fips-1.29-default 0 1.29.15-r2
Chainguard kube-proxy-1.28 0 1.28.9-r0
Chainguard kube-proxy-1.28-default 0 1.28.9-r0
Chainguard kube-proxy-1.29 0 1.29.3-r1
Chainguard kube-proxy-1.29-default 0 1.29.3-r1
Chainguard kube-proxy-1.29-default-compat 0 1.29.3-r1
Chainguard kube-proxy-fips-1.27 0 1.27.12-r1
Chainguard kube-proxy-fips-1.27-default 0 1.27.12-r1
Chainguard kube-proxy-fips-1.28 0 1.28.9-r0
Chainguard kube-proxy-fips-1.28-default 0 1.28.9-r0
Chainguard kube-proxy-fips-1.29 0 1.29.15-r2
Chainguard kube-proxy-fips-1.29-default 0 1.29.15-r2
Chainguard kube-scheduler-1.28 0 1.28.9-r0
Chainguard kube-scheduler-1.28-default 0 1.28.9-r0
Chainguard kube-scheduler-1.29 0 1.29.3-r1
Chainguard kube-scheduler-1.29-default 0 1.29.3-r1
Chainguard kube-scheduler-fips-1.27 0 1.27.12-r1
Chainguard kube-scheduler-fips-1.27-default 0 1.27.12-r1
Chainguard kube-scheduler-fips-1.28 0 1.28.9-r0
Chainguard kube-scheduler-fips-1.28-default 0 1.28.9-r0
Chainguard kube-scheduler-fips-1.29 0 1.29.15-r2
Chainguard kube-scheduler-fips-1.29-default 0 1.29.15-r2
Chainguard kube-webhook-certgen 0 1.9.6-r1
Chainguard kube-webhook-certgen-fips 0 1.9.5-r1
Chainguard kubeadm-1.28 0 1.28.9-r0
Chainguard kubeadm-1.28-default 0 1.28.9-r0
Chainguard kubeadm-1.29 0 1.29.3-r1
Chainguard kubeadm-1.29-default 0 1.29.3-r1
Chainguard kubeadm-fips-1.27 0 1.27.12-r1
Chainguard kubeadm-fips-1.27-default 0 1.27.12-r1
Chainguard kubeadm-fips-1.28 0 1.28.9-r0
Chainguard kubeadm-fips-1.28-default 0 1.28.9-r0
Chainguard kubeadm-fips-1.29 0 1.29.15-r2
Chainguard kubeadm-fips-1.29-default 0 1.29.15-r2
Chainguard kubectl-1.28 0 1.28.9-r0
Chainguard kubectl-1.28-default 0 1.28.9-r0
Chainguard kubectl-1.29 0 1.29.3-r1
Chainguard kubectl-1.29-bitnami-compat 0 1.29.3-r1
Chainguard kubectl-1.29-default 0 1.29.3-r1
Chainguard kubectl-1.29-iamguarded-compat 0 1.29.3-r1
Chainguard kubectl-bash-completion-1.28 0 1.28.9-r0
Chainguard kubectl-bash-completion-1.29 0 1.29.3-r1
Chainguard kubectl-bash-completion-fips-1.27 0 1.27.12-r1
Chainguard kubectl-bash-completion-fips-1.28 0 1.28.9-r0
Chainguard kubectl-bash-completion-fips-1.29 0 1.29.15-r2
Chainguard kubectl-fips-1.27 0 1.27.12-r1

Related vulnerabilities