
PoC-Exploit für CVE-2025-68999 - Second-Order SQL Injection in Happy Addons for Elementor <= 3.20.4
Happy Addons for Elementor <= 3.20.4 — Authentifizierte (Contributor+) Second-Order SQL-Injection
| CVSS | 8.5 HIGH |
| Betroffen | <= 3.20.4 |
| Gefixt | 3.20.6 |
| Min. Rolle | Contributor (edit_posts) |
| Vector | Netzwerk / Niedrige Komplexität / Niedrige Berechtigungen |
duplicate_meta_entries() in classes/clone-handler.php kopiert Post-Meta-Zeilen in einen geklonten Post mittels einer selbstgebauten Bulk-INSERT. Es ruft die Zeilen sicher mit $wpdb->prepare() ab, aber setzt dann $entry->meta_key direkt in den SQL-String ein, ohne zu escapen:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
Weil meta_key aus der Datenbank kommt, behandelt der Code es als vertrauenswürdig. Aber Beitragende (Contributors) können beliebige Feldnamen über das Custom-Fields-Panel setzen – also kontrollieren sie, was in dieser Spalte steht.
Der Angriff besteht aus zwei Schritten:
add_post_meta() behandelt dies sicher – die Nutzlast landet in der DB, ohne etwas auszuführen.duplicate_meta_entries() liest den Schlüssel zurück und konkateniert ihn in das rohe INSERT. MySQL führt die eingeschleuste Unterabfrage aus.Statische Analyse übersieht dies, weil die Quelle der gefährlichen Daten ein DB-Read ($wpdb->get_results()) ist, den Taint-Engines als bereinigt markieren. Die Speichergrenze unterbricht die Taint-Kette.
Jeder Contributor kann extrahieren:
wp_options (API-Schlüssel, Zahlungsdaten)Zum Zeitpunkt der Offenlegung waren über 400.000 aktive Installationen betroffen.
pip install requests
python3 poc.py https://target.com contributor p4ss
Das Skript authentifiziert sich über HTTP, speichert die Injection-Nutzlast als benutzerdefinierten Feldnamen, löst die Happy Clone-Aktion aus und liest den geleakten Hash aus den Meta-Feldern des geklonten Posts. Die Ausgabe wird in hash.txt gespeichert.
hashcat -m 400 hash.txt rockyou.txt
https://folks-iwd.github.io/writeups/cve-2025-68999.html
| Datum | Ereignis |
|---|---|
| Dezember 2025 | Entdeckt via SVN-Diff. PoC bestätigt. |
| Dezember 2025 | An Patchstack Alliance gemeldet mit vollständiger Ausarbeitung und PoC. |
| Januar 2026 | weDevs hat den Fix in v3.20.6 ausgeliefert. |
| 23. Januar 2026 | CVE-2025-68999 veröffentlicht. CVSS 8.5 HIGH zugewiesen. |
weDevs ersetzte die gesamte selbstgebaute INSERT durch:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() ruft intern $wpdb->update() mit vorbereiteten Anweisungen für sowohl Schlüssel als auch Wert auf.