
Costruzione di pacchetti TCP/IP grezzi da inviare a server Kubernetes mal configurati - CVE-2020-8558 PoC
Un repository contenente uno script Python che può essere utilizzato per creare pacchetti TCP/IP grezzi.
Utilizzato per testare i pacchetti "martian" in seguito a una vulnerabilità annunciata in Kubernetes (kube-proxy: CVE-2020-8558). Questa PoC copre il bypass del confine localhost pod -> nodo (host).
Per una PoC semplice e robusta per la parte nodo -> nodo della vulnerabilità, vedere qui.
Crediti per la creazione dei pacchetti:
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
Sono presenti un Dockerfile e un manifest del pod per distribuire l'exploit su Kubernetes al fine di verificare facilmente se un cluster è vulnerabile. Lo script è stato aggiornato per colpire il kube api server non autenticato sulla porta 8080, che gira sui nodi master (il manifest distribuirà il pod su un nodo master).
L'exploit userà l'API REST del kube apiserver per creare un pod nel namespace predefinito del tuo cluster con il nome: youve-been-pwned. Questo pod si limita a ripetere testo in un ciclo infinito e dovrà essere eliminato manualmente.
Ho avuto alcuni problemi su alcuni cluster (che eseguono cilium) quando avviavo il processo immediatamente alla creazione del container, dove non veniva ricevuto alcun syn/ack dall'host dopo l'invio di un syn iniziale. Ho aggirato il problema con lo script start.sh, che verifica semplicemente che la rete sia attiva prima di avviare l'exploit: questo sembra aver aiutato.