release_agent exploit - Relative Paths to PIDs
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Para más detalles consulta el blog en https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Esto es solo un resumen:
La técnica describe un método para ejecutar código del host desde dentro de un contenedor, superando los desafíos planteados por las configuraciones del controlador de almacenamiento que oscurecen la ruta del sistema de archivos del contenedor en el host, como Kata Containers o configuraciones específicas de devicemapper
.
Pasos clave:
Localización de IDs de Proceso (PIDs): Usando el enlace simbólico /proc/<pid>/root
en el pseudo-sistema de archivos de Linux, se puede acceder a cualquier archivo dentro del contenedor en relación con el sistema de archivos del host. Esto elude la necesidad de conocer la ruta del sistema de archivos del contenedor en el host.
Bash de PID: Se emplea un enfoque de fuerza bruta para buscar a través de los PIDs en el host. Esto se hace verificando secuencialmente la presencia de un archivo específico en /proc/<pid>/root/<file>
. Cuando se encuentra el archivo, indica que el PID correspondiente pertenece a un proceso que se ejecuta dentro del contenedor objetivo.
Activación de Ejecución: La ruta del PID adivinada se escribe en el archivo cgroups release_agent
. Esta acción activa la ejecución del release_agent
. El éxito de este paso se confirma al verificar la creación de un archivo de salida.
El proceso de explotación implica un conjunto de acciones más detallado, con el objetivo de ejecutar una carga útil en el host adivinando el PID correcto de un proceso que se ejecuta dentro del contenedor. Así es como se desarrolla:
Inicializar Entorno: Se prepara un script de carga útil (payload.sh
) en el host, y se crea un directorio único para la manipulación de cgroup.
Preparar Carga Útil: Se escribe y se hace ejecutable el script de carga útil, que contiene los comandos a ejecutar en el host.
Configurar Cgroup: El cgroup se monta y se configura. Se establece la bandera notify_on_release
para asegurar que la carga útil se ejecute cuando se libere el cgroup.
Fuerza Bruta de PID: Un bucle itera a través de PIDs potenciales, escribiendo cada PID adivinado en el archivo release_agent
. Esto efectivamente establece el script de carga útil como el release_agent
.
Activar y Verificar Ejecución: Para cada PID, se escribe en cgroup.procs
del cgroup, activando la ejecución del release_agent
si el PID es correcto. El bucle continúa hasta que se encuentra la salida del script de carga útil, indicando una ejecución exitosa.
PoC del blog:
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)