
Exploit PoC para CVE-2025-68999 - Inyección SQL de Segundo Orden en Happy Addons para Elementor <= 3.20.4
| CVSS | 8.5 HIGH |
| Afectado | <= 3.20.4 |
| Corregido | 3.20.6 |
| Rol mínimo | Colaborador (edit_posts) |
| Vector | Red / Complejidad baja / Privilegios bajos |
duplicate_meta_entries() en classes/clone-handler.php copia filas de metadatos de entrada a una entrada clonada mediante un INSERT masivo hecho a mano. Obtiene las filas de forma segura con $wpdb->prepare(), pero luego inserta $entry->meta_key directamente en la cadena SQL sin escaparla:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
Dado que meta_key proviene de la base de datos, el código lo trata como confiable. Pero los Colaboradores pueden establecer nombres de campo arbitrarios mediante el panel de Campos Personalizados — por lo que controlan lo que hay en esa columna.
El ataque consta de dos pasos:
add_post_meta() maneja esto de forma segura — la carga útil llega a la base de datos sin ejecutar nada.duplicate_meta_entries() vuelve a leer la clave y la concatena en el INSERT en bruto. MySQL ejecuta la subconsulta inyectada.El análisis estático no detecta esto porque la fuente de datos peligrosos es una lectura de la base de datos ($wpdb->get_results()), que los motores de taint marcan como sanitizada. La frontera de almacenamiento rompe la cadena de taint.
Cualquier Colaborador puede extraer:
wp_options (claves de API, credenciales de pago)Más de 400K instalaciones activas estaban afectadas en el momento de la divulgación.
pip install requests
python3 poc.py https://target.com contributor p4ss
El script se autentica por HTTP, almacena la carga útil de inyección como nombre de campo personalizado, activa la acción Happy Clone y lee el hash filtrado de los campos meta de la entrada clonada. La salida se guarda en hash.txt.
hashcat -m 400 hash.txt rockyou.txt
| Fecha | Evento |
|---|---|
| Diciembre de 2025 | Detectado mediante diff de SVN. PoC confirmado. |
| Diciembre de 2025 | Reportado a Patchstack Alliance con informe completo y PoC. |
| Enero de 2026 | weDevs lanzó la corrección en v3.20.6. |
| 23 de enero de 2026 | CVE-2025-68999 publicado. Se asignó CVSS 8.5 HIGH. |
weDevs reemplazó todo el INSERT hecho a mano por:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() llama internamente a $wpdb->update() con declaraciones preparadas tanto para la clave como para el valor.