Fuga dal Container: Escape to Host (T1611)
La tecnica Escape to Host descrive l'evasione di un attaccante dal perimetro di un container o di una macchina virtuale verso il sistema host sottostante. È catalogata da MITRE ATT&CK sotto la tattica TA0004 (Privilege Escalation) e rappresenta uno dei salti di privilegio più impattanti in ambienti cloud-native, perché rompe l'assunto fondamentale di isolamento su cui poggiano Docker, Kubernetes ed ESXi.
Le modalità di evasione documentate sono molteplici: montaggio del filesystem host tramite parametro bind, container --privileged che eredita capabilities kernel complete, abuso della socket docker.sock esposta all'interno del pod, chiamate di sistema come unshare e keyctl per sfuggire ai namespace, exploit su symlink globali (caso Windows Server Container) e vulnerabilità dell'hypervisor ESXi che permettono il passaggio da guest a VMkernel.
L'impatto operativo è severo: dai dati MITRE emergono 1 gruppo APT (TeamTNT), 4 famiglie malware/tool (Doki, Hildegard, Siloscape, Peirates) e 5 mitigazioni raccomandate. Una volta ottenuto l'accesso all'host, l'attaccante può stabilire persistenza tramite cron, spostarsi lateralmente verso altri container coabitanti, accedere ai segreti del nodo Kubernetes (kubelet credentials, service account token) e piazzare un canale C2 direttamente sul sistema operativo sottostante, aggirando qualsiasi controllo applicativo a livello di runtime del container.
In un ingaggio red team su infrastruttura containerizzata, la simulazione di T1611 parte dalla ricognizione delle capabilities e dei mount disponibili all'interno del container compromesso. Il primo controllo è banale ma rivelatore: cat /proc/self/status | grep CapEff mostra le capabilities effettive; un valore come 0000003fffffffff indica un container --privileged da cui la fuga è quasi immediata.
Lo scenario più classico è il mount della socket Docker. Se /var/run/docker.sock è esposta nel container, basta installare il client Docker (apk add docker-cli su Alpine) ed eseguire un comando che lancia un nuovo container con il filesystem host montato:
docker -H unix:///var/run/docker.sock run -v /:/host -it alpine chroot /host bash
A quel punto si è root sull'host. Un pattern equivalente in Kubernetes sfrutta l'API server: Peirates (open source, repository InGuardians su GitHub) automatizza l'enumerazione dei service account token in /var/run/secrets/kubernetes.io/serviceaccount/token e il lancio di pod con hostPath: / per ottenere reverse shell sul nodo.
Per container privilegiati senza socket Docker, la strada canonica è il caricamento di un modulo kernel oppure l'abuso del cgroup release_agent, tecnica pubblicata da Felix Wilhelm. In alternativa, BOtB (Break out the Box, open source) fornisce un binario Go che testa automaticamente più vettori: CVE-2019-5736 (runc), abuso di /proc/sys/kernel/core_pattern, mount del device host. Il tool è stato integrato nel malware Hildegard, quindi la sua telemetria è realistica per esercizi di detection engineering.
Su Windows Server Containers il vettore documentato è l'abuso dei symbolic link globali via NtSetInformationSymbolicLink, sfruttato da Siloscape per mappare il drive C: dell'host nel container. La PoC richiede l'esecuzione all'interno di un container process-isolated (non Hyper-V) e la creazione di un link che punti a \GLOBAL??\C:.
In ambiente ESXi, la simulazione lab-safe si limita a esercitare le CVE storiche (CVE-2021-21974 su OpenSLP, CVE-2024-37085 su AD group bypass) in un cluster isolato. Il red team deve validare che la segmentazione della management network impedisca l'accesso alla porta 443 del vCenter da workload guest.
Stack di laboratorio consigliato: kind o minikube (open source) per il cluster Kubernetes, Falco (open source) come sensore, kube-bench (open source) per la baseline CIS. Ogni test va documentato con hash del binario, timestamp UTC e nodo target per correlazione con il blue team.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo