Depois de minha primeira verificação de diretórios .git expostos, fiz outra verificação de arquivos .env expostos. Durante essa verificação, encontrei mais de 200 arquivos .env expostos. Além de definições de configuração inofensivas, encontrei 135 usuários e senhas de banco de dados, 48 contas de usuário de e-mail com senhas, 11 credenciais ativas para provedores de pagamento (como Stripe ou Paypal), 98 tokens secretos para diferentes APIs e 128 segredos de aplicativos (segredos para gerar sessão com segurança ids, tokens CSRF e tokens JWT) e algumas credenciais de administrador codificadas.
TLDR : cuidado com erros no processo de implantação. Nunca exponha seu arquivo .env oculto ao público.
Eu sou SDCat, um desenvolvedor de software com uma mente curiosa que adora olhar em todos os lugares sob o capô. Depois de procurar diretórios .git expostos, decidi me aprofundar nessa toca de coelho. E decidi que vou verificar se há arquivos .env expostos.
Neste post eu descrevo o que é um arquivo .env, como escaneei os domínios e algumas estatísticas sobre o que foi encontrado nesses arquivos. A análise desses dados às vezes revelou muitas credenciais para diferentes serviços e contas.
Todo software requer alguma configuração e possui várias configurações. No caso de software de usuário, como um cliente de e-mail, essas configurações, como endereço de e-mail, nome de usuário e senha, são solicitadas ao usuário na primeira vez que o software é iniciado. Para software executado em um servidor e geralmente instalado automaticamente, a interação do usuário não é possível. Para alguns frameworks de software, essas configurações podem ser especificadas por meio de variáveis de ambiente e configuradas em um arquivo com o nome .env. Os arquivos .env são arquivos ocultos, portanto, você não os vê por padrão.
Exemplo de um arquivo .env:
ENV= "PRODUCTION"
LOG_LEVEL= "INFO"
SMTP_HOST= "email.example.com"
SMTP_PORT= 25
SMTP_USER= "[email protected]"
SMTP_PASS= "SuperSecurePassword2022"
SMTP_TLS= 1
SMTP_CONNECTION_TIMEOUT_SECONDS= 2
DB_HOST= "dbserver.example.com"
DB_DATABASE_NAME= "important_database"
DB_USER= "my-app-db-user"
DB_PASSWORD= "2022SuperVerySecurePassword"
PAYMENT_GATEWAY= "payment.example.com"
PAYMENT_SECRET= "super-secure-payment-api-secret"
Observação: recomendamos senhas mais seguras do que as mencionadas nos exemplos acima.
Como quase todos os aplicativos da Web acessam um banco de dados ou usam algumas APIs para se comunicar, essas credenciais devem ser passadas para o aplicativo. Se isso for feito usando o arquivo .env, as credenciais estarão em texto simples nesse arquivo. Quando o servidor da Web está configurado incorretamente e esse arquivo .env é entregue pelo servidor da Web, qualquer pessoa pode consultar esses dados. Para fazer isso, pode-se visitar apenas uma URL com um navegador, como: https://example.com/.env.
O aspecto perigoso é que as senhas e os segredos estão em formato não criptografado no arquivo .env.
Escolhi um país que permite transferência de zona DNS para obter todos os domínios deste país. Levará algum tempo para baixar o arquivo de zona completo. Com um script python simples, extraí os registros NS e desses registros os nomes de domínio.
Com outro script python, leio os domínios e envio uma solicitação para http://<domain>/.env . Também verifiquei http://www.<domínio>/.env, https://<domínio>/.env e https://www.<domínio>/.env.
É importante ignorar a verificação do certificado SSL. Fiquei sabendo que muitos arquivos foram encontrados em https mas com certificado inválido. Ao ignorar os certificados SSL inválidos, esses diretórios podem ser acessados de qualquer maneira.
Examinei 2,6 milhões de domínios e descobri:
Estes são os resultados apenas dos domínios principais. Imagine o que aconteceria se escaneássemos todos os subdomínios. Não tenho dúvidas de que você encontrará muito mais por lá.
Você pode verificar seus domínios e subdomínios com um modelo de núcleo ou pode usar um serviço como scan.nan.io para verificar seus domínios e subdomínios automaticamente em busca de arquivos confidenciais expostos.
Conclusão : Verifique seu servidor e implantação para não expor o arquivo .env oculto.
Publicado também aqui .