criticalCWE-540A02:2021

Secrets en Dockerfile

Los 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.

Cómo Funciona

Las imágenes Docker son por capas. Aunque elimines un secret en un comando RUN posterior, sigue siendo legible en la capa anterior via docker history o extrayendo el tarball de la imagen. Cualquiera que descargue tu imagen — incluyendo sistemas CI, registros o usuarios no autorizados — puede extraerlo.

Código Vulnerable
# MAL: secrets grabados en capas de imagen — permanentes y extraíbles
FROM node:20-alpine
ENV DATABASE_URL=postgres://usuario:secret@host/db
ARG STRIPE_SECRET_KEY
COPY .env /app/.env  # el contenido de .env está en la capa para siempre
Código Seguro
# BIEN: usa Docker BuildKit secrets para valores en tiempo de build
# syntax=docker/dockerfile:1
FROM node:20-alpine
# Secrets en runtime se pasan como variables de entorno al iniciar el contenedor
# docker run -e DATABASE_URL=$DATABASE_URL myapp
# Para secrets en tiempo de build: usa el flag --secret con BuildKit
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci

Ejemplo Real

En 2021, investigadores escaneando imágenes públicas de Docker Hub encontraron miles de imágenes con credenciales AWS, contraseñas de base de datos y API keys hardcodeadas en capas de imagen — incluyendo de empresas Fortune 500.

Cómo Prevenirlo

  • Nunca uses ENV ni ARG para pasar secrets a imágenes Docker
  • Usa Docker BuildKit --secret mounts para secrets en tiempo de build (no aparecen en las capas)
  • Pasa secrets en runtime como variables de entorno al iniciar el contenedor, no los hornees en la imagen
  • Escanea las imágenes con Trivy o docker scout antes de pushear a cualquier registro

Tecnologías Afectadas

Docker

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas