
استغلال PoC لـ CVE-2025-68999 - Second-Order SQL Injection في Happy Addons for Elementor <= 3.20.4
Happy Addons for Elementor <= 3.20.4 — حقن SQL من الدرجة الثانية مصادق عليه (مساهم+)
| CVSS | 8.5 عالي |
| المتأثر | <= 3.20.4 |
| المُعالَج | 3.20.6 |
| الحد الأدنى للدور | Contributor (edit_posts) |
| متجه الهجوم | الشبكة / تعقيد منخفض / صلاحيات منخفضة |
تستدعي الدالة duplicate_meta_entries() في classes/clone-handler.php نسخ صفوف meta الخاصة بالمنشور إلى منشور مستنسخ باستخدام استعلام INSERT مكتوب يدويًا. تقوم بجلب الصفوف بأمان باستخدام $wpdb->prepare()، ولكنها بعد ذلك تضع $entry->meta_key مباشرة في سلسلة SQL بدون تهريب:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
نظرًا لأن meta_key يأتي من قاعدة البيانات، يعتبره الكود موثوقًا. لكن يمكن للمساهمين تعيين أسماء حقول عشوائية عبر لوحة الحقول المخصصة — لذا فهم يتحكمون في محتوى ذلك العمود.
الهجوم يتم على خطوتين:
add_post_meta() مع هذا بأمان — تصل الحمولة إلى قاعدة البيانات دون تنفيذ أي شيء.duplicate_meta_entries() المفتاح مرة أخرى وتضمينه في INSERT الخام. يقوم MySQL بتنفيذ الاستعلام الفرعي المحقون.يفشل التحليل الثابت في اكتشاف ذلك لأن مصدر البيانات الخطيرة هو قراءة من قاعدة البيانات ($wpdb->get_results())، والتي تعتبرها محركات التلوث بأنها منقاة. الحدود التخزينية تكسر سلسلة التلوث.
يمكن لأي مساهم استخراج:
wp_options (مفاتيح API، بيانات الدفع)تأثر أكثر من 400 ألف تثبيت نشط وقت الإفصاح.
pip install requests
python3 poc.py https://target.com contributor p4ss
يقوم السكريبت بالمصادقة عبر HTTP، وتخزين حمولة الحقن كاسم حقل مخصص، وتشغيل إجراء Happy Clone، وقراءة التجزئة المسربة من حقول meta للمنشور المستنسخ. يُحفظ المخرجات في hash.txt.
hashcat -m 400 hash.txt rockyou.txt
https://folks-iwd.github.io/writeups/cve-2025-68999.html
| التاريخ | الحدث |
|---|---|
| ديسمبر 2025 | اكتُشفت عبر فرق SVN. تم تأكيد إثبات المفهوم. |
| ديسمبر 2025 | أُبلغت إلى تحالف Patchstack مع الشرح الكامل وإثبات المفهوم. |
| يناير 2026 | أصدرت weDevs التصحيح في الإصدار v3.20.6. |
| 23 يناير 2026 | نُشر CVE-2025-68999. تم تعيين CVSS 8.5 عالي. |
استبدلت weDevs استعلام INSERT اليدوي بالكامل بـ:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
تقوم update_post_meta() داخليًا باستدعاء $wpdb->update() مع بيانات مُعدة لكل من المفتاح والقيمة.