
استغلال PoC لـ CVE-2025-68999 - حقن SQL من الدرجة الثانية في Happy Addons for Elementor <= 3.20.4
Happy Addons for Elementor <= 3.20.4 — حقن SQL من الدرجة الثانية (مساهم+) بعد المصادقة
| CVSS | 8.5 عالية |
| الإصدار المتأثر | <= 3.20.4 |
| الإصدار المُصحَّح | 3.20.6 |
| الحد الأدنى للدور | مساهم (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 diff. تم تأكيد إثبات المفهوم. |
| ديسمبر 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() مع عبارات مُحضّرة لكل من المفتاح والقيمة.