
n8n 2.42.0 सैंडबॉक्स एस्केप के लिए प्रूफ-ऑफ-कॉन्सेप्ट और लैब: छिपे हुए Function/FunctionItem नोड्स मुख्य प्रक्रिया में JS निष्पादित करते हैं, जिससे प्रमाणित सदस्यों को होस्ट RCE मिलता है।
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · n8n-function-vm2
n8n 2.42.0 - n8n GmbH
GHSA-j4p8-h8mh-rh8q ने n8n-nodes-base.code को JS task-runner चाइल्ड पर स्थानांतरित कर दिया। प्रोडक्शन स्पॉन --disallow-code-generation-from-strings और --disable-proto=delete जोड़ता है। जो बचा है वह वे नोड्स हैं जिन्हें उन्होंने स्थानांतरित करने के बजाय छिपा दिया। Function.node.ts hidden: true है। FunctionItem भी। LangChain Code भी। पैलेट छिपाना एक UI फ़्लैग है। वर्कफ़्लो JSON सेव/इम्पोर्ट अभी भी टाइप को रिज़ॉल्व करता है। डिफ़ॉल्ट NODES_EXCLUDE केवल Execute Command और Local File Trigger है। निष्पादन पथ n8n मुख्य प्रक्रिया में इन-प्रोसेस vm2 NodeVM 3.12.2 में है।
एक डिफ़ॉल्ट सदस्य जो वर्कफ़्लो बना सकता है, n8n मुख्य प्रक्रिया में JS चला सकता है। छिपा होना ACL नहीं है।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-94, CWE-269 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | n8n |
| प्रभावित | 2.42.0 (86c23326) तक; GHSA-j4p8 का अवशेष |
| प्रमाणीकरण | वर्कफ़्लो बनाने/इम्पोर्ट/निष्पादित करने वाला प्रमाणीकृत सदस्य |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
एक डिफ़ॉल्ट सदस्य के रूप में, ऐसा वर्कफ़्लो इम्पोर्ट या बनाएं जिसका नोड type n8n-nodes-base.function (या functionItem, या @n8n/n8n-nodes-langchain.code) हो और उसे निष्पादित करें। JS n8n मुख्य प्रक्रिया में चलता है।
यह n8n UID के रूप में होस्ट RCE है: इंस्टेंस सीक्रेट्स, डिस्क पर अन्य उपयोगकर्ताओं के क्रेडेंशियल सिफरटेक्स्ट, DB। मल्टी-टेनेंट सदस्य से इंस्टेंस टेकओवर। OS LPE नहीं। अनप्रमाणीकृत नहीं। उसी इंस्टेंस पर Code v2 इस तरह process नहीं देखता।
एक ही उत्पाद, समान अवशेष: Databricks path join।
मैंने पहले 16 सितंबर 2026 की GHSA लहर पढ़ी, फिर टैग [email protected] पर दस शिकार। Expression sandbox, Code/Function/vm2, क्रेडेंशियल, webhooks, HTTP/SSRF, Git node, कम्युनिटी पैकेज, auth/SSO, node injection, public API। उस लहर के अधिकांश High इस पिन पर बंद हैं। Code अधूरा था।
v3 ब्रेकिंग-चेंज नियम पहले से ही Function / FunctionItem को हटाया गया चिह्नित करते हैं। 2.42.0 पर वे अवशेष हैं, इच्छित दीर्घकालिक सैंडबॉक्स नहीं। Function this.helpers भी इंजेक्ट करता है, जिसमें वे हेल्पर्स भी शामिल हैं जिन्हें JS रनर असमर्थित सूचीबद्ध करता है। प्रक्रिया सीमा साबित करने के लिए मुझे किसी सार्वजनिक vm2 गैजेट की आवश्यकता नहीं थी।
मैंने स्टॉक n8nio/n8n:2.42.0 खड़ा किया, एक सदस्य (इंस्टेंस ओनर नहीं) साइन अप किया, n8n-nodes-base.function इम्पोर्ट किया, उसे निष्पादित किया। Function pid=7 n8n मुख्य PID है। Code v2 में वही JS: hasProcess: false। Task-runner चाइल्ड pid 26 है। गवाह N8N-FUNCTION-VM2-WITNESS।
पहले से दर्ज गलत रास्ते: Function टाइप को छिपा/अज्ञात के रूप में अस्वीकार किया गया (तब नोड वास्तव में बहिष्कृत है); Function pid task-runner चाइल्ड के बराबर (तब यह पहले ही स्थानांतरित हो चुका है); Code v2 process देख रहा है (तब रनर नियंत्रण नहीं है); एक vm2 एक्सप्लॉइट गैजेट, एक रिवर्स शेल, OS LPE। नाटक। गवाह मुख्य PID बनाम hasProcess: false है।
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:18201। डिफ़ॉल्ट NODES_EXCLUDE। हमलावर एक सदस्य है।
authenticated-as=member
function-fields pid=7 witness=N8N-FUNCTION-VM2-WITNESS
code-fields hasProcess=False pid=None
compare function_pid=7 code_pid=None main_pid=7 runner_pid=26 who=member
SUCCESS N8N-FUNCTION-VM2 who=member function_pid=7 code_pid=None main_pid=7 runner_pid=26 N8N-FUNCTION-VM2-WITNESS
डिफ़ॉल्ट NODES_EXCLUDE में n8n-nodes-base.function, n8n-nodes-base.functionItem, और @n8n/n8n-nodes-langchain.code जोड़ें, या उन्हें उसी तरह JsTaskRunnerSandbox के माध्यम से रूट करें जैसे Code v2 पहले से करता है। पैलेट hidden पर्याप्त नहीं है।
Function.node.ts · Code.node.ts · nodes.config.ts · task-runner-process-js.tsGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।