Muchos administradores y desarrolladores despliegan contenedores Docker por defecto con el usuario root. Es el camino fácil, pero es una pesadilla de seguridad. Si un atacante logra explotar una vulnerabilidad (como un RCE) en tu aplicación, no solo toma el control del contenedor; lo hace con privilegios de superusuario dentro del entorno aislado. Un container breakout ejecutado como root es un desastre operativo crítico.

La realidad técnica

Aunque los namespaces del kernel de Linux proveen aislamiento, el root dentro del contenedor suele mapearse al mismo UID 0 del host si no tienes configurado User Namespaces (userns-remap). Cualquier vulnerabilidad en el runtime o una mala configuración de capacidades permite que un atacante salte al kernel del host con relativa facilidad.

Ejemplo: Asegura tu Dockerfile

No confíes en los valores por defecto. Crea un usuario específico en tu imagen:

Mala práctica: Ejecuta como root por defecto
FROM node:20
CMD ["node", "app.js"]
Buenas práctica: Crea un usuario sin privilegios
FROM node:20
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
Asegura permisos en los archivos de la app
COPY --chown=appuser:appuser . .
CMD ["node", "app.js"]

Checklist de Mitigación Rápida

  • USER Instruction: Define siempre un usuario no privilegiado en el Dockerfile. Es tu primera línea de defensa.
  • Capabilities: Aplica principio de menor privilegio con –cap-drop=ALL y añade solo lo necesario con –cap-add.
  • Filesystem: Monta los directorios sensibles del contenedor en modo –read-only.
  • No-new-privileges: Usa el flag –security-opt=no-new-privileges en tu docker-compose o comando run para evitar que procesos ganen nuevos privilegios (ej. mediante binarios SUID).
  • Verificación: Ejecuta docker run –rm -it whoami. Si el output es root, necesitas ajustar tu configuración.

Automatización y CI/CD

Implementar esto manualmente es tedioso y propenso a errores. En entornos de DevSecOps, la validación debe ocurrir antes del build.

¿Qué herramienta utilizas para escanear tus Dockerfiles en el pipeline antes de enviarlos a registro? ¿Prefieres el linting estático con hadolint o escaneos de vulnerabilidades dinámicos tipo Trivy/Clair? Te leo en los comentarios.


Daniel Maldonado

¡Hola! Soy Daniel Maldonado, Sr. Analista de Seguridad Informática y me dedico al hacking desde hace más de 10 años.

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Daniel Maldonado
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.