
Exploit PoC para CVE-2025-68999 - Inyección SQL de segundo orden en Happy Addons for Elementor <= 3.20.4
Happy Addons for Elementor <= 3.20.4 — Inyección SQL de segundo orden autenticada (Contributor+)
| CVSS | 8.5 ALTA |
| Afectado | <= 3.20.4 |
| Parcheado | 3.20.6 |
| Rol mínimo | Contributor (edit_posts) |
| Vector | Red / Complejidad baja / Privilegios bajos |
duplicate_meta_entries() en classes/clone-handler.php copia las filas de metadatos de la 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 Contributors pueden establecer nombres de campo arbitrarios mediante el panel de Custom Fields — 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() lee la clave y la concatena en el INSERT sin procesar. MySQL ejecuta la subconsulta inyectada.El análisis estático no detecta esto porque el origen de los datos peligrosos es una lectura de la base de datos ($wpdb->get_results()), que los motores de taint marcan como saneada. La frontera de almacenamiento rompe la cadena de taint.
Cualquier Contributor 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, dispara la acción Happy Clone y lee el hash filtrado desde los campos meta de la entrada clonada. La salida se guarda en hash.txt.
hashcat -m 400 hash.txt rockyou.txt
https://folks-iwd.github.io/writeups/cve-2025-68999.html
| Fecha | Evento |
|---|---|
| Diciembre de 2025 | Descubierto mediante diff de SVN. PoC confirmado. |
| Diciembre de 2025 | Reportado a Patchstack Alliance con informe completo y PoC. |
| Enero de 2026 | weDevs publicó el parche en la v3.20.6. |
| 23 de enero de 2026 | CVE-2025-68999 publicado. Se asignó CVSS 8.5 ALTA. |
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() internamente llama a $wpdb->update() con sentencias preparadas tanto para la clave como para el valor.