Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/biitts/cve-2026-44789-n8n-prototypepollution-rce
भेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंटलैब और अभ्यास

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
GitHub
biitts/cve-2026-44789-n8n-prototypepollution-rce

CVE-2026-44789-n8n-PrototypePollution-RCE

CVE-2026-44789 — n8n <1.123.43 HTTP अनुरोध पेजिनेशन prototype pollution से RCE (NODE_OPTIONS runner-spawn gadget)। प्रयोगशाला + स्वचालित PoC, सत्यापित e2e।

रिपॉजिटरी देखें
22 महीने पहलेअभी तक समीक्षित नहीं
साझा करें

CVE-2026-44789 — n8n HTTP अनुरोध नोड पेजिनेशन प्रोटोटाइप प्रदूषण → RCE

एक प्रमाणित n8n < 1.123.43 वर्कफ़्लो निर्माता n8n सर्वर प्रक्रिया में HTTP अनुरोध नोड की पेजिनेशन सेटिंग्स के माध्यम से Object.prototype को प्रदूषित करता है, फिर n8n के टास्क रनर को स्पॉन करने के तरीके का दुरुपयोग करके रिमोट कोड निष्पादन तक बढ़ जाता है — एक प्रदूषित NODE_OPTIONS को चाइल्ड node प्रक्रिया में लीक करके और कोड-नोड सैंडबॉक्स को बायपास करता है।

CVECVE-2026-44789
परामर्शGHSA-c8xv-5998-g76h
प्रभावित< 1.123.43, 2.0.0-rc.0 … < 2.20.7, 2.21.0 … < 2.22.1
ठीक किया1.123.43 / 2.20.7 / 2.22.1
वर्गCWE-1321 (प्रोटोटाइप प्रदूषण) → CWE-94 (RCE)
CVSS9.4 (CVSS 4.0) / गंभीर
प्रमाणीकरणप्रमाणित (वर्कफ़्लो बनाने/संशोधित करने की अनुमति)
स्थितिपुष्टि — पूर्ण श्रृंखला n8nio/n8n:1.123.42 के विरुद्ध अंत-से-अंत तक पुनरुत्पादित

सार्वजनिक परामर्श केवल यह बताता है कि प्रदूषण "अन्य तकनीकों के साथ संयुक्त होकर RCE का कारण बन सकता है" — यह कोई गैजेट प्रकट नहीं करता। यह रिपॉजिटरी एक ठोस, सत्यापित प्रोटोटाइप-प्रदूषण→RCE श्रृंखला का दस्तावेजीकरण और स्वचालन करता है।


1. प्रदूषण प्रिमिटिव

packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts, पेजिनेशन मोड updateAParameterInEachRequest:

root@kitploit:~
paginationData.request[parameter.type]![parameterName] = parameterValue;

parameter.type, parameterName और parameterValue सभी वर्कफ़्लो JSON (हमलावर-नियंत्रित) से आते हैं। parameter.type = "__proto__" के साथ, paginationData.request["__proto__"] Object.prototype पर हल होता है, इसलिए असाइनमेंट Object.prototype[parameterName] = parameterValue लिखता है — n8n सर्वर प्रक्रिया में एक वैश्विक प्रोटोटाइप प्रदूषण।

फिक्स paginationData.request के लिए Object.create(null) का उपयोग करता है, इसलिए ["__proto__"] प्रोटोटाइप के बजाय एक सामान्य (नल-प्रोटो) कुंजी है।

2. RCE गैजेट

packages/cli/src/task-runners/task-runner-process-js.ts JS टास्क रनर को स्पॉन करता है:

root@kitploit:~
return spawn('node', [...flags, startScript], { env: this.getProcessEnvVars(...) });

Node का normalizeSpawnArguments चाइल्ड एनवायरनमेंट को for (const key in env) के साथ बनाता है, जो विरासत में मिले गणनीय गुणों की गणना करता है। इसलिए Object.prototype.NODE_OPTIONS = "--require=/path/evil.js" को प्रदूषित करना स्पॉन किए गए रनर के एनवायरनमेंट में लीक हो जाता है। चाइल्ड node है, जो NODE_OPTIONS का सम्मान करता है, इसलिए यह स्टार्टअप पर हमलावर की फ़ाइल को --require करता है → n8n सेवा उपयोगकर्ता के रूप में कोड-नोड सैंडबॉक्स के बाहर कोड निष्पादन।

रनर स्टार्टअप पर लॉन्च किया जाता है, लेकिन इसका जीवनचक्र जब भी प्रक्रिया बाहर निकलती है, इसे फिर से स्पॉन करता है (onProcessExit → start())। हमलावर रनर को कोड नोड से हैंग करके (टास्क-टाइमआउट / OOM इसे मारता है) प्रदूषण के बाद एक रीस्पॉन मजबूर करता है।

3. अंत-से-अंत श्रृंखला (exploit.py क्या करता है)

root@kitploit:~
1. write /tmp/evil.js                  via Set → Convert to File → Read/Write Files nodes
2. hang the task runner                via a Code node ( while(true){} )   [BEFORE polluting]
3. pollute Object.prototype.NODE_OPTIONS via the HTTP Request node ( type="__proto__" )
4. the hung runner times out → main process respawns 'node' → inherits NODE_OPTIONS
   → require('/tmp/evil.js') → RCE

क्रम मायने रखता है: प्रदूषण NODE_OPTIONS को Object.prototype पर एक गणनीय स्व-रहित कुंजी बनाता है, जिस पर n8n का TypeORM स्तर ठोकर खाता है (संस्थाओं पर for…in), वर्कफ़्लो स्थिरता को तोड़ देता है। इसलिए रनर को प्रदूषण उतरने से पहले पहले से ही हैंग होना चाहिए; रीस्पॉन फिर प्रदूषित वातावरण को उठाता है।

4. पुनरुत्पादन

कॉन्फ़िगरेशन स्कोप (पहले पढ़ें)। प्रोटोटाइप-प्रदूषण प्रिमिटिव किसी भी प्रभावित संस्करण पर बिना किसी कॉन्फ़िगरेशन परिवर्तन के फायर करता है। RCE गैजेट को टास्क रनर की आवश्यकता है, जो प्रति शाखा अलग-अलग तरीके से पहुंचा जाता है:

  • n8n 2.x प्रभावित (2.0.0–2.20.6, 2.21.0–2.22.0): टास्क रनर डिफ़ॉल्ट/अनिवार्य हैं (N8N_RUNNERS_ENABLED को हटा दिया गया है → SAFE_TO_REMOVE), इसलिए पूर्ण RCE श्रृंखला डिफ़ॉल्ट कॉन्फ़िगरेशन में है।
  • n8n 1.123.x प्रभावित (यह लैब इमेज): टास्क रनर डिफ़ॉल्ट रूप से बंद हैं, इसलिए लैब 2.x डिफ़ॉल्ट को दर्पण करने के लिए N8N_RUNNERS_ENABLED=true सेट करता है। N8N_RUNNERS_TASK_TIMEOUT को केवल हैंग-रनर रीस्पॉन को तेज़ी से फायर करने के लिए कम किया गया है — यह बग के लिए आवश्यक नहीं है।
root@kitploit:~
docker compose -f lab/docker-compose.yml up -d        # n8nio/n8n:1.123.42, runners enabled to mirror 2.x

python3 exploit.py http://127.0.0.1:5678 -c "id; hostname"

# command output appears on the n8n host:
docker compose -f lab/docker-compose.yml exec n8n cat /tmp/n8n_rce_proof
#   RCE uid=1000(node) gid=1000(node) groups=1000(node)
#   <hostname>

exploit.py केवल Python मानक पुस्तकालय का उपयोग करता है और n8n REST API को अंत-से-अंत (मालिक सेटअप/लॉगिन → वर्कफ़्लो तैनात करें → श्रृंखला फायर करें) चलाता है।

देखा गया:

root@kitploit:~
[*] step 1: wrote --require payload to /tmp/evil.js (via Read/Write Files node)
[*] step 2: dispatched a hanging task -> runner is now busy
[*] step 3: polluted Object.prototype.NODE_OPTIONS = --require=/tmp/evil.js
[*] waiting for the hung runner to time out, be respawned, and inherit NODE_OPTIONS ...
RCE uid=1000(node) gid=1000(node) groups=1000(node),1000(node)

uid=1000(node) रनर का सेवा खाता है और आउटपुट लाइव id/uname स्थिति है — वास्तविक निष्पादन, इनपुट प्रतिध्वनि नहीं।

5. प्रभाव

कोई भी प्रमाणित उपयोगकर्ता जो वर्कफ़्लो बना या संशोधित कर सकता है, n8n होस्ट पर OS कमांड निष्पादन प्राप्त करता है, कोड-नोड सैंडबॉक्स से बचकर — ऑटोमेशन सर्वर और उस तक पहुंचने वाले प्रत्येक क्रेडेंशियल/सिस्टम का पूर्ण समझौता।

6. उपचार

  • n8n ≥ 1.123.43 / 2.20.7 / 2.22.1 में अपग्रेड करें (पेजिनेशन ऑब्जेक्ट Object.create(null) के साथ बनाया गया है, जो __proto__ लेखन को मारता है)।
  • गहराई में रक्षा: वर्कफ़्लो बनाने/संशोधित करने को विश्वसनीय उपयोगकर्ताओं तक सीमित करें; रनर पहले से ही --disable-proto=delete / --disallow-code-generation-from-strings के साथ कठोर किया गया है, लेकिन वे रनर की रक्षा करते हैं, न कि मुख्य प्रक्रिया की जहाँ प्रदूषण उतरता है।

7. पता लगाना

उन वर्कफ़्लो को चिह्नित करें जिनके HTTP अनुरोध पेजिनेशन पैरामीटर __proto__ / constructor / prototype के type मानों का उपयोग करते हैं, और n8n/TypeORM लॉग में NODE_OPTIONS एक एंटिटी प्रॉपर्टी त्रुटि के रूप में दिखाई देता है।

प्रिमिटिव, Node for…in env व्यवहार, रनर जीवनचक्र और पैच के लिए ANALYSIS.md देखें।


  • लेखक: Caio Fabrício — github.com/BiiTts
  • भेद्यता का श्रेय मूल रिपोर्टर/विक्रेता परामर्श को जाता है; यहाँ प्रदूषण→RCE गैजेट श्रृंखला स्वतंत्र शोध है। केवल अधिकृत सुरक्षा परीक्षण के लिए।
टूल डाउनलोड करें