n8n पाथ-ट्रैवर्सल (CWE-22) का Databricks नोड्स में प्रूफ-ऑफ-कॉन्सेप्ट: अनऑथेंटिकेटेड वेबहुक इनपुट Genie पाथ से बाहर निकलकर वर्कस्पेस PAT सीक्रेट्स लीक करता है, साथ में एक लूपबैक लैब।
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 |
| Product | n8n |
| Affected | 2.42.0 (86c23326) तक; GHSA-89p4 / GHSA-rqch का सहोदर |
| Auth | webhook पर unauthenticated यदि किसी शिकार वर्कफ़्लो ने अविश्वसनीय इनपुट बाइंड किया हो |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
किसी सार्वजनिक webhook, chat, या HTTP trigger को हिट करें जो हमलावर-नियंत्रित 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 के लिए गहरा ../ (लंबा prefix) चाहिए। एक शिकार चाहिए जिसने उस पैरामीटर में अविश्वसनीय इनपुट बाइंड किया हो। एक लॉक-डाउन HTTP Request नोड (allowedHttpRequestDomains: none) Databricks ids को एन्कोड करने का विकल्प नहीं है।
एक ही उत्पाद, सहोदर अवशेष: छिपा हुआ Function vm2।
Function lab के समान अवशेष पास: 16 सितंबर 2026 GHSA लहर के बाद [email protected] पर दस शिकार। node-injection शिकार GHSA-89p4 (Public API resource ids) और GHSA-rqch (Supabase table name) के अपूर्ण सहोदरों की तलाश में था। Elastic, Adalo, Currents, n8n नोड स्वयं। helper इसलिए मौजूद है क्योंकि उन्होंने यह लड़ाई पहले ही हार दी थी। Databricks nodes-base इसे कॉल नहीं करता।
मैंने इसे किसी वास्तविक वर्कस्पेस पर निशाना नहीं बनाया। :18203 पर Lab mock GET /api/2.0/secrets/get का उत्तर N8N-DBX-SECRET-WITNESS से देता है। n8n :18202 पर। Webhook dbx-space JSON से spaceId बाइंड करता है। Mock access log: GET /api/2.0/secrets/get?scope=s&key=k। Webhook body में witness है।
पहले से दर्ज गलत मोड़: अनुरोध /api/2.0/genie/spaces/ के अंतर्गत रहना (तब .. एन्कोड हो गया - lab के लिए आवश्यक है कि वह बाहर जाए); n8n होस्ट RCE को SUCCESS मानना; किसी वास्तविक वर्कस्पेस को हिट करना; एक reverse shell। नाटक। witness N8N-DBX-SECRET-WITNESS के साथ mock request line है।
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 पथ id को toPathSegment से रैप करें, जैसे VectorStoreDatabricks करता है।
getSpace.operation.ts · toPathSegment · DatabricksVectorStore.tsGNU Affero GPL v3.0। देखें LICENSE। केवल Loopback lab। कोई वारंटी नहीं।