
Exploit PoC per CVE-2025-68999 - SQL Injection di Secondo Ordine in Happy Addons for Elementor <= 3.20.4
Happy Addons for Elementor <= 3.20.4 — Iniezione SQL di secondo ordine autenticata (Contributor+)
| CVSS | 8.5 ALTA |
| Versioni interessate | <= 3.20.4 |
| Corretta in | 3.20.6 |
| Ruolo minimo | Contributor (edit_posts) |
| Vettore | Rete / Bassa complessità / Privilegi bassi |
duplicate_meta_entries() in classes/clone-handler.php copia le righe dei meta del post in un post clonato utilizzando una INSERT bulk artigianale. Recupera le righe in modo sicuro con $wpdb->prepare(), ma poi inserisce $entry->meta_key direttamente nella stringa SQL senza escape:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
Poiché meta_key proviene dal database, il codice lo considera attendibile. Ma i Contributor possono impostare nomi di campo arbitrari tramite il pannello Custom Fields — quindi controllano cosa c'è in quella colonna.
L'attacco si compone di due passaggi:
add_post_meta() gestisce questa operazione in modo sicuro — il payload finisce nel DB senza eseguire nulla.duplicate_meta_entries() rilegge la chiave e la concatena nella INSERT grezza. MySQL esegue la subquery iniettata.L'analisi statica non rileva il problema perché la fonte dei dati pericolosi è una lettura dal DB ($wpdb->get_results()), che i motori di taint analysis considerano sanitizzata. Il confine di archiviazione interrompe la catena di taint.
Qualsiasi Contributor può estrarre:
wp_options (chiavi API, credenziali di pagamento)400.000+ installazioni attive erano interessate al momento della divulgazione.
pip install requests
python3 poc.py https://target.com contributor p4ss
Lo script si autentica su HTTP, salva il payload di iniezione come nome di campo personalizzato, attiva l'azione Happy Clone e legge l'hash esfiltrato dai campi meta del post clonato. L'output viene salvato in hash.txt.
hashcat -m 400 hash.txt rockyou.txt
https://folks-iwd.github.io/writeups/cve-2025-68999.html
| Data | Evento |
|---|---|
| Dicembre 2025 | Scoperto tramite diff SVN. PoC confermato. |
| Dicembre 2025 | Segnalato alla Patchstack Alliance con writeup completo e PoC. |
| Gennaio 2026 | weDevs ha pubblicato la correzione nella v3.20.6. |
| 23 gennaio 2026 | Pubblicato CVE-2025-68999. Assegnato CVSS 8.5 ALTA. |
weDevs ha sostituito l'intera INSERT artigianale con:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() internamente chiama $wpdb->update() con prepared statement sia per la chiave che per il valore.