Skip to content
KitploitKITPLOIT
أدواتالمدونة
Log in
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-68116 — توثيق CVE-2025-68116 | Kitploit
أدوات/GitHubGitHub/x0root/cve-2025-68116
تحليل الثغرات الأمنيةالاستغلالأمن الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubx0root/cve-2025-68116

CVE-2025-68116

توثيق CVE-2025-68116

عرض المستودع
12منذ 9 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-68116

المؤلف: @x0root
الثغرة: تخزين Cross-Site Scripting (XSS) عبر التحميلات القابلة للعرض في المتصفح (SVG / HTML)
البرنامج المتأثر: FileRise (< 2.7.1)
الإصدار المصحح: 2.7.1
CVE الرسمي (تم طلبه عبر GHSA): CVE-2025-68116 (التتبع/النشرة: GHSA-35pp-ggh6-c59c)
النشرة ذات الصلة السابقة (التخفيف الأصلي الذي تم تجاوزه): GHSA-qrcv-vjvf-fr29


تقييم CVSS:

  • CNA (GitHub): CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:L — 8.9 (عالي)
  • المُبلِّغ (تحليل المؤلف): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L — 9.6 (حرج)

الأساس المنطقي لتسجيل CVSS (المُبلِّغ)

يقوم تقييم المُبلِّغ بتقييم الامتيازات المطلوبة (PR) عند نقطة الاستغلال، وليس عند نقطة زرع الثغرة.

يحدث الاستغلال عندما يصل الضحية إلى رابط مشاركة عام تم إنشاؤه، وهو ما لا يتطلب أي مصادقة أو امتيازات (PR:N).

يقوم تقييم CNA بتقييم الامتيازات المطلوبة بناءً على القدرة على تحميل ملف ضار. ومع ذلك، يعرّف CVSS v3.1 الامتيازات المطلوبة (PR) على أنها الامتيازات التي يجب أن يمتلكها المهاجم في وقت استغلال الثغرة، وليس الامتيازات المطلوبة لوضع أو تحضير الحالة الضعيفة.

وبالتالي، فإن PR:N تعكس بشكل أكثر دقة شروط الاستغلال في العالم الحقيقي، مما يؤدي إلى تصنيف شدته كحرجة (9.6).

ملاحظة: قدم النشرة GHSA-qrcv-vjvf-fr29 تخفيفًا منع عرض ملفات SVG داخل واجهة مستخدم FileRise (لوحة المعاينة). هذا التقرير يوثق تجاوزًا لهذا التخفيف—وبالتحديد نقاط نهاية التحميل/المشاركة في الخلفية—التي يتم تتبعها كـ GHSA-35pp-ggh6-c59c / CVE-2025-68116.


ملخص

هذه الوثيقة هي سجل تقني كامل لـ CVE-2025-68116: تخزين XSS في FileRise استمر بعد تخفيف سابق وتم إصلاحه في النهاية في الإصدار v2.7.1. تتضمن الاكتشاف، وإثباتات المفهوم للاستغلال، والإصلاحات الفاشلة المتكررة، وتحليل دقيق للتحكم في التدفق الجذري للسبب (مع الأدلة)، والتحقق النهائي من التصحيح، وتحليل خصائص قابلية الاستغلال ذات الصلة بتقييم CVSS. يعتمد كل المحتوى أدناه على اختبارات معاد إنتاجها، وفحص المتحكم، وسلسلة النشرات العامة.


1. الخلفية: النشرة السابقة والإصلاح غير الكامل

قامت نشرة سابقة، GHSA-qrcv-vjvf-fr29، بمعالجة تخزين XSS عبر تحميلات SVG عن طريق منع العرض المضمن في واجهة مستخدم FileRise. لم يعالج هذا التخفيف كيفية تقديم ملفات SVG بواسطة نقاط نهاية الخلفية مثل:

  • /api/file/download.php
  • /api/file/share.php

توثق CVE-2025-68116 (المتتبعة كـ GHSA-35pp-ggh6-c59c) تجاوزًا لتخفيف GHSA-qrcv-vjvf-fr29: يمكن للمهاجم تخزين SVG مصمم وتوصيله للضحايا عبر روابط مشاركة عامة أو سلوكيات تنزيل معينة، مما يؤدي إلى تنفيذ البرامج النصية في أصل FileRise.


2. الاكتشاف: تحميل إثبات المفهوم والتجاوز

للتحقق مما إذا كانت الخلفية لا تزال تعرض ملفات SVG بطريقة قابلة للعرض، قمت بتحميل SVG بسيط كإثبات مفهوم:

الوصول إلى الملف عبر:

  • /api/file/download.php?…
    والأهم من ذلك، عبر:
  • /api/file/share.php?token=…

أدى إلى تنفيذ alert(). تم تجاوز تخفيف GHSA-qrcv-vjvf-fr29 الأصلي (منع عرض واجهة المستخدم) عن طريق الوصول المباشر إلى نقاط النهاية هذه.


3. إثبات التأثير في العالم الحقيقي

alert() هو إثبات مفهوم؛ اختبرت التأثير الهادف عن طريق جعل الحمولة تتفاعل مع واجهات برمجة التطبيقات الداخلية.

الحمولة المستخدمة في الاختبار:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
  <script type="text/javascript">
    fetch('/api/upload/upload.php')
      .then(response => response.text())
      .then(data => alert('API Response: ' + data));
  </script>
</svg>

عندما فتح مسؤول مسجل الدخول رابط مشاركة يحتوي على SVG هذا، تم تنفيذ البرنامج النصي وإجراء طلبات API موثقة. تضمنت التأثيرات الملاحظة:

  • إرجاع استجابات API للبرنامج النصي (يمكن كشف معلومات حساسة)
  • أشارت استجابة API إلى حالة رمز CSRF (مثل {"csrf_expired":true,"csrf_token":"..."})
  • أدى التفاعل إلى إبطال رمز CSRF الحالي للمسؤول، مما منع المزيد من الإجراءات التي تغير الحالة حتى الاسترداد (رفض الخدمة العملي ضد وظائف المسؤول)

تصنيف التأثير الموضح أثناء الاختبار:

  • السرية: عالية (C:H)
  • التكامل: عالي (I:H)
  • التوفر: منخفض (A:L)

4. الجدول الزمني للإفصاح ومحاولات الإصلاح المتكررة

أبلغت عن المشكلة بشكل خاص. أصدر المسؤول عدة إصلاحات تدريجية:

  • v2.6.0 — تم تطبيق التخفيف على نقطة نهاية التنزيل؛ نقطة نهاية المشاركة لا تزال ضعيفة.
  • v2.6.2 — محاولات إضافية؛ ظلت نقطة نهاية المشاركة ضعيفة في اختباراتي.
  • v2.7.0 — زعم تعزيز نقطة نهاية المشاركة؛ لا تزال قابلة للاستغلال في بيئتي.
  • v2.7.1 — الإصلاح النهائي الذي تحققت من حله للمشكلة (انظر قسم التحقق).

طوال الإصدارات v2.6.0 → v2.7.0، استمرت نقطة نهاية رابط المشاركة في تقديم SVG بطريقة سمحت بالعرض المضمن وتنفيذ البرامج النصية. يشرح تحليل السبب الجذري أدناه سبب فشل الإصلاحات السابقة في إغلاق المتجه بالكامل.


5. تحليل السبب الجذري — التحكم في التدفق وفشل الرأس (الأدلة)

لم يكن السبب الأساسي هو رأس مفقود واحد ولكن ترتيب التحكم في التدفق والإخراج داخل shareFile() (المتحكم) الذي منع تطبيق رؤوس الأمان في العديد من مسارات التنفيذ. كان هناك فئتان من المشاكل:

  • نقاط exit; مبكرة متعددة أدت إلى تقصير الدالة قبل تعيين رؤوس الأمان.
  • تحذيرات/إشعارات PHP التي أصدرت مخرجات قبل استدعاءات الرأس، مما تسبب في أخطاء "headers already sent".

5.1 تعداد الخروج المبكر

استخدمت فحص awk لسرد تكرارات header() و exit; داخل shareFile() حتى استدعاء readfile():

الأمر: awk '/function shareFile(/ {flag=1} /readfile(/ {flag=0} flag && /(header|exit;)/ {printf "%4d | %s\n", NR, $0}' src/controllers/FileController.php

المخرجات الملاحظة (مختصرة من تشغيلي):

1649 | header('Content-Type: application/json; charset=utf-8'); 1651 | exit; 1657 | header('Content-Type: application/json; charset=utf-8'); 1659 | exit; 1664 | header('Content-Type: application/json; charset=utf-8'); 1666 | exit; 1670 | header("Content-Type: text/html; charset=utf-8"); 1693 | exit; 1699 | header('Content-Type: application/json; charset=utf-8'); 1701 | exit; 1719 | header('Content-Type: application/json; charset=utf-8'); 1721 | exit; 1725 | header('Content-Type: application/json; charset=utf-8'); 1727 | exit;

تبدأ رؤوس الأمان (منطق التعزيز) في السطر ~1743:

1743 | header('X-Content-Type-Options: nosniff'); ... 1770 | header("Content-Disposition: attachment; ...");

نظرًا لأن الدالة تصدر رؤوسًا + exit; في وقت سابق في العديد من المسارات، لم تصل تلك الطلبات أبدًا إلى كود التعزيز الذي يحدد Content-Disposition أو nosniff أو النوع التقييدي.

5.2 مسار طلب كلمة المرور

في تدفق المشاركة المحمية بكلمة مرور، أصدرت الدالة HTML لمطالبة كلمة المرور مبكرًا:

if (!empty($record['password']) && empty($providedPass)) { header("Content-Type: text/html; charset=utf-8"); ... exit; }

يرسل هذا المسار Content-Type: text/html ويخرج قبل منطق تعزيز SVG، مما يتسبب في العرض المضمن في المتصفحات للمشاركات المحمية بكلمة مرور حيث لم يتم توفير كلمة مرور.

5.3 المشاركات غير المحمية بكلمة مرور (موضحة)

لم تقتصر الثغرة على التدفقات المحمية بكلمة مرور. طلب مشاركة غير محمية بكلمة مرور أرجع text/html أيضًا في اختباراتي:

الأمر: curl -svI "http://127.0.0.1:8080/api/file/share.php?token=437d7913884ace4b94fab8ce745a686a" 2>&1 | grep -iE "content-type"

الملاحظ: < Content-Type: text/html; charset=UTF-8

هذا يؤكد أنه حتى في الحالة العامة (غير المحمية بكلمة مرور) كانت الاستجابة text/html، وعُرض SVG بشكل مضمن.

5.4 "رؤوس أرسلت بالفعل" بسبب إشعارات PHP

التقطت جلبًا خامًا لنقطة نهاية المشاركة تضمن تحذيرات PHP صدرت قبل تعزيز الرأس. لقطة (مختصرة):

الأمر: curl -s "http://127.0.0.1:8080/api/file/share.php?token=437d7913884ace4b94fab8ce745a686a" | head -n 30

المخرجات الخام الملاحظة (مختصرة):

Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php on line 1644


Deprecated: Constant FILTER_SANITIZE_STRING is deprecated in /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php on line 1645

Warning: Cannot modify header information - headers already sent by (output started at /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php:1644) in /data/data/com.termux/files/home/FileRise/src/controllers/FileController.php on line 1743
تنزيل الأداة