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.
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.
Container-AusfĂĽhrung mit Root-UID
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}'
Abgesicherte Versionen demnächst verfügbar
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)