
Erstellen von rohen TCP/IP-Paketen zum Senden an schlecht konfigurierte Kubernetes-Server - CVE-2020-8558 PoC
Ein Repository mit einem Python-Skript, das zum Erstellen von rohen TCP/IP-Paketen verwendet werden kann.
Verwendet zum Testen von Martian Packets im Rahmen einer Sicherheitslücke in Kubernetes (kube-proxy: CVE-2020-8558). Dieser PoC behandelt die Umgehung der localhost-Grenze von Pod zu Knoten (Host).
Für einen einfachen und robusten PoC für den Knoten-zu-Knoten-Teil der Sicherheitslücke siehe hier.
Referenzen zur Paketerstellung:
https://inc0x0.com/tcp-ip-packets-introduction/tcp-ip-packets-3-manually-create-and-send-raw-tcp-ip-packets/
https://gist.github.com/NickKaramoff/b06520e3cb458ac7264cab1c51fa33d6
Es gibt ein Dockerfile und ein Pod-Manifest, um den Exploit in Kubernetes bereitzustellen und so einfach zu überprüfen, ob ein Cluster anfällig ist. Das Skript wurde aktualisiert, um den nicht authentifizierten kube-apiserver auf Port 8080 anzugreifen, der auf Master-Knoten läuft (das Manifest stellt den Pod auf einem Master-Knoten bereit).
Der Exploit nutzt die REST-API des kube-apiserver, um einen Pod im Standard-Namespace Ihres Clusters mit dem Namen youve-been-pwned zu erstellen. Dieser Pod gibt in einer Endlosschleife nur Text aus und muss manuell gelöscht werden.
Ich hatte bei bestimmten Clustern (mit Cilium) Probleme, wenn der Prozess sofort bei der Containererstellung gestartet wurde, da nach dem Senden eines initialen SYN kein SYN/ACK vom Host empfangen wurde. Ich habe dies mit dem start.sh-Skript umgangen, das einfach prüft, ob das Netzwerk aktiv ist, bevor der Exploit gestartet wird – das schien zu helfen.