n8n पाथ-ट्रैवर्सल (CWE-22) का Databricks नोड्स में प्रूफ-ऑफ-कॉन्सेप्ट: अनऑथेंटिकेटेड वेबहुक इनपुट Genie पाथ से बाहर निकलकर वर्कस्पेस PAT सीक्रेट्स लीक करता है, साथ में एक लूपबैक लैब।
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · n8n-databricks-path-join
राइट-अप: https://abraxaslabs.tech/research/n8n-databricks-path-join
n8n 2.42.0 - n8n GmbH
GHSA-89p4-6h98-c7xm और GHSA-rqch-9jrh-cr8w ने toPathSegment पेश किया: encodeURIComponent के साथ '' / . / .. को अस्वीकार करना। getSpace.operation.ts spaceId को ${host}/api/2.0/genie/spaces/${spaceId} में जोड़ता है। Vector Search getIndex और Files downloadFile भी इसी श्रेणी के हैं। LangChain VectorStoreDatabricks पहले से ही index पथ को रैप करता है। बाकी काम WHATWG new URL करता है। ../ सामान्यीकृत हो जाता है। वर्कफ़्लो का Databricks PAT भी साथ चला जाता है।
अविश्वसनीय webhook इनपुट, वर्कस्पेस टोकन के अंतर्गत GET /api/2.0/secrets/get बन जाता है। Databricks पर क्रेडेंशियल लीक, n8n होस्ट पर RCE नहीं।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-22 |
| CVSS | High: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| उत्पाद | n8n |
| प्रभावित | 2.42.0 (86c23326) तक; GHSA-89p4 / GHSA-rqch का सहोदर |
| प्रमाणीकरण | webhook पर अनप्रमाणित, यदि किसी शिकार वर्कफ़्लो ने अविश्वसनीय इनपुट को बाइंड किया हो |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
किसी सार्वजनिक webhook, chat, या HTTP ट्रिगर को हिट करें जो हमलावर-नियंत्रित id के साथ Databricks Genie get-space (या Vector Search get-index, या Files download) में प्रवाहित होता है। इसके बाद वर्कफ़्लो टोकन /api/2.0/secrets/get पर GET करता है। यदि वह टोकन scope को पढ़ सकता है (सामान्य वर्कस्पेस admin PAT), तो नोड आउटपुट secret value JSON होता है।
secrets ACL के बिना टोकन अभी भी 403 देता है; वह अभी भी साबित करता है कि अनुरोध /genie से बाहर निकला। Files download के लिए गहरा ../ (लंबा प्रीफ़िक्स) चाहिए। एक शिकार चाहिए जिसने अविश्वसनीय इनपुट को उस पैरामीटर में बाइंड किया हो। लॉकडाउन किया गया HTTP Request नोड (allowedHttpRequestDomains: none) Databricks ids को एनकोड करने का विकल्प नहीं है।
वही उत्पाद, सहोदर अवशेष: छिपा हुआ Function vm2।
Function लैब के समान अवशेष पास: 16 सितंबर 2026 की GHSA लहर के बाद [email protected] पर दस शिकार। नोड-इंजेक्शन शिकार GHSA-89p4 (Public API resource ids) और GHSA-rqch (Supabase table name) के अपूर्ण सहोदरों की तलाश कर रहा था। Elastic, Adalo, Currents, स्वयं n8n नोड। हेल्पर इसलिए मौजूद है क्योंकि वे पहले ही यह लड़ाई हार चुके हैं। Databricks nodes-base इसे कॉल नहीं करता।
मैंने इसे किसी वास्तविक वर्कस्पेस पर लक्षित नहीं किया। :18203 पर लैब मॉक GET /api/2.0/secrets/get का उत्तर N8N-DBX-SECRET-WITNESS से देता है। n8n :18202 पर। Webhook dbx-space JSON से spaceId बाइंड करता है। मॉक एक्सेस लॉग: GET /api/2.0/secrets/get?scope=s&key=k। Webhook बॉडी में witness शामिल है।
गलत मोड़ पहले ही दर्ज हो चुके हैं: अनुरोध /api/2.0/genie/spaces/ के अंतर्गत रहना (फिर .. एन्कोड किया गया - लैब के लिए इसे छोड़ा जाना आवश्यक है); n8n होस्ट RCE को SUCCESS मानना; किसी वास्तविक वर्कस्पेस पर हमला करना; एक रिवर्स शेल। नाटक। गवाह N8N-DBX-SECRET-WITNESS के साथ-साथ मॉक अनुरोध पंक्ति है।
cd lab
./run.sh
केवल http://127.0.0.1:18202 (n8n) और :18203 (mock) को लक्षित करें। क्रेडेंशियल होस्ट mock है, वास्तविक वर्कस्पेस नहीं।
webhook-http=200
mock-request-line=GET /api/2.0/secrets/get?scope=s&key=k
webhook-witness=True
mock-secrets-get=True
witness=N8N-DBX-SECRET-WITNESS
SUCCESS N8N-DBX-PATH-JOIN
हर Databricks पथ आईडी को toPathSegment से लपेटें, ठीक वैसे ही जैसे VectorStoreDatabricks में है।
getSpace.operation.ts · toPathSegment · DatabricksVectorStore.tsGNU Affero GPL v3.0. देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।