← Todas as verificações
SegurançaSeveridade típica: Médio

Scanner de exposição do WordPress

Deteta a versão do WordPress exposta, readme.html acessível e enumeração de utilizadores via wp-json.

O que verifica

Este scanner verifica se o teu WordPress deixa à vista o número da versão, se o ficheiro readme.html está acessível e se é possível enumerar utilizadores através da API wp-json. Deteta essas fugas de informação típicas de instalações de WordPress.

Porque importa

Conhecer a versão exata do WordPress permite a um atacante procurar vulnerabilidades conhecidas para essa versão concreta. A lista de nomes de utilizador, além disso, dá-lhe metade do trabalho para tentar adivinhar palavras-passe e entrar no teu painel.

Como se corrige

Mantém o WordPress e os seus plugins sempre atualizados, remove ou bloqueia o acesso ao readme.html e esconde a versão. Podes usar um plugin de segurança ou regras do servidor para desativar a enumeração de utilizadores via wp-json e limitar as tentativas de acesso.

Como funciona esta verificação

Esta verificação só atua se o teu site for WordPress, e deteta-o procurando wp-content ou wp-includes no HTML da página principal. Se não aparecerem, não faz nada. Se aparecerem, testa três fugas habituais. Primeira: a etiqueta <meta name="generator" content="WordPress 6.x"> no HTML, que revela a versão exata (severidade baixa). Segunda: o ficheiro /readme.html, que o WordPress inclui em cada instalação e que também diz a versão (baixa). Terceira: a rota /wp-json/wp/v2/users da REST API; se responder 200 com JSON que contenha os campos slug e name, está a entregar a lista de utilizadores com o seu nome de login (severidade média).

Porque importa

O WordPress move mais de 40 % da web, por isso é o alvo favorito dos ataques automatizados. Esses ataques funcionam em dois passos: identificar a versão e os plugins para escolher o exploit, e depois testar palavras-passe contra o login. A versão exposta resolve o primeiro passo. A lista de utilizadores resolve metade do segundo: com o slug de cada utilizador (que é o nome de login, não o nome visível), ao atacante só falta a palavra-passe, e a de admin, editor ou do nome do dono é testada aos milhares por minuto. Por isso a enumeração de utilizadores tem severidade média e as outras duas, baixa.

Como corrigir

Versão no meta generator

No functions.php do teu tema filho ou num plugin próprio:

remove_action('wp_head', 'wp_generator');

Tem em conta que a versão também se vê nos parâmetros ?ver=6.x dos CSS e JS do core. Escondê-la por completo exige um plugin de segurança; mas o que te protege mesmo é ter o WordPress atualizado, não esconder o número.

readme.html

Apaga-o depois de cada instalação e atualização (o WordPress volta a criá-lo), ou bloqueia-o no servidor. Em nginx: location = /readme.html { return 404; }. Em Apache, no .htaccess: <Files readme.html> Require all denied </Files>. Faz o mesmo com license.txt.

Enumeração de utilizadores

Restringe a rota de utilizadores da REST API a sessões autenticadas. Sem plugin, no functions.php:

add_filter('rest_endpoints', function ($endpoints) {
  if (!is_user_logged_in()) {
    unset($endpoints['/wp/v2/users']);
    unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
  }
  return $endpoints;
});

Os plugins de segurança habituais (Wordfence, Solid Security, All-In-One Security) têm uma opção equivalente. Fecha também a enumeração antiga por ?author=1, que redireciona para /author/nome/, e põe limite de tentativas e dois fatores no login: mesmo que o nome de utilizador fuja, a palavra-passe deixa de ser suficiente.

Confirma que está corrigido

curl -s https://teudominio.com | grep -io '<meta name="generator"[^>]*>'
curl -s -o /dev/null -w "%{http_code}\n" https://teudominio.com/readme.html
curl -s -o /dev/null -w "%{http_code}\n" https://teudominio.com/wp-json/wp/v2/users

Esperado: a primeira não devolve nada; a segunda, 404 ou 403; a terceira, 401 ou 403 (ou 404 se eliminaste a rota).

Perguntas frequentes

Não basta mudar o utilizador "admin" para outro nome?

Ajuda contra os ataques mais básicos, mas se a REST API lista os utilizadores, o nome novo descobre-se num pedido. Muda o nome e fecha a enumeração.

O meu tema ou um plugin usa a REST API de utilizadores no front.

É raro, mas acontece com alguns diretórios de autores. Nesse caso, em vez de tirar a rota, limita os campos que devolve (sem slug) ou restringe-a por capacidade do utilizador. Testa num ambiente de testes antes.

Esta verificação olha para plugins vulneráveis?

Não; olha para fugas da instalação base. Os plugins desatualizados são detetados em parte em bibliotecas desatualizadas. E se tens WP_DEBUG_LOG ativado, o ficheiro público que gera é coberto por logs expostos.

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

Verificações relacionadas