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.
# 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"]# 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Docker Corriendo como Root
mediumLos contenedores que corren como root dan a cualquier vulnerabilidad de ejecución de código acceso root inmediato al contenedor — y potencialmente al host.
Docker Tag Latest
lowUsar FROM image:latest significa que un nuevo pull puede cambiar silenciosamente tu imagen base, rompiendo la reproducibilidad y potencialmente introduciendo vulnerabilidades.
Secrets en Dockerfile
criticalLos secrets agregados via ENV, ARG o COPY .env en un Dockerfile quedan grabados en las capas de la imagen y son legibles por cualquiera que descargue la imagen.
Sin Health Check en Docker
lowSin una instrucción HEALTHCHECK, Docker y los orquestadores no pueden detectar cuando tu contenedor está corriendo pero roto — enrutando tráfico a una app muerta.