CVE-2021-25741

8.8 HIGH

📋 TL;DR

This vulnerability in Kubernetes allows authenticated users to create containers with subpath volume mounts that can escape the intended volume boundaries, potentially accessing files and directories on the host filesystem. It affects Kubernetes clusters where users have permission to create pods with volume mounts. This is a privilege escalation vulnerability that could lead to host file system access.

💻 Affected Systems

Products:
  • Kubernetes
Versions: All versions prior to v1.22.2, v1.21.5, v1.20.11, v1.19.15
Operating Systems: All operating systems running Kubernetes
Default Config Vulnerable: ⚠️ Yes
Notes: Requires user permission to create pods with volume mounts. Affects all Kubernetes distributions (kubeadm, kops, EKS, AKS, GKE, etc.)

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

An attacker gains full access to the host filesystem, potentially compromising all containers on the node, stealing sensitive data, or establishing persistence on the underlying infrastructure.

🟠

Likely Case

Privileged escalation within the cluster allowing unauthorized access to sensitive files, configuration data, or secrets stored on volumes or the host filesystem.

🟢

If Mitigated

Limited impact if proper RBAC controls restrict pod creation and volume mount permissions to trusted users only.

🌐 Internet-Facing: MEDIUM - Requires authenticated access to the Kubernetes API, but if exposed publicly without proper authentication, risk increases significantly.
🏢 Internal Only: HIGH - Internal attackers or compromised accounts with pod creation permissions can exploit this to escalate privileges and access sensitive data.

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access to create pods. Proof-of-concept code is publicly available in the GitHub issue.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v1.22.2, v1.21.5, v1.20.11, v1.19.15

Vendor Advisory: https://groups.google.com/g/kubernetes-security-announce/c/nyfdhK24H7s

Restart Required: Yes

Instructions:

1. Upgrade Kubernetes control plane and nodes to patched versions. 2. For managed services (EKS, AKS, GKE), follow provider-specific upgrade procedures. 3. Restart all affected components including kube-apiserver, kubelet, and any pods using subpath mounts.

🔧 Temporary Workarounds

Restrict Pod Creation Permissions

all

Use Kubernetes RBAC to restrict pod creation and volume mount permissions to only trusted users and service accounts.

kubectl create clusterrole restricted-pod-creation --verb=create --resource=pods
kubectl create clusterrolebinding restrict-pods --clusterrole=restricted-pod-creation --user=trusted-user

Disable Subpath Mounts via Admission Controller

all

Use validating admission webhooks to reject pod specifications containing subpath volume mounts.

# Requires custom admission controller implementation
# Example policy would reject pods with spec.containers[*].volumeMounts.subPath

🧯 If You Can't Patch

  • Implement strict RBAC controls to limit pod creation to essential users only
  • Use network policies to isolate vulnerable nodes and monitor for suspicious pod creation activity

🔍 How to Verify

Check if Vulnerable:

Check Kubernetes version with 'kubectl version' and verify if it's below patched versions. Also check if users have pod creation permissions.

Check Version:

kubectl version --short

Verify Fix Applied:

After upgrade, verify version is at least v1.22.2, v1.21.5, v1.20.11, or v1.19.15. Test creating a pod with subpath mount to confirm it's properly restricted.

📡 Detection & Monitoring

Log Indicators:

  • Unusual pod creation events with volume mounts
  • Multiple failed pod creation attempts with subpath configurations
  • Audit logs showing pod creation by unauthorized users

Network Indicators:

  • Increased API calls to create pods from unusual sources
  • Network traffic from pods attempting to access host filesystem paths

SIEM Query:

source="kubernetes-audit" AND verb="create" AND objectRef.resource="pods" AND requestObject.spec.containers[*].volumeMounts.subPath EXISTS

🔗 References

📤 Share & Export