Sicherheitslücke in Docker, die es Ihnen ermöglicht, aus dem Container zu entkommen

Im Toolkit zum Verwalten isolierter Linux-Docker-Container identifiziert Verletzlichkeit (CVE-2018-15664), das Ihnen unter bestimmten Umständen den Zugriff auf die Hostumgebung von einem Container aus ermöglicht, wenn Sie die Möglichkeit haben, Ihre Images auf dem System zu starten oder Zugriff auf einen laufenden Container haben. Das Problem tritt in allen Docker-Versionen auf und bleibt unbehoben (vorgeschlagen, aber noch nicht akzeptiert). patch, das die Aufhängung des Containers während der Ausführung von Vorgängen mit dem FS implementiert).

Die Sicherheitslücke ermöglicht das Extrahieren von Dateien aus einem Container in einen beliebigen Teil des Dateisystems des Hostsystems, wenn der Befehl „docker cp“ ausgeführt wird. Die Dateiextraktion erfolgt mit Root-Rechten, was es ermöglicht, beliebige Dateien in der Host-Umgebung zu lesen oder zu schreiben, was ausreicht, um die Kontrolle über das Host-System zu erlangen (Sie können beispielsweise /etc/shadow überschreiben).

Der Angriff kann nur durchgeführt werden, wenn der Administrator den Befehl „docker cp“ ausführt, um Dateien in oder aus dem Container zu kopieren. Daher muss der Angreifer den Docker-Administrator irgendwie von der Notwendigkeit überzeugen, diesen Vorgang auszuführen und den beim Kopieren verwendeten Pfad vorherzusagen. Andererseits kann ein Angriff beispielsweise dann erfolgen, wenn Cloud-Dienste Tools zum Kopieren von Konfigurationsdateien in einen Container bereitstellen, der mit dem Befehl „docker cp“ erstellt wurde.

Das Problem wird durch einen Fehler in der Anwendung der Funktion verursacht Folgen Sie SymlinkInScope, das den absoluten Pfad im Hauptdateisystem basierend auf dem relativen Pfad berechnet und dabei die Platzierung des Containers berücksichtigt. Beim Ausführen des Befehls „docker cp“ kam es zu einem kurzfristigen Fehler Rennbedingung, bei dem der Pfad bereits überprüft wurde, der Vorgang jedoch noch nicht ausgeführt wurde. Da das Kopieren im Kontext des Hauptdateisystems des Hostsystems erfolgt, können Sie innerhalb eines bestimmten Zeitraums den Link durch einen anderen Pfad ersetzen und das Kopieren von Daten an einen beliebigen Ort im Dateisystem außerhalb des Hostsystems veranlassen Container.

Da das Zeitfenster für das Eintreten einer Rennbedingung in einem vorbereiteten Zustand sehr begrenzt ist Prototyp ausnutzen Bei Kopiervorgängen aus einem Container war es in weniger als 1 % der Fälle möglich, einen erfolgreichen Angriff zu erzielen, indem ein symbolischer Link im Pfad, der beim Kopiervorgang verwendet wurde, zyklisch ersetzt wurde (der erfolgreiche Angriff wurde nach etwa 10 Sekunden Versuchszeit ausgeführt). um die Datei kontinuierlich in einer Schleife mit dem Befehl „docker cp“ zu kopieren).

Durch die Durchführung eines Kopiervorgangs in einen Container können Sie in nur wenigen Iterationen einen wiederholbaren Dateiüberschreibangriff auf das Hostsystem durchführen. Die Angriffsmöglichkeit besteht darin, dass beim Kopieren in einen Container das „chrootarchive“-Konzept zum Einsatz kommt, wonach der archive.go-Prozess das Archiv nicht in die Chroot des Container-Roots, sondern in die Chroot des Containers extrahiert Das übergeordnete Verzeichnis des Zielpfads wird vom Angreifer kontrolliert und stoppt die Ausführung des Containers nicht (Chroot wird als Zeichen für die Ausnutzung von Race Conditions verwendet).

Source: opennet.ru

Kommentar hinzufügen