lowCWE-16A05:2021

Puertos Expuestos Innecesarios

Hacer EXPOSE de puertos que tu aplicación no usa realmente aumenta la superficie de ataque sin ningún beneficio.

Cómo Funciona

EXPOSE en un Dockerfile documenta que un contenedor escucha en un puerto. Aunque no publica automáticamente puertos al host, señala a herramientas de orquestación como Kubernetes y Docker Compose que esos puertos están disponibles. Exponer puertos como el 22 (SSH) o puertos de depuración (9229) en contenedores de producción invita a ataques.

Código Vulnerable
# MAL: exponiendo SSH y puertos de debug que no deberían estar en producción
FROM node:20-alpine
EXPOSE 3000
EXPOSE 22    # SSH — nunca debería estar en un contenedor de producción
EXPOSE 9229  # debugger de Node.js — peligroso en producción
CMD ["node", "server.js"]
Código Seguro
# BIEN: solo expone el puerto que tu aplicación realmente sirve
FROM node:20-alpine
EXPOSE 3000  # solo el puerto de la aplicación
CMD ["node", "server.js"]

Ejemplo Real

Deployments de Kubernetes mal configurados que exponen el puerto 9229 (inspector de Node.js) han sido explotados en la práctica. Los atacantes se conectan al puerto de debug y logran ejecución remota de código completa enviando JavaScript arbitrario.

Cómo Prevenirlo

  • Solo haz EXPOSE de los puertos en los que tu aplicación realmente escucha en producción
  • Nunca expongas el puerto 22 (SSH), 9229 (debugger de Node), o puertos de base de datos (5432, 3306) en imágenes de producción
  • Usa network policies en Kubernetes para restringir qué servicios pueden comunicarse en cada puerto
  • Audita tu docker-compose.yml y manifiestos de Kubernetes en busca de mappings de puertos innecesarios

Tecnologías Afectadas

Docker

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas