
Databricksノードにおけるn8nのパストラバーサル(CWE-22)の概念実証:認証されていないWebhook入力が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 はすでにインデックスパスをラップしています。残りは 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、チャット、または HTTP トリガーにアクセスし、攻撃者が制御する id を Databricks Genie の get-space(または Vector Search の get-index、Files の download)に流し込みます。するとワークフローのトークンが /api/2.0/secrets/get を GET します。そのトークンがスコープを読み取れる場合(典型的なワークスペース管理者 PAT)、ノードの出力はシークレットの value JSON になります。
シークレット ACL を持たないトークンでは依然として 403 になりますが、それでもリクエストが /genie の外に出たことを証明できます。Files のダウンロードにはより深い ../(より長いプレフィックス)が必要です。信頼できない入力をそのパラメータにバインドした被害者が存在する必要があります。ロックダウンされた 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 として扱ったこと;実際のワークスペースへのアクセス;リバースシェル。すべて芝居だ。証人は 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 を参照してください。ループバックラボ専用です。保証はありません。