release_agent exploit - Relative Paths to PIDs
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Für weitere Details überprüfen Sie den Blogbeitrag von https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Dies ist nur eine Zusammenfassung:
Die Technik beschreibt eine Methode zum Ausführen von Host-Code aus einem Container, die Herausforderungen durch Speicher-Driver-Konfigurationen überwindet, die den Dateisystempfad des Containers auf dem Host verschleiern, wie Kata Containers oder spezifische devicemapper
-Einstellungen.
Wichtige Schritte:
Prozess-IDs (PIDs) lokalisieren: Mit dem symbolischen Link /proc/<pid>/root
im Linux-Pseudo-Dateisystem kann jede Datei innerhalb des Containers relativ zum Dateisystem des Hosts zugegriffen werden. Dies umgeht die Notwendigkeit, den Dateisystempfad des Containers auf dem Host zu kennen.
PID Bashing: Ein Brute-Force-Ansatz wird verwendet, um durch PIDs auf dem Host zu suchen. Dies geschieht, indem nacheinander auf das Vorhandensein einer bestimmten Datei unter /proc/<pid>/root/<file>
überprüft wird. Wenn die Datei gefunden wird, zeigt dies an, dass die entsprechende PID zu einem Prozess gehört, der im Zielcontainer läuft.
Ausführung auslösen: Der erratene PID-Pfad wird in die Datei cgroups release_agent
geschrieben. Diese Aktion löst die Ausführung des release_agent
aus. Der Erfolg dieses Schrittes wird durch die Überprüfung der Erstellung einer Ausgabedatei bestätigt.
Der Ausbeutungsprozess umfasst eine detailliertere Reihe von Aktionen, die darauf abzielen, ein Payload auf dem Host auszuführen, indem die korrekte PID eines Prozesses, der im Container läuft, erraten wird. So verläuft es:
Umgebung initialisieren: Ein Payload-Skript (payload.sh
) wird auf dem Host vorbereitet, und ein einzigartiges Verzeichnis wird für die cgroup-Manipulation erstellt.
Payload vorbereiten: Das Payload-Skript, das die auszuführenden Befehle auf dem Host enthält, wird geschrieben und ausführbar gemacht.
Cgroup einrichten: Die cgroup wird gemountet und konfiguriert. Das Flag notify_on_release
wird gesetzt, um sicherzustellen, dass das Payload ausgeführt wird, wenn die cgroup freigegeben wird.
Brute Force PID: Eine Schleife iteriert durch potenzielle PIDs und schreibt jede erratene PID in die Datei release_agent
. Dies setzt das Payload-Skript effektiv als release_agent
.
Ausführung auslösen und überprüfen: Für jede PID wird in die cgroup.procs
der cgroup geschrieben, was die Ausführung des release_agent
auslöst, wenn die PID korrekt ist. Die Schleife wird fortgesetzt, bis die Ausgabe des Payload-Skripts gefunden wird, was auf eine erfolgreiche Ausführung hinweist.
PoC aus dem Blogbeitrag:
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)