
Elaborando paquetes TCP/IP en bruto para enviar a servidores Kubernetes mal configurados - CVE-2020-8558 PoC
Un repositorio que contiene un script de Python que se puede utilizar para crear paquetes TCP/IP sin procesar (raw).
Se utiliza para probar paquetes marcianos tras una vulnerabilidad anunciada en Kubernetes (kube-proxy: CVE-2020-8558). Este PoC cubre la omisión del límite de localhost entre pod -> node (host).
Para un PoC simple y robusto de la parte node -> node de la vulnerabilidad, ver aquí.
Créditos de creación de paquetes:
https://inc0x0.com/tcp-ip-packets-introduction/tcp-ip-packets-3-manually-create-and-send-raw-tcp-ip-packets/
https://gist.github.com/NickKaramoff/b06520e3cb458ac7264cab1c51fa33d6
Hay un Dockerfile y un manifiesto de pod para desplegar el exploit en Kubernetes y comprobar fácilmente si un clúster es vulnerable. El script se ha actualizado para apuntar al servidor API de kube no autenticado en el puerto 8080, que se ejecuta en los nodos maestros (el manifiesto desplegará el pod en un nodo maestro).
El exploit utilizará la API REST del apiserver de kube para crear un pod en el namespace predeterminado de tu clúster con el nombre: youve-been-pwned. Este pod solo repite texto en un bucle infinito y deberá eliminarse manualmente.
Tuve algunos problemas en ciertos clústeres (que ejecutan cilium) al iniciar el proceso inmediatamente después de la creación del contenedor, donde no se recibía ningún syn/ack del host tras enviar un syn inicial. Lo he solucionado con el script start.sh, que simplemente comprueba que la red está activa antes de iniciar el exploit; esto pareció ayudar.