/proc et /sys ne sont pas des fichiers ordinaires : de nombreuses entrées sont des points de contrôle que le noyau relit et sur lesquels il agit. Une poignée d'entre elles nomment un programme que le noyau exécute, en tant que root dans les espaces de noms init de l'hôte, lorsqu'un événement survient : un plantage (core_pattern), un chargement automatique de module noyau (modprobe), ou un uevent de périphérique (uevent_helper). D'autres exposent directement la mémoire de l'hôte (kcore) ou permettent à un processus de solliciter le noyau de l'hôte (sysrq-trigger). Il ne s'agit d'évasions que lorsque le conteneur a le véritable procfs ou sysfs de l'hôte monté et accessible en écriture, ce qui se produit avec un -v /proc:/host/proc imprudent, un remontage de procfs, ou un conteneur privilégié.
Vérifiez ce qui est exposé et accessible en écriture :
mount | grep -E 'proc|sys' # look for host proc/sys without "ro"
ls -l /proc/sys/kernel/core_pattern /proc/sys/kernel/modprobe 2>/dev/null
ls -l /sys/kernel/uevent_helper 2>/dev/null
for f in /proc/sys/kernel/core_pattern /proc/sys/kernel/modprobe /sys/kernel/uevent_helper; do
[ -w "$f" ] && echo "writable: $f"; done
Sous-thèmes#
- core_pattern : rediriger par pipe le core dump d'un processus qui plante vers un programme de l'hôte.
- chemin modprobe : détourner le chargeur automatique de modules que le noyau exécute en tant que root.
- uevent_helper : exécuter un programme sur un uevent de périphérique.
- binfmt_misc : enregistrer un interpréteur pour un format de fichier.
- sysrq-trigger : invoquer les actions magic-sysrq du noyau de l'hôte.
- accès aux processus de l'hôte : lire la mémoire et l'environnement des processus de l'hôte.
- lecture mémoire kcore : extraire la mémoire du noyau de l'hôte via /proc/kcore.