Docker release_agent cgroups escape
Für weitere Details, siehe den originalen Blogbeitrag. Dies ist nur eine Zusammenfassung:
Original PoC:
Der Proof of Concept (PoC) demonstriert eine Methode, um cgroups auszunutzen, indem eine release_agent
-Datei erstellt und deren Aufruf ausgelöst wird, um beliebige Befehle auf dem Container-Host auszuführen. Hier ist eine Aufschlüsselung der beteiligten Schritte:
Umgebung vorbereiten:
Ein Verzeichnis
/tmp/cgrp
wird erstellt, um als Mount-Punkt für die cgroup zu dienen.Der RDMA cgroup-Controller wird in dieses Verzeichnis gemountet. Im Falle des Fehlens des RDMA-Controllers wird empfohlen, den
memory
cgroup-Controller als Alternative zu verwenden.
Richten Sie die Kind-Cgroup ein:
Eine Kind-Cgroup mit dem Namen "x" wird im gemounteten Cgroup-Verzeichnis erstellt.
Benachrichtigungen sind für die "x" Cgroup aktiviert, indem 1 in die Datei notify_on_release geschrieben wird.
Release-Agent konfigurieren:
Der Pfad des Containers auf dem Host wird aus der Datei /etc/mtab abgerufen.
Die release_agent-Datei der cgroup wird dann so konfiguriert, dass sie ein Skript mit dem Namen /cmd ausführt, das sich am ermittelten Host-Pfad befindet.
Erstellen und Konfigurieren des /cmd-Skripts:
Das /cmd-Skript wird innerhalb des Containers erstellt und so konfiguriert, dass es ps aux ausführt und die Ausgabe in eine Datei namens /output im Container umleitet. Der vollständige Pfad von /output auf dem Host wird angegeben.
Trigger den Angriff:
Ein Prozess wird innerhalb der "x" Kind-Cgroup gestartet und sofort beendet.
Dies löst den
release_agent
(das /cmd-Skript) aus, der ps aux auf dem Host ausführt und die Ausgabe in /output innerhalb des Containers schreibt.
Last updated