
Writeup di CVE-2017-1002101 con esempio di "exploit"/escape
Dopo aver letto del problema e aver seguito questa guida, ho voluto approfondire un po' la cosa. Questo repository contiene un paio di deployment di pod e script shell di supporto che dimostrano il meccanismo di attacco nel modo più semplice possibile, così che amministratori e operatori Kubernetes possano comprendere appieno la gravità e i potenziali rischi. Devi essere un utente autenticato o poter controllare lo spec/template di un pod al momento della creazione, quindi questa fuga non è probabile che avvenga in forma anonima, a meno che non venga combinata con altri attacchi come questo.
Quando il Kubelet monta un volume/secret/configmap, ecc., segue erroneamente i symlink all'interno del volume verso posizioni fuori dall'ambito dovuto. Poiché il Kubelet gira come root, ciò significa che può essere ingannato facendogli montare parti privilegiate del filesystem dell'host all'interno del container di un pod non privilegiato.
Il mio approccio è stato usare un singolo pod con due container "normali". Un container crea il symlink a / o e l'altro entra in crash loop finché l'operazione non riesce (forzando il rimontaggio del volume e seguendo quel percorso di symlink), consentendo all'utente di eseguire exec nel secondo container e accedere al punto di mount.
/home/ubuntuNota: questi esempi funzionano senza modifiche su un host Ubuntu 16.04, ma possono essere facilmente adattati ad altre configurazioni.
./run-as-root.sh se il tuo cluster è abbastanza "standard"../run-as-root-no-chroot.sh o ./run-as-user-1000.sh per altre varianti.È davvero una situazione "must-patch". Purtroppo, le soluzioni alternative elencate qui non sono particolarmente pratiche per la maggior parte delle persone. Quasi tutte le versioni precedenti sono vulnerabili.