
PoC exploit per CVE-2025-68999 - Iniezione SQL di secondo ordine in Happy Addons for Elementor <= 3.20.4
| CVSS | 8.5 HIGH |
| 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 usando un INSERT bulk costruito a mano. 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 dei campi personalizzati — quindi controllano cosa finisce in quella colonna.
L'attacco avviene in 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 nell'INSERT grezzo. MySQL esegue la sottoquery 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 contrassegnano come sanificata. Il confine di storage interrompe la catena di taint.
Qualsiasi Contributor può estrarre:
wp_options (chiavi API, credenziali di pagamento)Oltre 400.000 installazioni attive risultavano interessate al momento della divulgazione.
pip install requests
python3 poc.py https://target.com contributor p4ss
Lo script si autentica via HTTP, memorizza il payload dell'iniezione come nome di un campo personalizzato, attiva l'azione Happy Clone e legge l'hash trapelato dai campi meta del post clonato. L'output viene salvato in hash.txt.
hashcat -m 400 hash.txt rockyou.txt
| Data | Evento |
|---|---|
| Dicembre 2025 | Scoperta tramite diff SVN. PoC confermato. |
| Dicembre 2025 | Segnalata a Patchstack Alliance con writeup completo e PoC. |
| Gennaio 2026 | weDevs ha rilasciato la correzione nella v3.20.6. |
| 23 gennaio 2026 | Pubblicata la CVE-2025-68999. Assegnato CVSS 8.5 HIGH. |
weDevs ha sostituito l'intero INSERT costruito a mano 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 statements sia per la chiave che per il valore.