O WordPress exibe seu número de versão em vários lugares por padrão. Por si só, isso não é uma vulnerabilidade crítica. Mas dá aos atacantes uma vantagem inicial. Se alguém sabe que você está rodando WordPress 6.2.1, pode pesquisar todas as explorações conhecidas para essa versão exata e tentá-las contra seu site. Remover informações de versão é um primeiro passo simples que torna ferramentas automatizadas de varredura menos eficazes.
Onde o WordPress expõe o número de versão
O WordPress é surpreendentemente generoso ao revelar qual versão executa. Aqui estão os lugares mais comuns onde atacantes (e qualquer pessoa visualizando seu código-fonte) podem encontrá-la:
- Tag meta generator: O WordPress adiciona uma tag
<meta name="generator" content="WordPress 6.x.x">à seção<head>de cada página. Esse é o lugar mais óbvio, e aparece em cada carregamento de página. - Feeds RSS e Atom: O feed RSS do seu site (tipicamente em
/feed/) inclui um elemento<generator>com a string completa da versão do WordPress. Muitos donos de site se esquecem dos feeds completamente, deixando esse vetor aberto. - Query strings de scripts e folhas de estilo: O WordPress acrescenta
?ver=6.x.xàs URLs de arquivos CSS e JavaScript quando os enfileira. Mesmo que você remova a tag meta, esse parâmetro ainda divulga sua versão em cada requisição de asset. - O arquivo readme.html: O WordPress vem com um arquivo
readme.htmlno diretório raiz. Esse arquivo contém o número da versão em texto simples e é acessível a qualquer pessoa que conheça a URL. - O arquivo license.txt: Similar ao
readme.html, o arquivolicense.txtestá na raiz do WordPress e pode confirmar que o site executa WordPress. - Código-fonte da página de login: A página de login do WordPress em
/wp-login.phpcarrega folhas de estilo e scripts com query strings de versão, tornando-a outra fonte de informação de versão. - Respostas da REST API: A raiz da REST API do WordPress em
/wp-json/também pode revelar detalhes de versão em seus cabeçalhos de resposta ou corpo.
Por que esconder a versão importa
Cada versão principal do WordPress tem um changelog público. Quando uma correção de segurança chega, a vulnerabilidade que ela corrige se torna conhecimento público. Bots automatizados constantemente varrem a web procurando por sites que ainda executam a versão antiga e vulnerável. Se seu site anuncia "WordPress 6.2.1" e uma injeção SQL crítica foi corrigida na 6.2.2, seu site se torna um alvo dentro de horas após o lançamento da correção.
Esconder o número da versão não corrige a vulnerabilidade em si. Apenas remove um dado que atacantes usam para priorizar alvos. Pense nisso como remover o número da sua casa de uma lista de casas com portas destrancadas. A porta ainda pode estar destrancada, mas pelo menos você não está na lista curta.
Remover a versão do HTML e dos feeds
Adicione o seguinte código ao functions.php do seu tema ou, melhor ainda, a um plugin específico do site para que sobreviva a mudanças de tema:
// Remove the generator meta tag from HTML head
remove_action('wp_head', 'wp_generator');
// Remove version from RSS feeds
add_filter('the_generator', '__return_empty_string');
// Remove version query string from scripts and styles
function remove_wp_version_from_assets($src) {
if (strpos($src, 'ver=' . get_bloginfo('version'))) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'remove_wp_version_from_assets', 9999);
add_filter('script_loader_src', 'remove_wp_version_from_assets', 9999);A chamada remove_action remove a tag meta. O filtro the_generator lida com feeds RSS e Atom. Os dois filtros loader removem o parâmetro ?ver= de todos os assets enfileirados. Usar prioridade 9999 garante que isso execute depois que plugins e temas adicionaram seus próprios scripts.
Excluir readme.html e license.txt
Esses arquivos estáticos ficam no diretório raiz do seu WordPress e contêm informações de versão. Exclua-os:
rm /caminho/para/wordpress/readme.html
rm /caminho/para/wordpress/license.txtHá um detalhe: o WordPress recria esses arquivos durante atualizações do core. Você tem duas opções para lidar com isso. Você pode excluí-los manualmente após cada atualização. Ou pode adicionar um pequeno script ao seu processo de deploy que os remove automaticamente. Se você usa o WP-CLI, um hook pós-atualização funciona bem para isso.
Abordagens baseadas em plugin
Se você prefere não editar arquivos de código, vários plugins cuidam da remoção de versão para você. Plugins de segurança como Wordfence, iThemes Security e All In One WP Security incluem opções para esconder a versão do WordPress. Opções leves como Meta Generator and Version Info Remover focam especificamente nessa tarefa sem adicionar sobrecarga extra.
Ao escolher um plugin, certifique-se de que ele cobre todos os locais listados acima, não apenas a tag meta. Alguns plugins removem apenas a tag generator e deixam intactas as query strings de script.
Segurança por obscuridade não é suficiente
Esconder sua versão do WordPress é uma boa prática, mas não é uma estratégia de segurança por si só. Um atacante determinado ainda pode identificar a versão do seu WordPress por outros métodos, como comparar o conteúdo de arquivos JavaScript do core ou verificar a presença de recursos específicos introduzidos em determinadas versões.
Para segurança real, você precisa combinar a ocultação de versão com os fundamentos:
- Mantenha o WordPress, temas e plugins atualizados: Essa é a coisa mais importante que você pode fazer. A maioria dos hacks de WordPress explora vulnerabilidades conhecidas em software desatualizado.
- Use senhas fortes e autenticação de dois fatores: Ataques de força bruta contra
wp-login.phppermanecem como um dos vetores de ataque mais comuns. - Instale um web application firewall (WAF): Serviços como Cloudflare, Sucuri, ou um WAF baseado em plugin podem bloquear requisições maliciosas antes que cheguem ao WordPress.
- Limite tentativas de login: Plugins como Limit Login Attempts Reloaded impedem que atacantes executem ataques automatizados de adivinhação de senha.
- Desative o XML-RPC se você não precisa dele: O XML-RPC é outro vetor de ataque comum para força bruta e amplificação de DDoS.
Verifique as alterações com o InspectWP
Após implementar essas alterações, execute uma nova varredura do InspectWP em seu site. Verifique a seção WordPress do relatório. O número da versão não deve mais aparecer no código-fonte HTML, e a tag meta generator deve ter sumido. Se o InspectWP ainda detectar uma versão, verifique novamente se o trecho de código está carregado corretamente e se os plugins de cache não estão servindo uma versão desatualizada das suas páginas.