Archivo .env expuesto — respuesta al incidente en 30 minutos | Scanthra

Scanthra · 6 min de lectura · Actualizado Mayo de 2026

Mayo de 2026
TL;DR: Si https://tusitio.com/.env devuelve tus claves de API, contraseña de base de datos y credenciales SMTP, trátalo como un ataque activo aunque nadie las haya usado todavía. Rota todo, audita el uso y luego bloquea la ruta. Planifica 30 minutos de trabajo concentrado y unos días de seguimiento.

Por qué un .env expuesto es grave

Un archivo .env suele contener:

Escáneres de Internet como Shodan, BinaryEdge y decenas de botnets de recolección de credenciales buscan continuamente /.env en millones de hosts. Si el tuyo es público, asume que alguien ya lo ha leído. El coste de rotar es mucho menor que el coste de una filtración de datos.

Paso 1 — Rota cada secreto del archivo

Abre el archivo (o tu copia de seguridad) y para cada entrada:

Usa un gestor de contraseñas o tu gestor de secretos (AWS Secrets Manager, Doppler, 1Password, Bitwarden) para generar los nuevos valores. No reutilices ninguno de los secretos anteriores.

Paso 2 — Audita el uso de las claves filtradas

Antes de olvidar las claves antiguas, comprueba si alguien las usó mientras estuvieron expuestas:

Si encuentras algo sospechoso: es un incidente confirmado — escálalo, regístralo, sigue tu plan de respuesta a incidentes y notifica a los clientes si hay datos personales implicados. Las entidades bajo NIS2 (directiva UE de ciberseguridad) deben presentar una alerta temprana en un plazo de 24 horas.

Paso 3 — Bloquea la ruta definitivamente

El archivo filtrado probablemente estaba en la raíz de tu aplicación porque el directorio raíz del framework era un nivel demasiado alto. Dos capas de defensa son mejores que una:

Mueve el archivo fuera del directorio raíz web:

mkdir /etc/myapp
mv /var/www/myapp/.env /etc/myapp/.env
chmod 600 /etc/myapp/.env
chown www-data:www-data /etc/myapp/.env

Actualiza tu aplicación para leer desde la nueva ruta.

Y bloquea los archivos de puntos en el servidor web:

# nginx
location ~ /\.(?!well-known) { deny all; return 404; }
# Apache
<FilesMatch "^\.">
  Require all denied
</FilesMatch>

Paso 4 — Asegúrate de que no vuelva a ocurrir

¿Qué pasa con el historial de Git?

Si .env se confirmó alguna vez en un repositorio público — aunque fuera brevemente, aunque fuera hace años — asume que los secretos están filtrados. La búsqueda de GitHub y miles de scrapers de datos de entrenamiento ya lo tienen. git filter-repo reescribe el historial, pero aun así necesitas rotar los valores, porque existen copias fuera de tu control.

La lección aburrida

El .env expuesto es uno de los problemas detectados más comunes por Scanthra en proyectos PHP, Laravel, Django, Rails y Node. La causa raíz es casi siempre «seguí un tutorial que ponía .env en la raíz del proyecto y olvidé que el servidor web sirve archivos estáticos desde allí.» Mover el archivo un directorio hacia arriba — y añadir la regla de bloqueo de dotfiles — cierra por completo esa clase de vulnerabilidad.

Cómo lo detecta Scanthra

Nuestro módulo Archivos Ocultos comprueba una lista blanca de rutas que incluye .env, .env.local, .env.production, .git/config, /backup.sql, /dump.sql, /wp-config.php.bak y más. Lo complementamos con comprobaciones de magic-bytes (ZIP, gzip, cabeceras SQLite) para distinguir una copia de seguridad real de una página 404 que devuelve 200 por error.

¿Quieres saber si tu sitio tiene este problema?

Scanthra hace una revisión pasiva y amigable, y te envía por correo electrónico un informe de seguridad en PDF fácil de entender.

Analiza tu sitio gratis