
PoC-Exploit für CVE-2025-68999 - Second-Order-SQL-Injection in Happy Addons for Elementor <= 3.20.4
| CVSS | 8.5 HOCH |
| Betroffen | <= 3.20.4 |
| Behoben | 3.20.6 |
| Mindestrolle | Contributor (edit_posts) |
| Vektor | Netzwerk / Geringe Komplexität / Geringe Privilegien |
duplicate_meta_entries() in classes/clone-handler.php kopiert Post-Meta-Zeilen mit einem handgeschriebenen Bulk-INSERT in einen geklonten Beitrag. Es holt die Zeilen sicher mit $wpdb->prepare(), fügt dann aber $entry->meta_key direkt ohne Escaping in den SQL-String ein:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
Da meta_key aus der Datenbank stammt, behandelt der Code ihn als vertrauenswürdig. Aber Contributors können über das Custom-Fields-Panel beliebige Feldnamen festlegen — sie kontrollieren also, was in dieser Spalte steht.
Der Angriff besteht aus zwei Schritten:
add_post_meta() erledigt das sicher — die Payload landet in der Datenbank, ohne dass etwas ausgeführt wird.duplicate_meta_entries() liest den Schlüssel erneut aus und fügt ihn in das rohe INSERT ein. MySQL führt die injizierte Subquery aus.Statische Analyse übersieht dies, weil die Quelle gefährlicher Daten ein DB-Read ($wpdb->get_results()) ist, den Taint-Engines als bereinigt markieren. Die Speichergrenze durchbricht die Taint-Kette.
Jeder Contributor kann Folgendes extrahieren:
wp_options (API-Schlüssel, Zahlungsdaten)Zum Zeitpunkt der Offenlegung waren 400K+ aktive Installationen betroffen.
pip install requests
python3 poc.py https://target.com contributor p4ss
Das Skript authentifiziert sich über HTTP, speichert die Injektions-Payload als Namen eines benutzerdefinierten Felds, löst die Happy-Clone-Aktion aus und liest den geleakten Hash aus den Meta-Feldern des geklonten Beitrags. Die Ausgabe wird in hash.txt gespeichert.
hashcat -m 400 hash.txt rockyou.txt
| Datum | Ereignis |
|---|---|
| Dezember 2025 | Entdeckt per SVN-Diff. PoC bestätigt. |
| Dezember 2025 | An Patchstack Alliance gemeldet, mit vollständigem Writeup und PoC. |
| Januar 2026 | weDevs hat den Fix in v3.20.6 ausgeliefert. |
| 23. Januar 2026 | CVE-2025-68999 veröffentlicht. CVSS 8.5 HOCH zugewiesen. |
weDevs hat das gesamte handgeschriebene INSERT ersetzt 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 Schlüssel und Wert auf.