← Todas as verificações
SegurançaSeveridade típica: Alto

Scanner de painéis expostos

Procura painéis e endpoints de debug (Actuator, Telescope, Ignition, phpMyAdmin) acessíveis em produção.

O que verifica

Este scanner procura painéis e endpoints de depuração acessíveis em produção, como Actuator, Telescope, Ignition ou phpMyAdmin. Deteta quando essas ferramentas internas ficam alcançáveis a partir da internet.

Porque importa

Estes painéis costumam mostrar informação interna muito valiosa, como configuração, variáveis de ambiente ou acesso à base de dados, pensada só para desenvolvimento. Se ficam abertos em produção, dão a um atacante uma porta direta para os teus sistemas e dados.

Como se corrige

Desativa estas ferramentas de depuração em produção ou restringe o seu acesso apenas a redes internas ou endereços de confiança. Confirma que a tua configuração de deploy não deixa o modo debug ativado nem expõe estes painéis publicamente.

Como funciona esta verificação

O Scanaris pede uma lista de rotas que correspondem a painéis e ferramentas de depuração que nunca deviam responder em produção, e confirma que a resposta é a real dessa ferramenta e não a página genérica do teu site. As rotas e a sua severidade: /actuator/health do Spring Boot (alta), /actuator/env e /actuator/heapdump (críticas: variáveis de ambiente e um despejo de memória), /telescope/requests do Laravel Telescope (alta), /_ignition/health-check do Laravel Ignition em modo debug (crítica, porque versões vulneráveis permitiam executar código), /_profiler do Symfony (alta), /.vscode/sftp.json com credenciais de deploy (crítica), /server-status do Apache (média) e /phpmyadmin/ (alta).

Porque importa

Estas ferramentas existem para mostrar as entranhas da aplicação a quem a desenvolve: configuração, variáveis de ambiente com palavras-passe, consultas recentes com os seus parâmetros, rastos de erro completos, o conteúdo da memória do processo. Em desenvolvimento são valiosíssimas; em produção, abertas à internet, são uma porta com a chave na fechadura. Um /actuator/env acessível costuma incluir a string de ligação à base de dados. Um phpMyAdmin público é um ponto de entrada para testar palavras-passe contra a tua base de dados 24 horas por dia.

Porque acontece

Porque a mesma configuração serve para desenvolver e para produção. O modo debug do Laravel (APP_DEBUG=true), os endpoints do Actuator expostos por defeito em versões antigas do Spring, o profiler do Symfony com APP_ENV=dev, um phpMyAdmin instalado "para ver a base de dados um momento" e nunca retirado. As ferramentas de IA que geram o projeto raramente distinguem ambientes, e o deploy herda a configuração de desenvolvimento.

Como corrigir

  • Laravel: APP_DEBUG=false e APP_ENV=production no .env de produção. Telescope só em ambientes locais (TELESCOPE_ENABLED=false ou o gate de autorização). Atualiza o Ignition para uma versão sem a vulnerabilidade.
  • Spring Boot: management.endpoints.web.exposure.include=health no máximo, sem env nem heapdump, e com segurança à frente de /actuator. Melhor ainda, expor o actuator numa porta de gestão diferente que não saia para a internet.
  • Symfony: APP_ENV=prod e APP_DEBUG=0; o profiler só se regista em dev.
  • phpMyAdmin: desinstala-o do servidor público. Se precisas dele, acede por túnel SSH ou restringe-o por IP e com autenticação adicional.
  • Apache server-status: Require ip 127.0.0.1 na diretiva Location /server-status, ou desativa o módulo.
  • Ficheiros de editor como .vscode/sftp.json: nunca devem ser publicados. Acrescenta .vscode/ ao .gitignore e, se esteve publicado, muda a palavra-passe que contém.

Confirma que está corrigido

for p in actuator/health actuator/env telescope/requests _ignition/health-check _profiler .vscode/sftp.json server-status phpmyadmin/; do
  printf "%-26s " "$p"; curl -s -o /dev/null -w "%{http_code}\n" "https://oteudominio.com/$p"
done

O esperado é 404, 403 ou 401 em todos. Um 200 só é aceitável se o que devolve é a tua página genérica e não a ferramenta.

Perguntas frequentes

O meu painel pede palavra-passe. Continua a ser um achado?

O Scanaris verifica o conteúdo, por isso um painel protegido com autenticação que devolve 401 não é marcado. Ainda assim, um phpMyAdmin com login é um alvo de força bruta; melhor fora da internet.

E o /actuator/health? Só diz "UP".

Confirma que tecnologia usas e que versão do Spring, e costuma indicar que os outros endpoints também estão expostos. Se precisas de um health check público para o teu balanceador, cria uma rota própria mínima em vez de abrir o actuator.

Uso Next.js ou Nuxt. Isto aplica-se a mim?

Estas rotas concretas não, mas o princípio sim: as rotas de API de depuração ou de seed (/api/debug, /api/seed) que a IA cria para testar têm de desaparecer antes do deploy.

Verifica-o no teu site

Analisa o teu site grátis e vê se esta e outras 44 verificações passam, com um fix prompt por cada problema.

Analisar o meu site grátis

Do blog

Verificações relacionadas