[緊急解説] n8nのChat Triggerノードにおける高深刻度Stored XSS脆弱性 (GHSA-42h7-m79w-wvg5)
はじめに:なぜフロントエンドエンジニアがn8nの脆弱性に関心を持つべきか
日本のフロントエンドエンジニアの皆さん、こんにちは!今回は、一見するとバックエンド寄りのツールに見える「n8n」というワークフロー自動化ツールのChat Triggerノードに発見された、高深刻度の脆弱性「GHSA-42h7-m79w-wvg5 / CVE-2026-54302」について解説します。なぜフロントエンドエンジニアがこの情報に目を向けるべきかというと、その原因が「Stored XSS(クロスサイトスクリプティング)」という、フロントエンドに直接的な影響を与えるタイプの脆弱性だからです。自身のプロジェクトでn8nを利用している方はもちろん、XSS対策の重要性を再認識するためにも、ぜひ最後までお読みください。
脆弱性の概要:Chat TriggerノードのStored XSS
この脆弱性は、n8nの「Chat Triggerノード」に存在します。具体的には、ワークフローの編集権限を持つ攻撃者が、`webhookId`パラメータに悪意のあるJavaScriptコードを埋め込むことができてしまうというものです。このコードは、Chat Triggerによって生成されるWebページ内に永続的に保存(Stored)されます。
もし、ログイン中の正規ユーザーが、この悪意あるコードが埋め込まれたチャットURLにアクセスしてしまうと、埋め込まれたJavaScriptコードがそのユーザーのブラウザ上で実行されてしまいます。これにより、攻撃者はそのユーザーのセッション権限を悪用し、n8n環境内で様々な不正操作を行うことが可能になります。
Stored XSSは、Reflected XSSやDOM-based XSSとは異なり、一度攻撃コードがシステムに保存されると、そのページにアクセスした不特定多数のユーザーが影響を受ける可能性があるため、特に深刻なリスクとなります。
詳細解説:攻撃シナリオと影響範囲
攻撃シナリオは以下の通りです。
1. 攻撃者が、ワークフローの作成・編集権限(たとえ制限された権限であっても)を何らかの形で取得します。あるいは、内部の悪意あるユーザーが攻撃者となるケースも考えられます。
2. 攻撃者は、Chat Triggerノードを設定する際に、`webhookId`の入力フィールドに`<script>alert('XSS');</script>`のような悪意のあるJavaScriptコードを挿入します。
3. Chat Triggerが有効になり、この悪意あるコードが埋め込まれた状態でWebページが生成されます。
4. 正規のユーザー(特にn8nにログイン中のユーザー)が、そのChat Triggerが提供するURL(またはそれにリンクされたページ)にアクセスします。
5. ユーザーのブラウザ上で埋め込まれたJavaScriptコードが実行されます。これにより、攻撃者は以下のことが可能になります。
* **セッション情報の窃取:** ユーザーのクッキーやローカルストレージからセッションIDや認証トークンを盗み出し、セッションを乗っ取る。
* **不正なAPI操作:** ユーザーの権限でn8nのAPIを呼び出し、ワークフローの変更、データの削除、ユーザー情報の取得などを行う。
* **コンテンツの改ざん:** ユーザーが見ているWebページの内容を改ざんし、フィッシングサイトへ誘導する。
* **マルウェアのダウンロード:** ユーザーに気づかれないうちにマルウェアをダウンロードさせる。
今すぐ取るべき対策
この脆弱性の深刻度を考慮し、速やかに以下の対策を実施してください。
この問題は、以下のバージョン以降で修正されています。可能な限り早く、これらのバージョン以降へアップグレードしてください。
* **n8n 1.x系:** バージョン 1.123.55 以降
* **n8n 2.x系:** バージョン 2.25.7 および 2.26.2 以降
緊急でバージョンアップが難しい場合でも、以下の暫定的な対策を講じることでリスクを軽減できます。ただし、これらは一時的なものであり、脆弱性を完全に解消するものではないことを理解しておいてください。
1. **ワークフロー作成・編集権限の厳格化:** ワークフローの作成および編集権限を、完全に信頼できるユーザーのみに制限します。攻撃者が悪意のあるコードを挿入する機会を減らすことが目的です。
2. **Chat Triggerノードの無効化:** 環境変数 `NODES_EXCLUDE` に `@n8n/n8n-nodes-langchain.chatTrigger` を追加することで、Chat Triggerノードを完全に無効にできます。これにより、この脆弱性の悪用経路を物理的に遮断します。ただし、Chat Triggerノードを利用しているワークフローは動作しなくなりますので注意が必要です。
フロントエンドエンジニアとして学ぶべき教訓
今回の脆弱性はn8nというバックエンドツールに関するものですが、Stored XSSという攻撃手法は、フロントエンド開発者にとって非常に身近で重要なセキュリティリスクです。
1. **入力値の検証とサニタイズ:** ユーザーからの入力値は、それがどこに表示されるかに関わらず、常に厳格な検証と適切なエスケープ(サニタイズ)処理を行う必要があります。今回は`webhookId`というIDが対象でしたが、どのような入力フィールドにも悪意のあるコードが埋め込まれる可能性を想定することが重要です。
2. **サードパーティライブラリのセキュリティチェック:** 自身のプロジェクトで利用しているライブラリやフレームワークだけでなく、間接的に利用する可能性のあるツール(今回のようなn8nも含む)の脆弱性情報にも常にアンテナを張る習慣をつけましょう。
3. **セキュリティ意識の向上:** フロントエンドはユーザーインターフェースを構築する最前線であり、攻撃者にとって格好のターゲットとなり得ます。XSSだけでなく、CSRF、CORS、Clickjackingなど、様々なフロントエンド関連のセキュリティ脅威について理解を深めることが不可欠です。
まとめ
n8nのChat TriggerノードにおけるStored XSS脆弱性(GHSA-42h7-m79w-wvg5)は、放置すると深刻な情報漏洩や不正操作につながる高リスクな問題です。n8nを利用している場合は、速やかに推奨バージョンへのアップグレードを実施してください。また、この事例を教訓として、日々の開発においてXSSをはじめとするWebセキュリティ対策の重要性を再認識し、安全なアプリケーション開発を心がけましょう。