
Criando pacotes TCP/IP brutos para enviar a servidores Kubernetes mal configurados - CVE-2020-8558 PoC
Um repositório contendo um script Python que pode ser usado para criar pacotes TCP/IP brutos.
Usado para testar pacotes marcianos após uma vulnerabilidade anunciada no Kubernetes (kube-proxy: CVE-2020-8558). Este PoC cobre a bypass do limite localhost do pod para o nó (host).
Para um PoC simples e robusto para a parte nó para nó da vulnerabilidade, veja aqui.
Créditos pela criação de pacotes:
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
Existe um Dockerfile e um manifest de pod para implantar o exploit no Kubernetes para provar facilmente se um cluster é vulnerável. O script foi atualizado para atingir o servidor API do kube não autenticado na porta 8080 que roda em nós master (o manifest irá implantar o pod em um nó master).
O exploit usará a API REST do kube apiserver para criar um pod no namespace padrão do seu cluster com o nome: youve-been-pwned. Este pod apenas exibe texto em um loop infinito e precisará ser deletado manualmente.
Tive alguns problemas em certos clusters (rodando Cilium) ao iniciar o processo imediatamente na criação do container, onde nenhum syn/ack era recebido do host após enviar um syn inicial. Contornei isso com o script start.sh, que apenas verifica se a rede está ativa antes de iniciar o exploit - isso pareceu ajudar.