Kubernetes: Schwachstelle kann Privilegienerweiterung ermöglichen

Die Kubelet-Versionen 1.13.6 und 1.14.2 hebeln in Container-Images festgelegte UIDs aus. Bestimmte Konfigurationen verhindern das; Updates sind geplant.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Kubernetes: Schwachstelle erlaubt Privilegienerweiterung
Lesezeit: 2 Min.

Zwei Kubelet-Versionen des Container-Management-Systems Kubernetes weisen eine Schwachstelle auf, die Angreifern unter bestimmten Voraussetzungen das Ausführen von Containern mit erweiterten Zugriffsrechten ermöglichen können.

Das CERT des BSI (CERT-Bund) stuft die von der Schwachstelle CVE-2019-11245 ausgehende Gefahr als "hoch" ein. Die Kubernetes-Entwickler sehen dies anders: In einem Beitrag bei GitHub, der die Schwachstelle näher beschreibt, kommen sie auf einen CVSS-Score von 4.9 ("Medium"). Die Aufschlüsselung des Scores zeigt, warum dies so ist: CVE-2019-11245 ist (zumindest für sich allein betrachtet) nur lokal ausnutzbar, und die Komplexität des Angriffs ist hoch.

Die Schwachstelle betrifft die Kubelet-Versionen 1.13.6 und 1.14.2. Laut OSS-Sec-Mailingliste sorgen diese dafür, dass Container zwar bei der ersten Ausführung auf einem Node die im Container-Image festgelegte UID nutzen (beispielsweise USER in einem Dockerfile). Ab der zweiten Ausführung wechsle die UID jedoch auf 0 (Root) und es komme somit zu einer (ungewollten) Rechteerweiterung.

Pods mit explizit gesetztem runAsUser-Feld seien nicht von der Schwachstelle betroffen. Auch das Erzwingen von runAsUser mittels einer PodSecurityPolicy unterbinde das Zurücksetzen der UID und führe dazu, dass der Container normal ausgeführt werde. Das Spezifieren von mustRunAsNonRoot als "true" unterbinde die Ausführung mit 0-UID hingegen komplett – mit der Folge, dass der Container unter Umständen nicht mehr starte

Wer sich nicht sicher, ist, welche Kubelet-Version er verwendet, kann dies mit folgendem Kommandozeilen-Befehl überprüfen:

kubectl get nodes -o=jsonpath='{range .items[*]}{.status.nodeInfo.machineID}{"\t"}{.status.nodeInfo.kubeletVersion}{"\n"}{end}'

Bei GitHub haben die Kubernetes-Entwickler die baldige Veröffentlichung der gefixten Kubelets-Versionen 1.13.7 und 1.14.3 angekündigt.

Bis dahin könne man sich entweder mit einem Kubelet-Downgrade auf 1.13.5 beziehungsweise 1.14.1 oder aber mit dem Spezifieren von runasuser und mustRunAsNonRoot:true behelfen. Wie das funktoniert, ist dem entsprechenden Abschnitt der Kubernetes-Dokumentation zu entnehmen. (ovw)