CVE-2024-10220: Kritische Sicherheitslücke in Kubernetes durch gitRepo-Volume
Table of Contents
Am 20. November 2024 wurde CVE-2024-10220 öffentlich bekanntgegeben, eine Sicherheitslücke in Kubernetes, die als kritisch eingestuft wurde. Sie betrifft das gitRepo-Volume, ein veraltetes Feature, das es Angreifern ermöglichen könnte, beliebige Befehle außerhalb der Container-Grenzen auszuführen. Im Folgenden eine detaillierte Analyse dieser Schwachstelle, ihrer Auswirkungen und wie sie behoben werden kann.
Die Sicherheitslücke erlaubt es Angreifern, mithilfe der gitRepo-Volume-Funktion von Kubernetes beliebige Befehle auszuführen. Das Problem liegt darin, dass das Verzeichnis .git/hooks innerhalb eines geklonten Repositories genutzt werden kann, um Skripte außerhalb des Containers auszuführen. Dies birgt erhebliche Risiken für die Integrität und Vertraulichkeit eines Clusters.
Betroffen sind Kubernetes-Versionen, die das gitRepo-Volume unterstützen und keine Patches enthalten, die diese Schwachstelle schließen.
Die Sicherheitslücke betrifft die folgenden Kubernetes-Versionen:
- kubelet v1.30.0 bis v1.30.2
- kubelet v1.29.0 bis v1.29.6
- kubelet ≤ v1.28.11
Diese Versionen nutzen den fehlerhaften Mechanismus zur Verarbeitung von gitRepo-Volumes, wodurch die Schwachstelle ausgenutzt werden kann.
Bewertung der Sicherheitslücke
- Schweregrad: Hoch
- CVSS-Score: 8.1 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N)
- Vektor: Angriffe sind über das Netzwerk möglich, erfordern niedrige Berechtigungen und keine Benutzerinteraktion.
Empfohlene Maßnahmen zur Behebung
1. Update auf eine sichere Version
Die Schwachstelle wurde in den folgenden Kubernetes-Versionen behoben:
- kubelet master/v1.31.0
- kubelet v1.30.3
- kubelet v1.29.7
- kubelet v1.28.12
Ein Update auf eine dieser Versionen wird dringend empfohlen. Die Patches begrenzen die Tiefe des Verzeichnisses, das durch gitRepo-Volumes geklont werden kann, auf eine Ebene, wodurch der Zugriff auf .git/hooks verhindert wird.
2. Abschaffung des gitRepo-Volumes
Da gitRepo-Volumes als veraltet gelten, wird empfohlen, stattdessen Init-Container zu verwenden, um Repositories zu klonen. Anschließend können die geklonten Verzeichnisse in den Ziel-Container eingebunden werden.
Erkennung von Angriffen
Zur Überprüfung, ob ein Cluster anfällig ist oder möglicherweise bereits angegriffen wurde, kann folgender Befehl verwendet werden:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.volumes[].gitRepo.directory | endswith("/.git")) | {name: .metadata.name, namespace: .metadata.namespace}'
Hinweis:
Einige Benutzer berichten über Kompatibilitätsprobleme mit älteren jq-Versionen. Eine alternative Abfrage ohne endswith() lautet:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.volumes[].gitRepo.directory) | {name: .metadata.name, namespace: .metadata.namespace}'
Falls keine Einträge ausgegeben werden, ist Ihr Cluster nicht betroffen.
Mitigation durch präventive Sicherheitsmaßnahmen
- Zugriffsrechte minimieren: Stellen Sie sicher, dass nur autorisierte Benutzer Pods erstellen dürfen.
- Überwachung einrichten: Implementieren Sie kontinuierliches Monitoring, um ungewöhnliche Aktivitäten in Kubernetes-Clustern zu erkennen.
- Veraltete Funktionen deaktivieren: Entfernen Sie ungenutzte oder veraltete Kubernetes-Funktionen, wie
gitRepo.