Click2Shell: falha crítica no WordPress permite RCE com um único link

Notícia

Click2Shell: falha crítica no WordPress permite RCE com um único link

Rodrigo ColissiRodrigo Colissi
19 de setembro de 20269 min de leitura
Vulnerabilidades

Introdução

Pesquisadores da pwn.ai divulgaram no dia 18 de setembro a Click2Shell, uma cadeia de exploração que transforma um único link malicioso em execução remota de código (RCE) no WordPress (CMS que gerencia cerca de 43% dos sites da internet). A vulnerabilidade foi corrigida na versão 7.1.1, lançada em 17 de setembro de 2026 com 11 correções de segurança.

A Click2Shell combina duas falhas distintas: um selector injection no componente de preview de temas do WordPress Core — que força a instalação silenciosa de um tema oficial — e uma vulnerabilidade de AJAX handler sem nonce presente no tema Mobile Repair Zone 2.5.4 (e em dezenas de outros temas), que permite executar código PHP arbitrário antes mesmo da ativação do tema.

Nota de honestidade. A cadeia foi demonstrada em laboratório pelos pesquisadores. Não há evidências de exploração ativa em ambientes reais. O patch já está disponível.

O ataque não exige que o atacante tenha uma conta no WordPress alvo. Basta que um administrador logado clique no link malicioso — e o próprio JavaScript legítimo do WordPress executa as ações sensíveis em nome do atacante.

Contexto: por que isso importa

WordPress alimenta 43% da web — cerca de 500 milhões de sites. Uma vulnerabilidade que permite RCE com um clique de administrador coloca em risco uma fração significativa dessas instalações. No Brasil, onde o WordPress é a plataforma mais usada para sites institucionais, lojas WooCommerce e blogs, o impacto potencial atinge desde pequenos negócios até grandes portais de notícias.

A Click2Shell é particularmente perigosa porque o tema é instalado mas não ativado: o site continua exibindo o tema original normalmente, sem qualquer alteração visual. Um administrador pode simplesmente não perceber que algo aconteceu. O atacante pode, então, usar o RCE para extrair credenciais do banco de dados (wp-config.php), acessar dados do WooCommerce, criar usuários administradores ou comprometer todo o ambiente de hospedagem.

A cadeia também pode ser entregue via SEO poisoning, como vimos na campanha do falso download de GTA 6, onde páginas fraudulentas distribuíam malwares — o mesmo vetor de engenharia social poderia ser usado para entregar o link da Click2Shell a administradores descuidados.

O mecanismo do selector injection

A vulnerabilidade no WordPress Core reside na rota de instalação de temas:

/wp-admin/theme-install.php?theme=THEME_SLUG

Internamente, o arquivo wp-admin/js/theme.js envia o valor do parâmetro theme para a Themes API do WordPress.org e, quando a consulta retorna com sucesso, insere o mesmo valor (sem sanitização) em um seletor jQuery:

$( 'div[data-slug="' + slug + '"]' ).trigger( 'click' );

O problema está na inconsistência de interpretação entre dois consumidores do mesmo valor:

  • Themes API (servidor): canonicaliza o input para um slug válido. Se o input for twentytwenty"]>>>/, a API reduz ao slug real twentytwenty e retorna o tema legítimo do catálogo.
  • Navegador (cliente): preserva a pontuação original e monta o seletor div[data-slug="twentytwenty"]>>>/"]. As aspas injetadas fecham o seletor de atributo, os combinadores >>> caminham para dentro do card do tema e o comentário CSS /* neutraliza o fragmento que o WordPress adiciona em seguida.

O resultado é que o seletor não se limita ao card do tema — ele alcança o controle Install genuíno, e o trigger('click') do WordPress executa a instalação automaticamente. O administrador nunca precisou clicar em Install ou Activate.

Importante: essa falha sozinha não permite que o atacante instale um tema arbitrário. Ela força a instalação de um tema atual do catálogo oficial do WordPress.org. O salto para RCE depende do segundo estágio.

A cadeia até o RCE

O tema instalado permanece inativo — mas isso não significa que seu código PHP esteja dormente. O WordPress carrega o functions.php do tema inativo durante pré-visualizações no Customizer:

/wp-admin/admin-ajax.php?wp_customize=on&customize_theme=mobile-repair-zone

O tema Mobile Repair Zone 2.5.4 registrava este action AJAX (e dezenas de outros temas no catálogo faziam o mesmo):

add_action(
    'wp_ajax_mobile_repair_zone_install_and_activate_plugin',
    'mobile_repair_zone_install_and_activate_plugin'
);

O callback consumia parâmetros controlados pelo atacante sem qualquer verificação de nonce ou capability:

$post_plugin_details = $_POST['plugin_details'];
 
$plugin_text_domain = $post_plugin_details['plugin_text_domain'];
$plugin_main_file   = $post_plugin_details['plugin_main_file'];
$plugin_url         = $post_plugin_details['plugin_url'];

O handler baixava o ZIP da URL fornecida, descompactava em wp-content/plugins/ e carregava o entry point PHP indicado — RCE imediato como o usuário do servidor web.

A cadeia completa funciona assim:

  1. Administrador logado clica no link malicioso.
  2. O selector injection força a instalação do tema Mobile Repair Zone (ou outro vulnerável).
  3. O Customizer carrega o PHP do tema inativo, expondo o handler AJAX inseguro.
  4. O handler baixa e executa um plugin arbitrário controlado pelo atacante.
  5. RCE: o atacante obtém acesso ao servidor.

Como se proteger

A prioridade máxima é atualizar o WordPress para a versão 7.1.1, que contém o patch no changeset 63664. A correção aplica duas medidas:

  1. $.escapeSelector() no slug derivado da URL — caracteres como aspas, combinadores e comentários CSS passam a ser tratados como literais no slug, não como sintaxe de seletor executável.
  2. Restrição ao card correto — o seletor agora busca especificamente div.theme[data-slug="..."], impedindo que a injeção alcance outros elementos da página.

Passos práticos de verificação:

Atualizar o núcleo. Acesse o painel administrativo em Painel → Atualizações e instale o WordPress 7.1.1 imediatamente. Releases de segurança para branches anteriores (até a 4.7) também estão sendo preparados.

Revisar temas e plugins instalados recentemente. Verifique se há temas no diretório wp-content/themes/ que não foram ativados por você. Um tema inativo mas presente no disco é o principal indicador de que a Click2Shell pode ter sido usada.

Inspecionar logs de atividade. Revise requisições a theme-install.php e a admin-ajax.php com parâmetros wp_customize=on — especialmente endpoints que não deveriam estar sendo acessados. Para monitoramento contínuo, considere configurar o Wazuh (plataforma SIEM/XDR open source) com monitoramento de integridade de arquivos (FIM) nos diretórios wp-content/themes/ e wp-content/plugins/.

Verificar contas e arquivos suspeitos. Procure por usuários administrativos não reconhecidos, arquivos PHP inesperados em wp-content/uploads/ e alterações em wp-config.php.

Ativar atualizações automáticas. No arquivo wp-config.php, confirme que WP_AUTO_UPDATE_CORE está configurado como true para receber patches de segurança sem atraso.

Conclusão

A Click2Shell é um lembrete de que vulnerabilidades encadeadas — um selector injection aparentemente inofensivo + uma falha trivial de nonce em um tema de terceiros — podem produzir um impacto crítico. A correção no Core foi rápida e eficaz, mas o ecossistema de temas e plugins continua sendo o elo mais fraco da segurança do WordPress. A atualização para a versão 7.1.1 é obrigatória; a revisão de temas instalados — mesmo os inativos — é igualmente urgente.

Perguntas frequentes

A Click2Shell afeta todas as versões do WordPress?

Sim. O selector injection no Core está presente em todas as versões anteriores à 7.1.1. A cadeia completa, no entanto, depende da existência de um tema específico (como Mobile Repair Zone 2.5.4) que exponha um handler AJAX inseguro. Os pesquisadores identificaram mais de 40 temas no catálogo oficial com vulnerabilidades similares.

Preciso ter uma conta no WordPress para ser atacado?

Não. O atacante não precisa de nenhuma conta no WordPress alvo. Basta que um administrador logado clique no link. A sessão autenticada do administrador fornece os nonces e capacidades necessários — o navegador legítimo da vítima executa as ações.

O tema instalado fica visível no site?

Não. O tema é instalado, mas não ativado. O site continua exibindo o tema original normalmente. Não há qualquer alteração visual perceptível, o que torna a exploração particularmente difícil de detectar.

O patch 7.1.1 resolve completamente a Click2Shell?

O patch no Core (changeset 63664) corrige o selector injection que força a instalação automática do tema — a porta de entrada da cadeia. O segundo estágio (handler AJAX sem nonce no tema) é uma vulnerabilidade separada que cada desenvolvedor de tema precisa corrigir individualmente. Mas sem o primeiro estágio funcional, a cadeia como um todo está quebrada.

O que é jQuery selector injection?

É uma técnica onde o atacante insere caracteres especiais (aspas, colchetes, combinadores como >, comentários /*) em um valor que será usado como seletor CSS/jQuery. Se o valor não for sanitizado com escapeSelector(), esses caracteres "escapam" do seletor pretendido e passam a selecionar outros elementos da página — no caso da Click2Shell, o botão Install de um card de tema diferente.

Como saber se meu site já foi comprometido?

Verifique temas inativos em wp-content/themes/, plugins não reconhecidos em wp-content/plugins/, usuários administrativos suspeitos no banco de dados, arquivos PHP modificados ou inesperados, e entradas nos logs de acesso com padrões como customize_theme= ou theme-install.php?theme= contendo caracteres especiais (aspas, colchetes).

A Click2Shell tem um CVE atribuído?

O WordPress está trabalhando na atribuição de um CVE para o selector injection no Core. Até o momento da publicação, nenhum identificador final havia sido divulgado. A falha no tema Mobile Repair Zone 2.5.4 não possui CVE próprio.

O que acontece se o atacante conseguir RCE no meu WordPress?

Com execução remota de código, o atacante pode ler o wp-config.php (credenciais do banco de dados), acessar todos os dados do WordPress e WooCommerce, criar usuários administradores, alterar arquivos e conteúdo, roubar secrets disponíveis ao worker PHP e potencialmente comprometer todo o ambiente de hospedagem (migração lateral para outros sites no mesmo servidor).

Qual era o CVSS da vulnerabilidade?

A pwn.ai avaliou o estágio de instalação forçada isoladamente como High (CVSS 3.1 — 7.1). A cadeia completa demonstrada com RCE foi avaliada como Critical (CVSS 3.1 — 9.3) com vetor UI:R (interação do usuário necessária). O WordPress não publicou uma severidade final própria até o momento da divulgação.

Como o Wazuh ajuda na detecção?

Com o Wazuh configurado para monitoramento de integridade de arquivos (FIM), você pode detectar a criação não autorizada de diretórios em wp-content/themes/ e wp-content/plugins/, alterações em wp-config.php, e spikes de requisições a admin-ajax.php. A análise de logs centralizada do Wazuh também ajuda a correlacionar acessos suspeitos a theme-install.php.

Fontes e leituras adicionais

Gostou? Receba novos conteúdos por e-mail.

Entre na comunidade

Discussões técnicas e novidades em primeira mão.