
Exploit de PoC para CVE-2025-68999 - Injeção SQL de segunda ordem no Happy Addons for Elementor <= 3.20.4
| CVSS | 8.5 HIGH |
| Afetado | <= 3.20.4 |
| Corrigido | 3.20.6 |
| Função mín. | Contributor (edit_posts) |
| Vetor | Rede / Baixa complexidade / Baixos privilégios |
duplicate_meta_entries() em classes/clone-handler.php copia as linhas de metadados do post para um post clonado usando um INSERT em massa feito à mão. Ela busca as linhas com segurança usando $wpdb->prepare(), mas depois insere $entry->meta_key diretamente na string SQL sem escape:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
Como meta_key vem do banco de dados, o código o trata como confiável. Mas usuários com a função Contributor podem definir nomes de campos arbitrários pelo painel de Campos Personalizados — então eles controlam o que está nessa coluna.
O ataque tem duas etapas:
add_post_meta() lida com isso com segurança — o payload chega ao banco de dados sem executar nada.duplicate_meta_entries() lê a chave novamente e a concatena no INSERT bruto. O MySQL executa a subconsulta injetada.A análise estática não detecta isso porque a fonte dos dados perigosos é uma leitura do banco de dados ($wpdb->get_results()), que os mecanismos de taint marcam como saneada. A fronteira de armazenamento quebra a cadeia de taint.
Qualquer Contributor pode extrair:
wp_options (chaves de API, credenciais de pagamento)Mais de 400 mil instalações ativas foram afetadas no momento da divulgação.
pip install requests
python3 poc.py https://target.com contributor p4ss
O script autentica via HTTP, armazena o payload de injeção como um nome de campo personalizado, aciona a ação Happy Clone e lê o hash vazado dos campos de metadados do post clonado. A saída é salva em hash.txt.
hashcat -m 400 hash.txt rockyou.txt
| Data | Evento |
|---|---|
| Dezembro de 2025 | Descoberto via diff do SVN. PoC confirmado. |
| Dezembro de 2025 | Relatado à Patchstack Alliance com writeup completo e PoC. |
| Janeiro de 2026 | A weDevs lançou a correção na v3.20.6. |
| 23 de janeiro de 2026 | CVE-2025-68999 publicado. CVSS 8.5 HIGH atribuído. |
A weDevs substituiu todo o INSERT feito à mão por:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() internamente chama $wpdb->update() com prepared statements tanto para a chave quanto para o valor.