Todos os guias
Severidade CríticaErros de configuração

Backups de banco de dados expostos: o que acontece quando /backup.sql está acessível

Backups de banco de dados — arquivos .sql, dumps compactados, arquivos zip do banco — às vezes são criados diretamente num diretório acessível pela web e esquecidos lá. Uma única requisição bem-sucedida a /backup.sql ou /dump.sql entrega a um atacante todas as linhas de todas as tabelas sem tocar na lógica da sua aplicação.

O que é

Scripts de backup, painéis de controle de hospedagem e ferramentas de exportação manual costumam gravar dumps com nomes previsíveis: backup.sql, dump.sql, database.sql, db.sql.gz, backup.zip. Quando eles caem dentro da raiz web e o servidor não os bloqueia explicitamente, viram arquivos comuns para download. Atacantes rodam varreduras automatizadas que requisitam dezenas desses nomes comuns em todo host que conseguem alcançar.

O AppSafe verifica os caminhos mais comuns — /backup.sql, /dump.sql, /database.sql, /db.sql.gz e outros — e sinaliza qualquer um que retorne uma resposta 200 com conteúdo que pareça um dump SQL ou um arquivo compactado. A verificação detecta tanto SQL em texto puro quanto formatos compactados.

Por que importa

Um dump SQL contém todas as linhas de todas as tabelas no momento em que foi gerado: contas de usuário, hashes de senha, endereços de e-mail, dados pessoais, tokens de sessão, histórico de pagamentos e estado interno da aplicação. Baixar um dump é uma única requisição HTTP que não deixa rastro nos logs da sua aplicação — o servidor web o serve como qualquer arquivo estático.

Ao contrário de uma API key vazada, não dá para rotacionar um banco de dados vazado. Depois que alguém tem uma cópia da sua tabela de usuários, o vazamento é permanente para esses usuários. Dependendo do que o dump contém, você pode ser obrigado a notificar o incidente pela LGPD, GDPR, CCPA ou HIPAA, além do custo operacional de avisar cada usuário afetado.

Como corrigir

Mova os backups para fora da raiz web

A correção certa é gravar os backups num diretório que o servidor web não alcance — um caminho como /var/backups/ ou um bucket de object storage com ACLs privadas, não um subdiretório de /var/www/. Revise cron jobs ou scripts de backup e atualize o caminho de destino.

Bloqueie extensões comuns de backup no nginx

Como defesa em profundidade, negue no nível do servidor requisições de arquivos SQL e de extensões comuns de arquivos compactados, independentemente de onde os arquivos estejam armazenados.

location ~* \.(sql|sql\.gz|bak|dump|tar|tar\.gz|tar\.bz2|zip)$ {
  deny all;
  return 404;
}
Apague os dumps que já estão na raiz web

Se encontrar um arquivo exposto, apague-o imediatamente. Depois investigue como ele foi parar lá — corrija o script ou processo que o colocou ali, para que ele não reapareça na próxima execução agendada.

Confirme que os caminhos retornam 404

Depois da limpeza, confirme que os caminhos comuns estão bloqueados.

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 404

FAQ

Como um atacante saberia que deve tentar /backup.sql no meu site?

Ninguém está mirando você especificamente. Scanners automatizados requisitam continuamente dezenas de nomes de backup comuns em milhões de hosts. Um arquivo que existe retorna 200 e é baixado antes que você saiba que precisava procurar.

O arquivo ficou lá só por uma hora. O estrago já está feito?

Possivelmente. Varreduras automatizadas rodam 24 horas por dia e arquivos costumam ser encontrados minutos depois de aparecerem. Se você tem logs de acesso, verifique se o caminho foi requisitado — se foi, trate como um vazamento confirmado.

Posso só proteger o arquivo com senha em vez de movê-lo?

Autenticação básica num único arquivo é frágil e fácil de configurar errado. O certo é remover o arquivo de qualquer local acessível pela web. Backups devem ficar num lugar que o servidor HTTP não consiga alcançar.

Seu app está afetado?

O AppSafe verifica isso e dezenas de outros problemas em um único escaneamento grátis.

Escanear meu app grátis