
Databricksノードにおけるn8nのパストラバーサル(CWE-22)の概念実証:認証されていないWebhook入力が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 はすでにインデックスパスをラップしている。残りは 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 のみ |
攻撃者が制御する id を使って、Databricks Genie get-space (または Vector Search get-index、Files download) に流れ込む公開 webhook、チャット、HTTP トリガーを叩く。するとワークフローのトークンが /api/2.0/secrets/get を GET する。そのトークンがスコープを読み取れる場合 (典型的なワークスペース管理者 PAT)、ノードの出力はシークレットの value JSON になる。
secrets ACL のないトークンでは依然として 403 になるが、それでもリクエストが /genie を離れたことは証明される。Files download にはより深い ../ (より長いプレフィックス) が必要である。信頼できない入力をそのパラメータにバインドした被害者が前提となる。ロックダウンされた HTTP Request ノード (allowedHttpRequestDomains: none) は、Databricks の id をエンコードすることの代替にはならない。
同じ製品、兄弟の残骸: hidden Function vm2。
Function ラボと同じ残骸パス: 2026年9月16日の GHSA 波の後、[email protected] に対して10件のハントを行った。ノードインジェクションのハントでは、GHSA-89p4 (Public API リソース id) と GHSA-rqch (Supabase テーブル名) の不完全な兄弟を探していた。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 とみなすこと; 実際のワークスペースを叩くこと; リバースシェル。すべて芝居である。witness は N8N-DBX-SECRET-WITNESS とモックのリクエスト行である。
cd lab
./run.sh
対象は http://127.0.0.1:18202 (n8n) と :18203 (モック) のみ。認証情報のホストはモックであり、実際のワークスペースではない。
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
VectorStoreDatabricks と同様に、すべての Databricks パス id を toPathSegment でラップする。
getSpace.operation.ts · toPathSegment · DatabricksVectorStore.tsGNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。