Docker privileged container escape

docker run --privileged --pid=host -it alpine nsenter -t 1 -m -u -i -n -p sh

Escapa de un contenedor privilegiado: con --privileged y --pid=host, nsenter entra en los namespaces del proceso 1 del host y te da una shell con los privilegios del sistema anfitrion.

Cuando estas dentro de un contenedor que se lanzo con --privileged (todas las capabilities, sin seccomp) o tienes acceso a docker para lanzar uno tu mismo. --pid=host permite ver los procesos del host; nsenter -t 1 entra en sus namespaces (mount, uts, ipc, net, pid) y te deja operar como si estuvieras en el host.

Si el contenedor no es privilegiado y no tienes CAP_SYS_ADMIN, nsenter fallara con permission denied. Tampoco si el host usa user namespaces (userns-remap en el daemon): el UID 0 del contenedor no es el del host.