Execução de Comandos via Pingback do WordPress e Brotli

Pesquisadores demonstraram como o recurso de pingback integrado do WordPress pode ser usado para alcançar uma vulnerabilidade CVE-2026-111497 no decodificador Brotli nativo. A falha não está no núcleo do WordPress, mas na biblioteca Google Brotli, que o libcurl usa para processar respostas HTTP comprimidas. Como resultado, uma única solicitação não autenticada para xmlrpc.php pode acionar uma vulnerabilidade no decodificador nativo, potencialmente travando o processo PHP ou, sob condições específicas, levando à execução de comandos.
Qual é o problema? Ao processar um pingback, o WordPress envia uma solicitação de saída para a URL especificada. Se o servidor remoto responder com o cabeçalho Content-Encoding: br, o libcurl invoca o decodificador Brotli nativo. Em versões vulneráveis da biblioteca (1.0.3–1.2.0), um fluxo comprimido especialmente criado aciona uma escrita fora dos limites (CWE-787).
Como o exploit funciona • Entrega. O atacante envia pingback.ping para xmlrpc.php, especificando uma URL apontando para seu próprio servidor. Nenhuma autenticação é necessária; o site só precisa ter pelo menos um post que aceite pingbacks. • Solicitação. O WordPress chama wp_safe_remote_get(), que usa libcurl para buscar a URL especificada. O servidor do atacante responde com um fluxo comprimido em Brotli especialmente criado. • Decodificação. O libcurl passa o fluxo para o decodificador Brotli nativo. A versão vulnerável grava além da memória alocada. • Impacto. Em geral, essa cadeia pode fazer o processo PHP travar, resultando em negação de serviço. Sob condições de laboratório, em uma compilação específica (WordPress 7.1.3, Debian 13.7, PHP 8.3.36), os pesquisadores alcançaram execução de comandos. No entanto, essa capacidade depende fortemente do layout de memória e das versões de todos os componentes envolvidos, portanto não é universal.
Também vale notar que o payload não é enviado na solicitação ao WordPress. Ele é entregue na resposta HTTP do servidor do atacante, então ferramentas que inspecionam solicitações recebidas não veem o payload real do exploit. Na cadeia de exploit demonstrada, o WordPress faz duas solicitações GET de saída para a URL controlada pelo atacante dentro de uma única solicitação PHP. A segunda solicitação é uma nova tentativa acionada pelo erro de decodificação de conteúdo, com a decodificação Brotli desativada. Sua resposta contém um nome de cabeçalho controlado pelo atacante que o WordPress processa usando a função strtolower() do PHP. Devido à corrupção de memória causada pela primeira resposta, essa chamada pode ser redirecionada para a função system() do PHP, resultando em execução de comandos.
Vulnerabilidades
Pesquisadores
Fornecedor
Produto
Mais