Backups de base de datos expuestos: qué pasa cuando /backup.sql es accesible
Los backups de base de datos (archivos .sql, volcados comprimidos, archivos zip de la base de datos) a veces se crean directamente en un directorio accesible desde la web y se quedan ahí. Una sola petición exitosa a /backup.sql o /dump.sql entrega a un atacante cada fila de cada tabla sin tocar la lógica de tu aplicación.
Qué es
Los scripts de backup, los paneles de control del hosting y las herramientas de exportación manual suelen escribir volcados con nombres predecibles: backup.sql, dump.sql, database.sql, db.sql.gz, backup.zip. Cuando acaban dentro de la raíz web y el servidor no los bloquea explícitamente, se convierten en archivos descargables corrientes. Los atacantes ejecutan escaneos automatizados que solicitan decenas de estos nombres comunes en cada host que pueden alcanzar.
AppSafe comprueba las rutas más comunes (/backup.sql, /dump.sql, /database.sql, /db.sql.gz y otras) y marca cualquiera que devuelva una respuesta 200 con contenido que parezca un volcado SQL o un archivo comprimido. La comprobación detecta tanto SQL en texto plano como formatos comprimidos.
Por qué importa
Un volcado SQL contiene cada fila de cada tabla en el momento en que se generó: cuentas de usuario, hashes de contraseñas, direcciones de email, datos personales, tokens de sesión, historial de pagos y estado interno de la aplicación. Descargarlo es una sola petición HTTP que no deja rastro en los logs de tu aplicación: el servidor web lo sirve como cualquier archivo estático.
A diferencia de una API key filtrada, una base de datos filtrada no se puede rotar. Una vez que alguien tiene una copia de tu tabla de usuarios, la brecha es permanente para esos usuarios. Según lo que contenga el volcado, podrías estar obligado a notificar la brecha según el RGPD, la CCPA o la HIPAA, además del coste operativo de avisar a cada usuario afectado.
Cómo solucionarlo
La solución correcta es escribir los backups en un directorio que el servidor web no pueda alcanzar (una ruta como /var/backups/ o un bucket de almacenamiento de objetos con ACL privadas, no un subdirectorio de /var/www/). Revisa los cron jobs o scripts de backup y actualiza la ruta de destino.
Como defensa en profundidad, deniega a nivel de servidor las peticiones de archivos SQL y extensiones de archivo comprimido comunes, independientemente de dónde se guarden los archivos.
location ~* \.(sql|sql\.gz|bak|dump|tar|tar\.gz|tar\.bz2|zip)$ {
deny all;
return 404;
}Si encuentras un archivo expuesto, elimínalo de inmediato. Después investiga cómo llegó ahí: corrige el script o proceso que lo colocó para que no vuelva a aparecer en la siguiente ejecución programada.
Después de limpiar, confirma que las rutas comunes están bloqueadas.
for path in /backup.sql /dump.sql /database.sql /db.sql.gz; do
code=$(curl -so /dev/null -w "%{http_code}" "https://yourdomain.com$path")
echo "$path → $code"
done
# Every line must print 404Preguntas frecuentes
¿Cómo sabría un atacante que debe probar /backup.sql en mi sitio?
No te atacan a ti específicamente. Los escáneres automatizados solicitan continuamente decenas de nombres de backup comunes en millones de hosts. Un archivo que existe devuelve 200 y se descarga antes de que sepas que tienes que buscarlo.
El archivo solo estuvo ahí una hora. ¿Ya está hecho el daño?
Posiblemente. Los escaneos automatizados funcionan las 24 horas y los archivos a menudo se encuentran minutos después de aparecer. Si tienes logs de acceso, comprueba si se solicitó la ruta; si fue así, trátalo como una brecha confirmada.
¿Puedo proteger el archivo con contraseña en lugar de moverlo?
La autenticación básica sobre un único archivo es frágil y fácil de configurar mal. Lo correcto es quitar el archivo de cualquier ubicación accesible desde la web. Los backups deben estar en un lugar que el servidor HTTP no pueda alcanzar.
¿Tu app está afectada?
AppSafe verifica este y docenas de problemas más en un solo escaneo gratis.
Escanear mi app gratisGuías relacionadas
Índices de directorio abiertos: cuando tu servidor de archivos lo lista todo
Un servidor de archivos que lista su contenido regala a los atacantes un inventario.
Archivos .env expuestos: cómo los atacantes encuentran tus secretos
Un solo .env accesible puede entregar todo tu stack.
Row Level Security (RLS) en Supabase: protege tus tablas
Tu anon key es pública. RLS es lo único que la separa de tus datos.
Directorio .git expuesto: la fuga de código fuente a la vista de todos
Un /.git accesible entrega todo tu código y el historial de commits.