<p><style_prompt>
[METADATA]
cve: CVE-2026-25049
severity: CRITICAL (CVSS 9.4)
target: n8n (Workflow Automation Platform)
vulnerability_type: Remote Code Execution (RCE) via Sandbox Bypass
author: CSIRT_Engineering_Draft_Generator
</style_prompt>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">【緊急】n8nの致命的RCE脆弱性(CVE-2026-25049 / CVSS 9.4)における脅威の分析と実践的防御ガイド</h1>
<h2 class="wp-block-heading">【脅威の概要と背景】</h2>
<p>n8nのCodeノードにおけるサンドボックス回避により、認証不要な第三者がホストOS上で任意のOSコマンドを実行可能となる脆弱性(CVE-2026-25049)。2026年2月に特定され、悪用が極めて容易であることから早急な対処が必要です。</p>
<hr/>
<h2 class="wp-block-heading">【攻撃シナリオの可視化】</h2>
<p>以下に、攻撃者がCVE-2026-25049を悪用して内部ネットワークへ侵入し、機密データを奪取するまでのキルチェーンを示します。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["攻撃者: インターネット"] -->|1. 脆弱なn8nインスタンスの探索| B("公開されたn8nエンドポイント")
B -->|2. 特製APIリクエストの送信<br>Sandbox回避ペイロード| C{"CVE-2026-25049 悪用"}
C -->|3. コマンド実行成功| D["n8nコンテナ内でのシェル奪取"]
D -->|4. 環境変数から認証情報を窃取| E["外部連携サービス AWS/SaaS へ不正アクセス"]
D -->|5. 内部ネットワークの走査| F["ローカルセグメントの横展開"]
</pre></div>
<hr/>
<h2 class="wp-block-heading">【安全な実装と設定】</h2>
<h3 class="wp-block-heading">1. 脆弱な構成と安全な代替案(環境定義)</h3>
<p>n8nのデフォルト設定では、Codeノード内での高度なライブラリ呼び出しやプロセス実行が十分に制限されていない場合があります。以下に、Docker Compose環境における安全なシステム分離設定を示します。</p>
<h4 class="wp-block-heading">❌ 脆弱な設定(デフォルトに近い状態)</h4>
<p>特権コンテナでの実行や、ホストと同一ネットワークセグメントでの配置は、RCE発生時の被害を最大化します。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># docker-compose.yml (Vulnerable Example)
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_ENCRYPTION_KEY=weak_default_key
# サンドボックス制限や外部モジュール制限が未設定
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 致命的:ホストのルート権限奪取が可能
- n8n_data:/home/node/.n8n
</pre>
</div>
<h4 class="wp-block-heading">安全な設定(最小権限とサンドボックスの隔離)</h4>
<p>外部コードの実行制限(<code>N8N_BLOCK_ENV_ACCESS_IN_NODE</code>など)を有効化し、不要なファイルシステムマウントや特権アクセスを排除します。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># docker-compose.yml (Secure Example)
version: '3.8'
services:
n8n:
image: n8nio/n8n:1.x.x # 明示的な修正済みバージョンを指定
user: "node:node" # 非ルートユーザーでの実行を強制
read_only: true # コンテナのルートファイルシステムを読み取り専用に
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:uid=1000,gid=1000,mode=1777
- /home/node/.n8n:uid=1000,gid=1000,mode=1700
ports:
- "127.0.0.1:5678:5678" # インターネットへの直接露出を避け、リバースプロキシ経由に限定
environment:
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # 環境変数から強固なキーを注入
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
# サンドボックスおよび環境変数アクセスの制限
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DISABLE_PRODUCTION_MAIN_PROCESS_SOURCE_MAPS=true
- NODE_FUNCTION_ALLOW_EXTERNAL= # 外部モジュールのインポートを禁止
cap_drop:
- ALL
</pre>
</div>
<h3 class="wp-block-heading">2. キー管理とローテーション</h3>
<ul class="wp-block-list">
<li><p><strong>シークレットの外部管理</strong>: n8nの暗号化キー(<code>N8N_ENCRYPTION_KEY</code>)や各種SaaSのAPIキーは、コンテナ定義に直接記述せず、AWS Secrets ManagerやHashiCorp Vaultなどから起動時に注入してください。</p></li>
<li><p><strong>認証情報のローテーション</strong>: 脆弱性が疑われる、またはパッチ適用が遅れた場合は、n8n内で利用していたすべての外部連携サービスの認証情報(APIトークン、SSH鍵、データベースパスワード)を直ちにローテーションしてください。</p></li>
</ul>
<hr/>
<h2 class="wp-block-heading">【検出と緩和策】</h2>
<h3 class="wp-block-heading">1. 検知ポイント(SIEM/EDR)</h3>
<p>本脆弱性が悪用された場合、n8nを実行しているプロセス(通常は <code>node</code>)から、想定外の子プロセスがフォークされます。</p>
<ul class="wp-block-list">
<li><p><strong>EDR(プロセス監視)シグネチャ</strong>:</p>
<ul>
<li><p>親プロセス: <code>node</code> (n8nのメインプロセス)</p></li>
<li><p>子プロセス: <code>/bin/sh</code>, <code>/bin/bash</code>, <code>sh</code>, <code>bash</code>, <code>curl</code>, <code>wget</code>, <code>nc</code> などのシェルおよびネットワークユーティリティの起動。</p></li>
</ul></li>
<li><p><strong>SIEM(コンテナログ監視)</strong>:</p>
<ul>
<li><code>/rest/execute</code> や <code>/api/v1/run</code> などのエンドポイントに対して、ステータスコード <code>200</code> または <code>500</code> を返す異常に大きなペイロードのPOSTリクエストの検知。</li>
</ul></li>
</ul>
<h3 class="wp-block-heading">2. 応急緩和策(パッチ適用が困難な場合)</h3>
<p>システム停止が許容されず、即座のバージョンアップが困難な場合は、以下の緩和策を直ちに実施してください。</p>
<ol class="wp-block-list">
<li><p><strong>IPアドレス制限の徹底</strong>:
n8nのWeb UI(<code>/</code>)およびAPIエンドポイントへのアクセスを、組織内の信頼されたIP(VPN、踏み台ホスト、オフィスIP)のみに制限します。</p></li>
<li><p><strong>Codeノードの無効化(暫定措置)</strong>:
環境変数 <code>N8N_BLOCK_ENV_ACCESS_IN_NODE=true</code> および、JavaScript / Python等の実行ノード自体の利用制限ポリシーをリバースプロキシ(NGINX/Cloudflare等)側でパスベース(例:WAFルールでのブロック)で適用します。</p></li>
</ol>
<hr/>
<h2 class="wp-block-heading">【実務上の落とし穴】</h2>
<h3 class="wp-block-heading">1. 誤検知(False Positive)のリスク</h3>
<ul class="wp-block-list">
<li><p><strong>正規のJavaScriptコード実行との混同</strong>:
n8nの「Codeノード」や「Functionノード」を利用して、正規の業務自動化ロジック(データの整形、特定の内部API呼び出しなど)を組んでいる場合、これらも内部的には <code>node</code> プロセスからの挙動として検知されるため、単純な「シグネチャによる一律ブロック」は、既存の全ワークフローを停止させる可用性の崩壊を招きます。</p></li>
<li><p><strong>対策</strong>: 開発・テスト環境において、あらかじめ「正規のワークフローが実行するコードの振る舞い(接続先ドメイン、実行頻度)」をプロファイリングし、許可リスト(セーフリスト)を構築した上で監視ルールを運用してください。</p></li>
</ul>
<h3 class="wp-block-heading">2. 可用性とセキュリティのトレードオフ</h3>
<ul class="wp-block-list">
<li>コンテナを <code>read_only: true</code>(読み取り専用)に設定した場合、一部のコミュニティノードの動的インストールや、テンポラリファイルの保存を伴うワークフローが動作しなくなる可能性があります。事前検証を十分に行ってください。</li>
</ul>
<hr/>
<h2 class="wp-block-heading">【まとめ】</h2>
<p>組織として最優先で実施すべき3つのアクションは以下の通りです。</p>
<ol class="wp-block-list">
<li><p><strong>アセットの特定とバージョン確認</strong>:
自組織で稼働しているすべてのn8nインスタンス(シャドーITを含む)を洗い出し、バージョンが本脆弱性の影響を受けるか確認する。</p></li>
<li><p><strong>最新の修正パッチ(セキュリティアップデート)の適用</strong>:
公式から提供される修正済みバージョンへ直ちにアップグレードを実施する。</p></li>
<li><p><strong>ネットワーク隔離とアクセス制御の再設計</strong>:
n8nを公共のインターネットに直接晒さない(Shodan等でのスキャン対象から外す)よう、リバースプロキシやVPNによるアクセス制限を二重に配置する。</p></li>
</ol>
<hr/>
<h3 class="wp-block-heading">【参考文献】</h3>
<ul class="wp-block-list">
<li><p><a href="https://github.com/n8n-io/n8n/security">n8n公式セキュリティアドバイザリ(GitHub Security Advisories)</a></p></li>
<li><p><a href="https://nvd.nist.gov/">NIST NVD (National Vulnerability Database) – CVE-2026-25049</a> <em>(※CVE情報は公表時期によりリンク先で更新されます)</em></p></li>
<li><p><a href="https://www.jpcert.or.jp/">JPCERT/CC 注意喚起情報</a></p></li>
</ul>
[METADATA]
cve: CVE-2026-25049
severity: CRITICAL (CVSS 9.4)
target: n8n (Workflow Automation Platform)
vulnerability_type: Remote Code Execution (RCE) via Sandbox Bypass
author: CSIRT_Engineering_Draft_Generator
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
【緊急】n8nの致命的RCE脆弱性(CVE-2026-25049 / CVSS 9.4)における脅威の分析と実践的防御ガイド
【脅威の概要と背景】
n8nのCodeノードにおけるサンドボックス回避により、認証不要な第三者がホストOS上で任意のOSコマンドを実行可能となる脆弱性(CVE-2026-25049)。2026年2月に特定され、悪用が極めて容易であることから早急な対処が必要です。
【攻撃シナリオの可視化】
以下に、攻撃者がCVE-2026-25049を悪用して内部ネットワークへ侵入し、機密データを奪取するまでのキルチェーンを示します。
graph TD
A["攻撃者: インターネット"] -->|1. 脆弱なn8nインスタンスの探索| B("公開されたn8nエンドポイント")
B -->|2. 特製APIリクエストの送信
Sandbox回避ペイロード| C{"CVE-2026-25049 悪用"}
C -->|3. コマンド実行成功| D["n8nコンテナ内でのシェル奪取"]
D -->|4. 環境変数から認証情報を窃取| E["外部連携サービス AWS/SaaS へ不正アクセス"]
D -->|5. 内部ネットワークの走査| F["ローカルセグメントの横展開"]
【安全な実装と設定】
1. 脆弱な構成と安全な代替案(環境定義)
n8nのデフォルト設定では、Codeノード内での高度なライブラリ呼び出しやプロセス実行が十分に制限されていない場合があります。以下に、Docker Compose環境における安全なシステム分離設定を示します。
❌ 脆弱な設定(デフォルトに近い状態)
特権コンテナでの実行や、ホストと同一ネットワークセグメントでの配置は、RCE発生時の被害を最大化します。
# docker-compose.yml (Vulnerable Example)
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_ENCRYPTION_KEY=weak_default_key
# サンドボックス制限や外部モジュール制限が未設定
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 致命的:ホストのルート権限奪取が可能
- n8n_data:/home/node/.n8n
安全な設定(最小権限とサンドボックスの隔離)
外部コードの実行制限(N8N_BLOCK_ENV_ACCESS_IN_NODEなど)を有効化し、不要なファイルシステムマウントや特権アクセスを排除します。
# docker-compose.yml (Secure Example)
version: '3.8'
services:
n8n:
image: n8nio/n8n:1.x.x # 明示的な修正済みバージョンを指定
user: "node:node" # 非ルートユーザーでの実行を強制
read_only: true # コンテナのルートファイルシステムを読み取り専用に
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:uid=1000,gid=1000,mode=1777
- /home/node/.n8n:uid=1000,gid=1000,mode=1700
ports:
- "127.0.0.1:5678:5678" # インターネットへの直接露出を避け、リバースプロキシ経由に限定
environment:
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} # 環境変数から強固なキーを注入
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
# サンドボックスおよび環境変数アクセスの制限
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DISABLE_PRODUCTION_MAIN_PROCESS_SOURCE_MAPS=true
- NODE_FUNCTION_ALLOW_EXTERNAL= # 外部モジュールのインポートを禁止
cap_drop:
- ALL
2. キー管理とローテーション
シークレットの外部管理: n8nの暗号化キー(N8N_ENCRYPTION_KEY)や各種SaaSのAPIキーは、コンテナ定義に直接記述せず、AWS Secrets ManagerやHashiCorp Vaultなどから起動時に注入してください。
認証情報のローテーション: 脆弱性が疑われる、またはパッチ適用が遅れた場合は、n8n内で利用していたすべての外部連携サービスの認証情報(APIトークン、SSH鍵、データベースパスワード)を直ちにローテーションしてください。
【検出と緩和策】
1. 検知ポイント(SIEM/EDR)
本脆弱性が悪用された場合、n8nを実行しているプロセス(通常は node)から、想定外の子プロセスがフォークされます。
EDR(プロセス監視)シグネチャ:
親プロセス: node (n8nのメインプロセス)
子プロセス: /bin/sh, /bin/bash, sh, bash, curl, wget, nc などのシェルおよびネットワークユーティリティの起動。
SIEM(コンテナログ監視):
/rest/execute や /api/v1/run などのエンドポイントに対して、ステータスコード 200 または 500 を返す異常に大きなペイロードのPOSTリクエストの検知。
2. 応急緩和策(パッチ適用が困難な場合)
システム停止が許容されず、即座のバージョンアップが困難な場合は、以下の緩和策を直ちに実施してください。
IPアドレス制限の徹底:
n8nのWeb UI(/)およびAPIエンドポイントへのアクセスを、組織内の信頼されたIP(VPN、踏み台ホスト、オフィスIP)のみに制限します。
Codeノードの無効化(暫定措置):
環境変数 N8N_BLOCK_ENV_ACCESS_IN_NODE=true および、JavaScript / Python等の実行ノード自体の利用制限ポリシーをリバースプロキシ(NGINX/Cloudflare等)側でパスベース(例:WAFルールでのブロック)で適用します。
【実務上の落とし穴】
1. 誤検知(False Positive)のリスク
正規のJavaScriptコード実行との混同:
n8nの「Codeノード」や「Functionノード」を利用して、正規の業務自動化ロジック(データの整形、特定の内部API呼び出しなど)を組んでいる場合、これらも内部的には node プロセスからの挙動として検知されるため、単純な「シグネチャによる一律ブロック」は、既存の全ワークフローを停止させる可用性の崩壊を招きます。
対策: 開発・テスト環境において、あらかじめ「正規のワークフローが実行するコードの振る舞い(接続先ドメイン、実行頻度)」をプロファイリングし、許可リスト(セーフリスト)を構築した上で監視ルールを運用してください。
2. 可用性とセキュリティのトレードオフ
- コンテナを
read_only: true(読み取り専用)に設定した場合、一部のコミュニティノードの動的インストールや、テンポラリファイルの保存を伴うワークフローが動作しなくなる可能性があります。事前検証を十分に行ってください。
【まとめ】
組織として最優先で実施すべき3つのアクションは以下の通りです。
アセットの特定とバージョン確認:
自組織で稼働しているすべてのn8nインスタンス(シャドーITを含む)を洗い出し、バージョンが本脆弱性の影響を受けるか確認する。
最新の修正パッチ(セキュリティアップデート)の適用:
公式から提供される修正済みバージョンへ直ちにアップグレードを実施する。
ネットワーク隔離とアクセス制御の再設計:
n8nを公共のインターネットに直接晒さない(Shodan等でのスキャン対象から外す)よう、リバースプロキシやVPNによるアクセス制限を二重に配置する。
【参考文献】
コメント