CVE-2024-10220
High · 8.1CVSS
8.1
EPSS
3.0%
Published
Nov 22, 2024
CISA due date
—
Cloudanix analysis
Attackers could run their own commands on servers running certain versions of Kubernetes by submitting specially made storage settings, potentially taking over parts of the system.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Application
- Class
- RCE
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
The kubelet allows arbitrary command execution through specially crafted gitRepo volumes that abuse volume mounting to run attacker-controlled commands during pod initialization.
Why it matters to the business
Successful exploitation grants attackers control over Kubernetes worker nodes, enabling data theft, workload disruption, or lateral movement across clusters; urgency is moderate given low EPSS and lack of KEV listing despite broad ecosystem prevalence of affected kubelet versions.
How an attack unfolds
An attacker with permission to create pods supplies a malicious gitRepo volume definition that points to a repository containing commands executed by the kubelet during volume setup, achieving remote code execution without needing elevated privileges beyond pod creation rights.
How to fix it
Upgrade kubelet to versions 1.28.12 or later, 1.29.7 or later, or 1.30.3 or later; until upgrades are complete, restrict pod creation privileges and avoid use of gitRepo volumes in untrusted namespaces.
How to confirm the fix worked
Verify kubelet versions across nodes match or exceed the fixed releases; test by attempting to schedule a pod with a gitRepo volume on patched nodes and confirm no command execution occurs.
Typical attack path
- Obtain permissions to submit pod specifications to the cluster
- Craft a pod manifest containing a gitRepo volume with a malicious repository URL or branch that triggers command execution
- Submit the pod to a node running an affected kubelet version
- Kubelet processes the volume and executes the embedded commands on the host
- Attacker uses resulting shell access to pivot or persist within the cluster
How to detect it
Review Kubernetes audit logs for pod creations that include gitRepo volumes from unexpected repositories; inspect node process execution logs for git or shell activity triggered by volume mounts shortly after pod scheduling.
What your security team should do
- Prioritize patching all nodes to fixed kubelet versions within standard change windows given the RCE nature
- Audit RBAC policies to limit pod creation to trusted service accounts
- Monitor for unusual gitRepo volume usage in pod specs via admission controllers or audit logs
- Disable gitRepo volumes cluster-wide if the feature is not required
The record
The Kubernetes kubelet component allows arbitrary command execution via specially crafted gitRepo volumes.This issue affects kubelet: through 1.28.11, from 1.29.0 through 1.29.6, from 1.30.0 through 1.30.2.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | k8s.io/kubernetes | 0 | 1.28.12 |
| Go | k8s.io/kubernetes | 1.29.0 | 1.29.7 |
| Go | k8s.io/kubernetes | 1.30.0 | 1.30.3 |
| Chainguard | argocd-image-updater | 0 | 0.17.0-r1 |
| Chainguard | argocd-image-updater-compat | 0 | 0.17.0-r1 |
| Chainguard | argocd-image-updater-fips | 0 | 0.17.0-r2 |
| Chainguard | aws-efs-csi-driver | 0 | 2.1.2-r0 |
| Chainguard | aws-efs-csi-driver-fips | 0 | 2.1.2-r0 |
| Chainguard | gpu-feature-discovery | 0 | 0.8.2-r6 |
| Chainguard | ip-masq-agent | 0 | 2.12.0-r0 |
| Chainguard | kubeflow-pipelines | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-apiserver | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-cache-deployer | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-cache-deployer-compat | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-cache_server | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-frontend | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-metadata-envoy-config | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-metadata-writer | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-metadata-writer-compat | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-persistence_agent | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-scheduledworkflow | 0 | 2.3.0-r3 |
| Chainguard | kubeflow-pipelines-viewer-crd-controller | 0 | 2.3.0-r3 |
| Chainguard | kubernetes-dns-node-cache | 0 | 1.23.1-r5 |
| Chainguard | kubernetes-dns-node-cache-fips | 0 | 1.23.1-r4 |
| Chainguard | local-static-provisioner | 0 | 2.7.0-r8 |
| Chainguard | local-static-provisioner-compat | 0 | 2.7.0-r8 |
| Chainguard | local-static-provisioner-fips | 0 | 2.7.0-r1 |
| Chainguard | local-static-provisioner-fips-compat | 0 | 2.7.0-r1 |
| Chainguard | local-volume-node-cleanup | 0 | 2.7.0-r8 |
| Chainguard | local-volume-node-cleanup-compat | 0 | 2.7.0-r8 |
| Chainguard | local-volume-node-cleanup-fips | 0 | 2.7.0-r1 |
| Chainguard | local-volume-node-cleanup-fips-compat | 0 | 2.7.0-r1 |
| Chainguard | nodetaint | 0 | 0.0.4-r23 |
| Chainguard | rancher-webhook-0.4 | 0 | 0.4.18-r2 |
| Chainguard | rancher-webhook-0.5 | 0 | 0.5.12-r4 |
| Chainguard | rancher-webhook-fips-0.4 | 0 | 0.4.18-r4 |
| Chainguard | rancher-webhook-fips-0.5 | 0 | 0.5.11-r0 |
| Debian:11 | kubernetes | 0 | 1.20.5+really1.20.2-1 |
| Debian:12 | kubernetes | 0 | 1.20.5+really1.20.2-1 |
| Debian:13 | kubernetes | 0 | 1.20.5+really1.20.2-1 |
| Mageia:9 | kubernetes | 0 | 1.27.16-2.mga9 |
| Ubuntu:20.04:LTS | kubernetes | 0 | No fix |
| Ubuntu:22.04:LTS | kubernetes | 0 | No fix |
| Ubuntu:24.04:LTS | kubernetes | 0 | No fix |
| Ubuntu:24.10 | kubernetes | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | kubernetes | 0 | No fix |
| Wolfi | argocd-image-updater | 0 | 0.17.0-r1 |
| Wolfi | argocd-image-updater-compat | 0 | 0.17.0-r1 |
| Wolfi | aws-efs-csi-driver | 0 | 2.1.2-r0 |
| Wolfi | gpu-feature-discovery | 0 | 0.8.2-r6 |
| Wolfi | ip-masq-agent | 0 | 2.12.0-r0 |
| Wolfi | kubeflow-pipelines | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-apiserver | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-cache-deployer | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-cache-deployer-compat | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-cache_server | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-frontend | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-metadata-envoy-config | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-metadata-writer | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-metadata-writer-compat | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-persistence_agent | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-scheduledworkflow | 0 | 2.3.0-r3 |
| Wolfi | kubeflow-pipelines-viewer-crd-controller | 0 | 2.3.0-r3 |
| Wolfi | kubernetes-dns-node-cache | 0 | 1.23.1-r5 |
| Wolfi | local-static-provisioner | 0 | 2.7.0-r8 |
| Wolfi | local-static-provisioner-compat | 0 | 2.7.0-r8 |
| Wolfi | local-volume-node-cleanup | 0 | 2.7.0-r8 |
| Wolfi | local-volume-node-cleanup-compat | 0 | 2.7.0-r8 |
| Wolfi | nodetaint | 0 | 0.0.4-r23 |
| Wolfi | rancher-webhook-0.5 | 0 | 0.5.12-r4 |
| go | k8s.io/kubernetes | 1.29.0 | 1.29.7 |
| go | k8s.io/kubernetes | 1.30.0 | 1.30.3 |
| openSUSE:Tumbleweed | govulncheck-vulndb | 0 | 0.0.20241209T183251-1.1 |
Related vulnerabilities
- CVE-2025-13281 A half-blind Server Side Request Forgery (SSRF) vulnerability exists in… Also affects k8s.io/kubernetes
- CVE-2024-5321 A security issue was discovered in Kubernetes clusters with Windows nodes where… Also affects k8s.io/kubernetes
- CVE-2024-3177 A security issue was discovered in Kubernetes where users may be able to launch… Also affects k8s.io/kubernetes
- CVE-2019-11253 Improper input validation in the Kubernetes API server in versions v1.0-1.12 and versions… Also affects k8s.io/kubernetes
- CVE-2026-34165 go-git is an extensible git implementation library written in pure Go. Also affects argocd-image-updater
- CVE-2026-33762 go-git is an extensible git implementation library written in pure Go. Also affects argocd-image-updater
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects argocd-image-updater
- CVE-2026-27142 Actions which insert URLs into the content attribute of HTML meta tags are not escaped. Also affects argocd-image-updater