El archivo /var/run/docker.sock es el endpoint de la API de Docker. Es una herramienta poderosa, pero frecuentemente mal gestionada. Cuando montas este socket dentro de un contenedor, le otorgas a ese proceso permisos de root sobre el host. Si un atacante compromete el contenedor (por ejemplo, mediante una vulnerabilidad RCE en una aplicación web), obtiene control total sobre el daemon de Docker, permitiéndole crear contenedores privilegiados, montar volúmenes del host o simplemente detener servicios críticos. Es la vía rápida hacia el «escape del contenedor».
¿Cómo verificar si estás en riesgo?
La forma más directa de auditar qué contenedores tienen acceso al socket es inspeccionar la configuración de montaje de tus contenedores en ejecución. Puedes usar este comando en tu terminal para listar contenedores que tienen acceso al socket:
$ docker ps --format "{{.ID}} {{.Image}} {{.Names}}" | while read id img name; do
if docker inspect $id --format '{{.Mounts}}' | grep -q "docker.sock"; then
echo "[!] ALERTA: El contenedor $name ($img) tiene acceso al socket."
fi
done
Si el comando devuelve algún resultado, ese contenedor es un vector de ataque directo hacia el host.
Lista de verificación (Checklist) de mitigación
- Si tu aplicación requiere interactuar con el daemon de Docker (por ejemplo, agentes de CI/CD o herramientas de monitoreo), implementa estos controles:
- Usa un Proxy de Socket: No expongas el socket directamente. Implementa un Docker Socket Proxy que limite los métodos HTTP permitidos. Así, si el contenedor es comprometido, solo podrá ejecutar comandos seguros (como listar imágenes) y no podrá borrar todo el host.
- Modo Rootless: Considera ejecutar el daemon de Docker en modo rootless. Esto limita drásticamente el impacto de un escape exitoso, ya que el atacante no tendría privilegios de root en el sistema operativo principal.
- Privilegios mínimos: Utiliza la opción –read-only al montar el socket siempre que sea posible.
- Network Namespace: Si solo necesitas conectarte a la API, no montes el socket como volumen. Expón el puerto TCP del daemon (protegido por TLS) a través de una red privada y aislada.
Recomendación final
La conveniencia no puede superar a la arquitectura de seguridad. Si tu pipeline de CI/CD o herramienta de monitoreo te obliga a montar /var/run/docker.sock con privilegios de escritura, estás ante una falla crítica de diseño que debe ser corregida antes de pasar a producción.
¿Has revisado los montajes de tus contenedores hoy o confías ciegamente en las configuraciones por defecto? Déjame tus dudas o comenta qué estrategia usas para gestionar tus despliegues.
0 comentarios