CVE-2025-47291
Nonecontainerd CRI plugin: Incorrect cgroup hierarchy assignment for containers running in usernamespaced Kubernetes pods.
CVSS
—
EPSS
0.3%
Published
May 21, 2025
CISA due date
—
Cloudanix analysis
A flaw in container software used by many Kubernetes clusters can let one workload ignore its assigned resource limits and overload an entire server, taking down everything else running on that server.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Container Runtime
- Class
- Kubernetes
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The containerd CRI implementation fails to place usernamespaced containers into the expected Kubernetes cgroup hierarchy, allowing resource limits defined by the cluster to be bypassed.
Why it matters to the business
A single compromised or malicious workload can exhaust node resources, causing denial of service for the entire Kubernetes node and disrupting all workloads running on it; the issue affects widely used containerd versions across many clusters.
How an attack unfolds
An attacker with the ability to schedule containers runs a usernamespaced pod that is not placed under the Kubernetes cgroup hierarchy; the pod then consumes CPU, memory, or I/O beyond its declared limits until the node becomes unresponsive.
How to fix it
Upgrade containerd to commit fb4c30d4ede3531652d86197bf3fc9515e5276d9 or later; for Ubuntu packages also apply the listed QEMU fixes where applicable (1:9.0.2+ds-4ubuntu2 for 24.10, 1:6.2+dfsg-2ubuntu6.27 for 22.04 LTS, 1:8.2.2+ds-0ubuntu1.10 for 24.04 LTS).
How to confirm the fix worked
Verify the running containerd binary or package version matches or exceeds the fixed commits listed; confirm that usernamespaced containers appear under the expected Kubernetes cgroup paths after upgrade.
Typical attack path
- Gain access to deploy or influence container creation on a Kubernetes cluster using containerd
- Create a usernamespaced container or pod with intentionally high resource consumption
- Bypass applied Kubernetes limits because the container is outside the expected cgroup hierarchy
- Exhaust node-level resources leading to node-level denial of service
How to detect it
Search container runtime logs and Kubernetes audit logs for creation of usernamespaced containers that later correlate with unexpected resource spikes or node NotReady events; review cgroup hierarchy under /sys/fs/cgroup for missing Kubernetes-managed subtrees associated with usernamespaced pods.
What your security team should do
- Immediately upgrade containerd to the fixed commit on all Kubernetes nodes
- Prioritize clusters with high node density or multi-tenant workloads
- Review and enforce pod security policies that restrict usernamespaced containers until patched
- Monitor for resource-exhaustion alerts on nodes until remediation is complete
The record
A bug was found in the containerd's CRI implementation where containerd doesn't put usernamespaced containers under the Kubernetes' cgroup hierarchy, therefore some Kubernetes limits are not honored. This may cause a denial of service of the Kubernetes node.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/containerd/containerd/v2 | 2.0.1 | 2.0.5 |
| Chainguard | cg | 0 | 0_git20250613-r0 |
| Chainguard | cloudbeat | 0 | 9.0.1-r1 |
| Chainguard | cloudbeat-fips | 0 | 9.0.1-r1 |
| Chainguard | k3s | 0 | 1.33.0.1-r2 |
| Chainguard | k3s-embedded | 0 | 1.33.0.1-r2 |
| Chainguard | k3s-images | 0 | 1.33.0.1-r2 |
| Chainguard | k3s-multicall | 0 | 1.33.0.1-r2 |
| Chainguard | k3s-multicall-1.31 | 0 | 1.31.6.1-r5 |
| Chainguard | k3s-static | 0 | 1.33.0.1-r2 |
| Chainguard | melange | 0 | 0.26.0-r1 |
| Chainguard | melange-microvm-init | 0 | 0.26.0-r1 |
| Chainguard | wolfictl | 0 | 0.37.1-r1 |
| Chainguard | zot | 0 | 2.1.3-r0 |
| Wolfi | k3s | 0 | 1.33.0.1-r2 |
| Wolfi | k3s-embedded | 0 | 1.33.0.1-r2 |
| Wolfi | k3s-images | 0 | 1.33.0.1-r2 |
| Wolfi | k3s-multicall | 0 | 1.33.0.1-r2 |
| Wolfi | k3s-static | 0 | 1.33.0.1-r2 |
| Wolfi | melange | 0 | 0.26.0-r1 |
| Wolfi | melange-microvm-init | 0 | 0.26.0-r1 |
| Wolfi | wolfictl | 0 | 0.37.1-r1 |
| Wolfi | zot | 0 | 2.1.3-r0 |
| go | github.com/containerd/containerd/v2 | 2.0.1 | 2.0.5 |
| openSUSE:Leap 16.0 | trivy | 0 | 0.66.0-bp160.1.1 |
| openSUSE:Tumbleweed | govulncheck-vulndb | 0 | 0.0.20250523T151856-1.1 |
| openSUSE:Tumbleweed | trivy | 0 | 0.65.0-1.1 |
Related vulnerabilities
- CVE-2025-64329 containerd CRI server: Host memory exhaustion through Attach goroutine leak Also affects github.com/containerd/containerd/v2
- CVE-2024-25621 containerd affected by a local privilege escalation via wide permissions on CRI directory Also affects github.com/containerd/containerd/v2
- CVE-2024-40635 containerd is an open-source container runtime. Also affects github.com/containerd/containerd/v2
- CVE-2026-34165 go-git is an extensible git implementation library written in pure Go. Also affects cg
- CVE-2026-33762 go-git is an extensible git implementation library written in pure Go. Also affects cg
- CVE-2026-32285 The Delete function fails to properly validate offsets when processing malformed JSON… Also affects cg
- CVE-2026-33481 Syft is a a CLI tool and Go library for generating a Software Bill of Materials (SBOM)… Also affects cg
- CVE-2026-33809 A maliciously crafted TIFF file can cause image decoding to attempt to allocate up 4GiB… Also affects cg