Im Werkzeug zum Starten isolierter Container runc, das in Docker und Kubernetes verwendet wird, wurde die Schwachstelle CVE-2024-21626 gefunden. Diese ermöglicht den Zugriff auf das Dateisystem der Host-Umgebung aus einem isolierten Container. Bei einem Angriff kann ein Angreifer bestimmte ausführbare Dateien in der Host-Umgebung überschreiben und so die Ausführung seines Codes außerhalb des Containers erreichen. In den Laufzeitumgebungen 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 von Docker- oder Kubernetes-Werkzeugen kann der Angriff durch die Vorbereitung eines speziell gestalteten Container-Images erfolgen. Nach Installation und Start des Images kann von dem Container auf das externe Dateisystem zugegriffen werden. Bei Docker besteht die Möglichkeit der Ausnutzung durch ein speziell gestaltetes Dockerfile. Die Schwachstelle kann auch ausgenutzt werden, wenn Prozesse im Container mit dem Befehl „runc exec“ gestartet werden und das Arbeitsverzeichnis an den Namespace der Host-Umgebung gebunden ist.
Die Schwachstelle entsteht durch das Leck interner Dateideskriptoren. Vor der Ausführung von Code innerhalb des Containers schließt runc alle Dateideskriptoren mittels des O_CLOEXEC-Flags. Dennoch bleibt nach dem anschließenden Aufruf der Funktion setcwd() ein Dateideskriptor geöffnet, der auf das Arbeitsverzeichnis zeigt und nach dem Start des Containers weiterhin zugänglich ist. Es wurden mehrere grundlegende Angriffszenarien auf die Host-Umgebung unter Verwendung des verbleibenden Dateideskriptors vorgeschlagen.
So kann ein Angreifer beispielsweise im Container-Image den Parameter process.cwd angeben, der auf „/proc/self/fd/7/“ verweist, was dazu führt, dass das Arbeitsverzeichnis, das sich im Mount-Bereich der Host-Umgebung befindet, an den Prozess pid1 im Container gebunden wird. Dadurch lässt sich im Container-Image der Start von „/proc/self/fd/7/../../../bin/bash“ konfigurieren, 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 sich innerhalb eines Containers befindet, auf das Verzeichnis der Host-Umgebung zuzugreifen, wenn in dem angegebenen Container privilegierte Prozesse mit dem Befehl „runc exec“ und der Option „—cwd“ ausgeführt werden. Der Angreifer kann den Pfad des auszuführenden Prozesses durch einen symbolischen Link ersetzen, der auf „/proc/self/fd/7/“ verweist, und dadurch „/proc/$exec_pid/cwd“ öffnen, um auf das Dateisystem des Hosts zuzugreifen. Außerdem kann der Angreifer die Ausführungsdateien in der Host-Umgebung überschreiben, indem er die Ausführung einer Datei aus der Host-Umgebung („/proc/self/fd/7/../../../../bin/bash“) initiiert und dann die Datei „/proc/$pid/exe“ überschreibt, die auf die ausgeführte Datei verweist.
Darüber hinaus wurden in den Komponenten des Docker-Toolkits fünf weitere Schwachstellen identifiziert:
- CVE-2024-23651 — ein Race Condition in dem BuildKit-Paket, das in Docker zur Umwandlung von Quellcode in Build-Artefakte verwendet wird. Diese Schwachstelle ergibt sich aus der Verwendung eines gemeinsamen Montagepunkts mit Cache („—mount=type=cache,source=“) in parallel ausgeführten Bauphasen, wodurch beim Verarbeiten eines speziell gestalteten Dockerfiles Dateien aus dem Arbeitscontainer auf das Host-System zugänglich werden. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
- CVE-2024-23652 — ein Fehler beim Löschen leerer Dateien, die für den Montagepunkt bei Verwendung der Option „—mount“ erstellt wurden, ermöglicht das Entfernen 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 die Ausführung eines Containers mit erweiterten Berechtigungen, unabhängig von der Konfiguration von security.insecure. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
- CVE-2024-23650 — ein bösartiger Client oder Frontend für BuildKit kann dazu führen, dass der Hintergrundprozess von BuildKit abstürzt. Die Schwachstelle wurde in BuildKit 0.12.5 behoben.
- CVE-2024-24557 — eine Möglichkeit zur Cache-Verunreinigung in Moby, einem Modul zur Erstellung spezialisierter containerisierter Isolation. Bei der Verarbeitung eines gezielt gestalteten Container-Images kann es gelingen, Daten in den Cache zu legen, die in nachfolgenden Schritten des Build-Prozesses verwendet werden können. Die Schwachstelle wurde in Moby 25.0.2 und 24.0.9 behoben.
Quelle: opennet.ru
