SicherheitsanfÀlligkeit in runc, die es ermöglicht, aus Docker- und Kubernetes-Containern auszubrechen

Im Werkzeug zur AusfĂŒhrung isolierter Container, runc, das in Docker und Kubernetes verwendet wird, wurde die Schwachstelle CVE-2024-21626 entdeckt, die den Zugriff auf das Dateisystem der Host-Umgebung aus einem isolierten Container ermöglicht. WĂ€hrend eines Angriffs kann ein Angreifer bestimmte ausfĂŒhrbare Dateien in der Host-Umgebung ĂŒberschreiben und somit die AusfĂŒhrung seines Codes außerhalb des Containers erreichen. In den Runtime-Umgebungen crun und youki, die runc verwenden, sowie in LXC tritt das Problem nicht auf. Die Schwachstelle wurde in der Version runc 1.1.12 behoben.

Bei der Verwendung der Werkzeuge Docker oder Kubernetes kann ein Angriff durch die Vorbereitung eines speziell gestalteten Container-Images erfolgen, nach dessen Installation und AusfĂŒhrung auf das externe Dateisystem aus dem Container zugegriffen werden kann. Bei der Verwendung von Docker besteht die Möglichkeit, dies ĂŒber ein speziell gestaltetes Dockerfile auszunutzen. Die Schwachstelle kann auch ausgenutzt werden, wenn Prozesse im Container mit dem Befehl „runc exec“ ausgefĂŒhrt werden, indem das Arbeitsverzeichnis an den Namespace der Host-Umgebung gebunden wird.

Die Schwachstelle wird durch ein Leck interner Dateideskriptoren verursacht. Vor der AusfĂŒhrung von Code innerhalb des Containers schließt runc alle Dateideskriptoren mit dem Flag O_CLOEXEC. Dennoch bleibt nach der anschließenden AusfĂŒhrung der Funktion setcwd() ein offener Dateideskriptor, der auf das Arbeitsverzeichnis verweist und weiterhin nach dem Start des Containers zugĂ€nglich bleibt. Es wurden mehrere grundlegende Angriffszenarien auf die Host-Umgebung vorgeschlagen, die den verbleibenden Dateideskriptor nutzen.

Zum Beispiel kann der Angreifer im Container-Image den Parameter process.cwd angeben, der auf „/proc/self/fd/7/“ verweist, was zur Bindung des Arbeitsverzeichnisses an den Prozess pid1 im Container fĂŒhrt, der sich im Mount-Namespace der Host-Umgebung befindet. Auf diese Weise kann im Container-Image die AusfĂŒhrung von „/proc/self/fd/7/../../../bin/bash“ konfiguriert werden, und durch die AusfĂŒhrung eines Shell-Skripts kann der Inhalt von „/proc/self/exe“ ĂŒberschrieben werden, der auf die Host-Kopie von /bin/bash verweist.

Eine andere Angriffsvariante ermöglicht es einem Angreifer, der innerhalb eines Containers eingeschrĂ€nkt ist, auf das Verzeichnis der Hostumgebung zuzugreifen, wenn in dem angegebenen Container privilegierte Prozesse mit dem Befehl „runc exec mit der Option „—cwd“ gestartet werden. Der Angreifer kann den Pfad des auszufĂŒhrenden Prozesses durch einen symbolischen Link ersetzen, der auf „/proc/self/fd/7/“ verweist, und so „/proc/$exec_pid/cwd“ öffnen, um auf das Dateisystem auf der Hostseite zuzugreifen. Der Angreifer kann auch erreichen, dass ausfĂŒhrbare Dateien auf der Seite der Hostumgebung ĂŒberschrieben werden, indem er die AusfĂŒhrung einer ausfĂŒhrbaren Datei aus der Hostumgebung („/proc/self/fd/7/../../../bin/bash“) organisiert, gefolgt von der Überschreibung der Datei „/proc/$pid/exe“, die auf die laufende Datei verweist.

DarĂŒber hinaus wurden in den Komponenten des Docker-Toolkits fĂŒnf weitere Schwachstellen festgestellt:

  • CVE-2024-23651 — Ein Race Condition im BuildKit-Paket, das in Docker verwendet wird, um Quellcode in Build-Artefakte zu transformieren. Die Schwachstelle wird durch die Nutzung eines gemeinsamen Mount-Punktes mit Cache in parallel ausgefĂŒhrten Build-Stufen („—mount=type=cache,source=“) verursacht, was es ermöglicht, beim Verarbeiten eines speziell gestalteten Dockerfiles Zugriff auf Dateien in der Hostumgebung vom Build-Container aus zu erhalten. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
  • CVE-2024-23652 — Ein Fehler beim Löschen leerer Dateien, die fĂŒr den Mount-Punkt unter Verwendung der Option „—mount“ erstellt wurden, ermöglicht das Löschen einer Datei außerhalb des Containers beim Verarbeiten eines speziell gestalteten Dockerfiles. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
  • CVE-2024-23653 — Ein Fehler in der API-Implementierung in BuildKit ermöglicht es, Container mit erhöhten Rechten auszufĂŒhren, unabhĂ€ngig vom Zustand der Einstellung security.insecure. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
  • CVE-2024-23650 — Ein bösartiger Client oder Frontend von BuildKit kann dazu fĂŒhren, dass der Hintergrundprozess von BuildKit abstĂŒrzt. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
  • CVE-2024-24557 — Die Möglichkeit zur Cache-Verunreinigung in Moby, einem Bauteil zum Erstellen spezialisierter Systeme fĂŒr Containerisolation. Beim Verarbeiten eines speziell gestalteten Container-Images kann es erreicht werden, dass Daten in den Cache eingefĂŒgt werden, die in den folgenden Phasen des Builds verwendet werden können. Die Schwachstelle wurde in Moby 25.0.2 und 24.0.9 behoben.

Quelle: opennet.ru

60GB SSD 8Gb DDR4