
Forge de paquets TCP/IP bruts à envoyer à des serveurs Kubernetes mal configurés - PoC CVE-2020-8558
Un dépôt contenant un script Python permettant de fabriquer des paquets TCP/IP bruts.
Utilisé pour tester les paquets martiens suite à une vulnérabilité annoncée dans Kubernetes (kube-proxy : CVE-2020-8558). Cette preuve de concept couvre le contournement de la frontière localhost du pod vers le nœud (hôte).
Pour une preuve de concept simple et robuste de la partie nœud à nœud de la vulnérabilité, voir ici.
Crédits pour la fabrication des paquets :
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
Il y a un Dockerfile et un manifeste de pod pour déployer l'exploit sur Kubernetes afin de prouver facilement si un cluster est vulnérable. Le script a été mis à jour pour cibler le serveur API kube non authentifié sur le port 8080 qui s'exécute sur les nœuds maîtres (le manifeste déploiera le pod sur un nœud maître).
L'exploit utilisera l'API REST de l'apiserver kube pour créer un pod dans l'espace de noms par défaut de votre cluster avec le nom : youve-been-pwned. Ce pod se contente d'afficher du texte en boucle infinie et devra être supprimé manuellement.
J'ai rencontré certains problèmes sur certains clusters (exécutant cilium) lors du démarrage immédiat du processus à la création du conteneur, où aucun syn/ack n'était reçu de l'hôte après l'envoi d'un syn initial. J'ai contourné ce problème avec le script start.sh, qui vérifie simplement que le réseau est opérationnel avant de lancer l'exploit - cela semble aider.