
Prova de conceito e análise técnica para CVE-2026-12227, uma LFI/RCE não autenticada no plugin Visual Composer do WordPress através do parâmetro vcv-template.
CVE-2026-12227 é uma vulnerabilidade crítica (CVSS 9.8) de Inclusão Local de Arquivo (LFI) não autenticada no plugin Visual Composer Website Builder para WordPress, afetando todas as versões até e incluindo a 45.16.0. A falha está no parâmetro vcv-template, que permite a um atacante incluir e executar arquivos arbitrários no servidor. Isso pode levar à exposição de dados sensíveis, contorno de controle de acesso ou até mesmo Execução Remota de Código (RCE) completa se o ambiente do servidor estiver mal configurado.
CVE-2026-12227
9.8/10
Plugin Visual Composer Website Builder (até a versão 45.16.0)
Causa raiz: A vulnerabilidade é classificada como CWE-98: Controle Impróprio de Nome de Arquivo para Instrução Include/Require em Programa PHP (frequentemente referida como Inclusão Remota de Arquivo PHP). Ela decorre de uma falha de lógica no arquivo PageTemplatesController.php, especificamente dentro da função viewPageTemplate(), que se conecta ao filtro template_include do WordPress na prioridade 11 sem qualquer verificação de autenticação.
O problema central é uma falha de "validar-depois-mutar":
Validação (na entrada bruta): O código primeiro chama a função validate_file() do WordPress no valor bruto, fornecido pelo usuário, do parâmetro vcv-template. Esta função é projetada para rejeitar caminhos contendo sequências literais de travessia de diretório como ... Nesta fase, a entrada maliciosa theme:.theme:./.theme:./.theme:./wp-links-opml.php não contém .. literal, então passa na validação.
Mutação (após a validação): Imediatamente após a validação, o código verifica se o tipo de template é vc-custom-layout e se o valor contém a string theme:. Se sim, ele executa str_replace('theme:', '', $current['value']), que remove todas as ocorrências de theme: do valor.
Sink: O valor mutado é então passado para locate_template(), que resolve o caminho e inclui o arquivo. Como as strings theme: foram removidas, as sequências de travessia fragmentadas são fundidas, criando um caminho válido como ../../../../wp-links-opml.php que nunca foi validado em sua forma final.
Superfície de Ataque: Vetor de Ataque: Rede (AV:N) — a vulnerabilidade é alcançável diretamente via HTTP/HTTPS.
Autenticação: Nenhuma necessária (PR:N) — é uma vulnerabilidade não autenticada. Qualquer atacante remoto pode acioná-la sem uma conta válida.
Interação do Usuário: Nenhuma necessária (UI:N).
Componente Afetado: O plugin Visual Composer Website Builder para WordPress.
Parâmetro Vulnerável: O parâmetro vcv-template, usado em conjunto com o parâmetro vcv-template-type.
Condição de Acionamento: O plugin deve estar instalado e ativo em um site WordPress, e uma página de front-end deve ser construída com o Visual Composer (ou seja, um permalink normal deve existir).
Notas de Exploração: Impacto: A falha permite a um atacante não autenticado incluir e executar arquivos locais arbitrários no servidor. Como arquivos PHP incluídos são executados, isso pode levar à Execução Remota de Código (RCE), permitindo o comprometimento total da confidencialidade, integridade e disponibilidade do servidor.
Técnica de Exploração: Atacantes podem explorar isso criando um valor vcv-template malicioso que usa o prefixo theme: para contornar a validação, conforme descrito na causa raiz. Por exemplo, uma requisição pode parecer com: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
Escalonamento para RCE: Embora a LFI em si seja crítica, alcançar RCE frequentemente depende do ambiente do servidor. Um método comum é incluir um arquivo que já foi enviado ao servidor (por exemplo, um arquivo de imagem aparentemente inofensivo contendo código PHP embutido) ou aproveitar outras configurações incorretas do servidor.
Disponibilidade de PoC: Múltiplos exploits de prova de conceito estão publicamente disponíveis, incluindo um script Python e um template Nuclei, que podem ser usados para validação em ambiente de laboratório autorizado
[*] Código Python Fornecido Acima
Versão do patch: 45.16.1