
إثبات مفهوم يوضح ثغرة SSRF عمياء موثّقة في مكوّن SiteContentDetector الخاص بـ Matomo، مما يتيح استطلاع الشبكة الداخلية وإرسال طلبات إلى الخدمات الداخلية عبر عناوين URL مخصصة للمواقع.
الاسم: CYBER-SEC
جهة الاتصال: [email protected]
يتيح Matomo لمسؤول الموقع المُصادق عليه ضبط main_url للموقع بعنوان داخلي. يمكن لأي مستخدم مُصادق عليه يملك صلاحية العرض لاحقًا تشغيل getTrackingMethodsForSite، مما يجعل الخادم ينفذ طلب HTTP أعمى إلى العنوان المُهيأ.
لا يتم التحقق من الوجهة إلا عبر حمايات قائمة على اسم المضيف، ولا يتم رفض عناوين loopback أو RFC1918 أو link-local بشكل صحيح بعد التحليل. ونتيجة لذلك، يمكن إساءة استخدام التطبيق لتنفيذ طلبات خادم أعمى إلى الخدمات الداخلية.
المنتج: Matomo
الإصدار المتأثر: 5.11.2 تم التحقق منه
المكوّن: SiteContentDetector / SitesManager
المتجه: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
النتيجة الأساسية: 5.8 متوسط
enable_internet_features.main_url للموقع.تتعلق المشكلة بالتدفق التالي:
المصدر:
SitesManager.updateSite يخزن main_url بعد التحقق الأساسي من عنوان URL.
المُشغِّل:
GET /index.php?module=SitesManager&action=getTrackingMethodsForSite&idSite=<id>
المصب:
SiteContentDetector::requestSiteResponse()
-> Http::sendHttpRequestBy()
لا يرفض التنفيذ الوجهات الداخلية بشكل صحيح مثل:
127.0.0.0/8
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
169.254.0.0/16
::1
fc00::/7
fe80::/10
يجب أيضًا إعادة التحقق من أهداف إعادة التوجيه، لأن التصفية القائمة على اسم المضيف يمكن تجاوزها إذا أعاد اسم المضيف المسموح به التوجيه إلى عنوان داخلي.
استخدم مستمعًا تتحكم فيه في بيئة مختبرية مصرح بها:
python3 -m http.server 8088
بصفتك مسؤول موقع مُصادق عليه، اضبط main_url للموقع ليشير إلى المستمع الداخلي المُتحكم به:
http://<controlled-internal-listener>:8088/ssrf-test
لا تختبر ضد أنظمة طرف ثالث أو نقاط نهاية بيانات تعريف السحابة إلا إذا كنت تملك تلك البيئة ومصرحًا لك باختبارها.
بصفتك مستخدمًا مُصادقًا عليه يملك صلاحية العرض، شغّل:
GET /index.php?module=SitesManager&action=getTrackingMethodsForSite&idSite=1
يتلقى المستمع المُتحكم به طلب HTTP من جانب الخادم من خادم Matomo.
مثال على مخرجات المستمع:
GET /ssrf-test HTTP/1.1
Host: <controlled-internal-listener>:8088
User-Agent: Matomo
ينفذ Matomo طلب GET من جانب الخادم إلى main_url المُهيأ عند تشغيل getTrackingMethodsForSite.
تم التحقق من ذلك باستخدام مستمع HTTP داخلي/loopback لم يكن قابلاً للوصول خارجيًا، مما يؤكد سلوك SSRF الأعمى.
يمكن للمهاجم المُصادق عليه إساءة استخدام هذا السلوك من أجل:
نظرًا لأن SSRF أعمى، لا يتلقى المهاجم نص استجابة HTTP مباشرة عبر Matomo. ومع ذلك، فإن تسليم الطلب وحده قد يكون ذا صلة أمنية في الشبكات الداخلية وبيئات السحابة.
الإصلاحات الموصى بها:
تحليل اسم المضيف إلى عناوين IP قبل إجراء الطلب.
رفض نطاقات IP الخاصة وloopback وlink-local والبث المتعدد وغير الآمنة بعد تحليل DNS.
إعادة التحقق من كل هدف إعادة توجيه قبل متابعة عمليات إعادة التوجيه.
تفضيل قائمة سماح صارمة للنطاقات الصادرة المسموح بها بدلاً من قوائم حظر أسماء المضيفين.
تطبيق حمايات SSRF بشكل متسق عند المصب النهائي لطلب HTTP، وليس فقط أثناء ضبط عنوان URL للموقع.
النظر في تقييد getTrackingMethodsForSite أو مشغِّل SiteContentDetector للمستخدمين ذوي الصلاحيات الأعلى.
إضافة تسجيل تدقيق للطلبات الصادرة من جانب الخادم التي تُشغَّل بواسطة ضبط الموقع.
تم التحقق منه ضد صورة Docker الرسمية لـ Matomo 5.11.2 دون تعديل الكود المصدري.
تم الإبلاغ عن هذه المشكلة بواسطة CYBER-SEC.