
n8n における CVE-2025-68613 脆弱性の技術研究であり、影響を受けるバージョン、ラボ環境での検証シナリオ、攻撃・防御の分析、および緩和策を網羅しています。
n8n は、ビジュアルフローと JavaScript 式を通じてシステムやサービスを統合するために使用されるワークフロー自動化プラットフォームです。
CVE-2025-68613 は、CVSS 9.9 の重大なリモートコード実行 (RCE) 脆弱性であり、n8n の複数のバージョンに影響を与えます。この欠陥は、適切に分離されていない脆弱なバージョンのワークフローにおける JavaScript 式の処理中に発生します。これにより、編集権限を持つ認証済みユーザーが、アプリケーションの想定された動作の範囲外でコードを実行できるようになります。
実際には、この欠陥を悪用して、n8n が実行されているサーバー上で、アプリケーション自身の権限を使用してコマンドを実行できます。影響を受けるバージョンは 0.211.0 から、1.120.4、1.121.1、1.122.0 で適用された修正より前のバージョンまでの範囲です。
このリポジトリは CVE-2025-68613 を技術的に文書化し、脆弱性の背景、影響を受けるバージョン、悪用手順、推奨される緩和策を網羅しています。

| ステータス | n8n バージョン | 備考 |
|---|---|---|
| ❌ 影響あり | >= 0.211.0 | 脆弱なメカニズムの導入 |
| ❌ 影響あり | < 1.120.4 | ブランチ 1.120 のパッチまで脆弱 |
| ❌ 影響あり | < 1.121.1 | ブランチ 1.121 のパッチまで脆弱 |
| ❌ 影響あり | < 1.122.0 | ブランチ 1.122 のパッチまで脆弱 |
| ✅ 修正済み | 1.120.4 | 公式修正が適用済み |
| ✅ 修正済み | 1.121.1 | 公式修正が適用済み |
| ✅ 修正済み | >= 1.122.0 | デフォルトで修正が組み込まれている |
直ちにバージョン 1.122.0 以降へ更新することを推奨します。
この脆弱性を実証するには、以下の条件が必要です:
この欠陥は、認証前ではなく、ワークフローの作成時および実行時に発生します。
最初のステップは、有効なユーザーで n8n の Web インターフェースにログインすることです。

このステップにより、攻撃が匿名ではないことが確認できます。この脆弱性には認証済みユーザーが必要です。
ログイン後、ユーザーがワークフローを作成および編集する権限を持っていることを確認します。

これは重要です。なぜなら、このアクセスレベルを持つユーザーのみがワークフローに動的式を挿入できるためです。
認証済みユーザーで、新しいワークフローをゼロから作成します。

ここから、脆弱なバージョンでは悪用され得る n8n 機能の正規の使用が始まります。
ワークフローに追加される最初のノードは、手動トリガー (Manual Trigger) です。

このノードの機能: ワークフローの手動実行を可能にし、フローの開始点として使用されます。
このシナリオでは、ワークフロー実行のエントリポイントとしてのみ機能します。
2 番目に追加されるノードは Edit Fields (Set) です。

このノードの機能: このノードは、ワークフロー内のデータフィールドを作成、変更、または上書きできます。静的値または実行時に評価される JavaScript 式を受け入れます。
脆弱性が顕在化するのは、まさにこの時点です。
Edit Fields (Set) ノードの値フィールド内に、n8n が動的式を評価するために使用する形式である {{ }} で囲んだ JavaScript 式を挿入します。

ペイロード例:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): 自己呼び出し関数を定義し、すべてのロジックをカプセル化して、ワークフロー式に直接値を返すことを可能にします。this.process: ランタイム情報とリソースを公開する Node.js 内部の process オブジェクトにアクセスします。process.mainModule: アプリケーションのメインモジュールへのアクセスを可能にし、他の内部 Node.js モジュールの読み込みを可能にします。require('child_process'): オペレーティングシステム上で新しいプロセスを作成し、外部コマンドを実行することを可能にする Node.js ネイティブモジュールです。execSync('id'): アプリケーションのプロセス権限を使用して、n8n が実行されているオペレーティングシステム上で直接コマンドを実行します。.toString(): 実行されたコマンドの出力をテキストに変換し、その結果を n8n インターフェースに表示できるようにします。表示された結果は、n8n プロセスの権限を使用してオペレーティングシステム上でコマンドが実行されたことを確認し、リモートコード実行 (RCE) に該当することを示しています。