Los investigadores de seguridad han encontrado cuatro vulnerabilidades en los componentes de Docker que podrían permitir a los atacantes acceder a los sistemas operativos host desde dentro de los contenedores. Una de esas vulnerabilidades está en runc, una herramienta de línea de comandos para generar y ejecutar contenedores en Linux que sustenta múltiples motores de contenedores, no solo Docker.
Las vulnerabilidades fueron encontradas por Rory McNamara, investigador de la firma de seguridad en la nube Snyk, quienes colectivamente las llamaron «Leaky Vessels» porque permiten romper la capa de aislamiento crítica entre los contenedores y el sistema operativo host. “Estos escapes de contenedores podrían permitir a un atacante obtener acceso no autorizado al sistema operativo host subyacente desde dentro del contenedor y potencialmente permitir el acceso a datos confidenciales (credenciales, información del cliente, etc.) y lanzar más ataques, especialmente cuando el acceso obtenido incluye privilegios de superusuario”, dijo Snyk en una publicación de blog.
La vulnerabilidad proporciona múltiples rutas de ataque desde runc
Runc puede verse como la conexión que vincula la mayoría de los motores de administración de contenedores, como Docker, Containerd, Podman y CRI-O, con las funciones de espacio aislado del kernel de Linux: grupos de control, espacios de nombres, seccomp, apparmor, etc. Admite múltiples comandos para iniciar, detener, suspender, pausar y enumerar contenedores, así como ejecutar procesos dentro de contenedores.
La vulnerabilidad runc encontrada por McNamara, rastreada como CVE-2024-21626, se debe a que un descriptor de archivo se filtró inadvertidamente internamente dentro de runc, incluido un identificador para el grupo /sys/fs/cgroup del host. Esto se puede explotar de múltiples maneras, una encontrada por McNamara y otras tres encontradas por los mantenedores de runc.
“Si el contenedor se configuró para tener Process.cwd configurado en /proc/self/fd/7/ (el fd real puede cambiar según el orden de apertura de los archivos en runc), el proceso pid1 resultante tendrá un directorio de trabajo en el montaje del host. espacio de nombres y, por lo tanto, el proceso generado puede acceder a todo el sistema de archivos del host”, advierten los mantenedores de runc en un aviso. “Esto por sí solo no es una hazaña contra runc. Sin embargo, una imagen maliciosa podría convertir cualquier ruta que no sea / de apariencia inocua en un enlace simbólico a /proc/self/fd/7/ y así engañar a un usuario para que inicie un contenedor cuyo binario tenga acceso al sistema de archivos del host”.
Este exploit tiene como objetivo el comando runc run, que se utiliza para crear e iniciar un nuevo contenedor a partir de una imagen. Muchos contenedores se inician a partir de imágenes descargadas de repositorios públicos como Docker Hub y con el tiempo se han cargado imágenes maliciosas en el registro.