mediumCWE-250A05:2021

Docker Corriendo como Root

Los contenedores que corren como root dan a cualquier vulnerabilidad de ejecución de código acceso root inmediato al contenedor — y potencialmente al host.

Cómo Funciona

Por defecto, los contenedores Docker corren como el usuario root dentro del contenedor. Si un atacante explota tu app (por ejemplo, via inyección de comandos), obtiene root en el contenedor. Combinado con montajes de volumen mal configurados o exposición del socket de Docker, root en el contenedor frecuentemente significa root en el host.

Código Vulnerable
# MAL: sin instrucción USER — corre como root por defecto
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci
EXPOSE 3000
CMD ["node", "server.js"]
Código Seguro
# BIEN: crea un usuario sin privilegios y cámbia a él
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci --only=production
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
EXPOSE 3000
CMD ["node", "server.js"]

Ejemplo Real

La vulnerabilidad de escape de contenedor runc de 2019 (CVE-2019-5736) permitía que root dentro de un contenedor sobreescribiera el binario runc en el host. Los contenedores corriendo como usuarios no-root no fueron afectados por esta clase de ataque.

Cómo Prevenirlo

  • Siempre agrega una instrucción USER a tu Dockerfile con un usuario no-root
  • Usa addgroup y adduser en Alpine, o groupadd/useradd en imágenes basadas en Debian
  • Establece --cap-drop=ALL en docker run para eliminar todas las capabilities, agregando de vuelta solo las necesarias
  • Usa el flag --read-only de Docker para hacer el filesystem del contenedor inmutable donde sea posible

Tecnologías Afectadas

Docker

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas