Docker release_agent cgroups escape
Para más detalles, consulta el post original del blog. Este es solo un resumen:
Original PoC:
La prueba de concepto (PoC) demuestra un método para explotar cgroups creando un archivo release_agent
y provocando su invocación para ejecutar comandos arbitrarios en el host del contenedor. Aquí hay un desglose de los pasos involucrados:
Preparar el Entorno:
Se crea un directorio
/tmp/cgrp
para servir como punto de montaje para el cgroup.El controlador de cgroup RDMA se monta en este directorio. En caso de ausencia del controlador RDMA, se sugiere usar el controlador de cgroup
memory
como alternativa.
Configurar el Cgroup Hijo:
Se crea un cgroup hijo llamado "x" dentro del directorio cgroup montado.
Se habilitan las notificaciones para el cgroup "x" escribiendo 1 en su archivo notify_on_release.
Configurar el Agente de Liberación:
La ruta del contenedor en el host se obtiene del archivo /etc/mtab.
El archivo release_agent del cgroup se configura para ejecutar un script llamado /cmd ubicado en la ruta del host adquirida.
Crear y Configurar el Script /cmd:
El script /cmd se crea dentro del contenedor y se configura para ejecutar ps aux, redirigiendo la salida a un archivo llamado /output en el contenedor. Se especifica la ruta completa de /output en el host.
Disparar el Ataque:
Se inicia un proceso dentro del cgroup hijo "x" y se termina inmediatamente.
Esto activa el
release_agent
(el script /cmd), que ejecuta ps aux en el host y escribe la salida en /output dentro del contenedor.
Last updated