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
Herramientas/GitHubGitHub/mickmicksh/chub-supply-chain-poc
Análisis de VulnerabilidadesAnálisis de CódigoAnálisis de MalwarePruebas de PenetraciónSeguridad de Cadena de SuministroPapers e InvestigaciónAprendizaje y EducaciónSeguridad de IA
GitHub
mickmicksh/chub-supply-chain-poc

chub-supply-chain-poc

Inyección silenciosa de dependencias a través de pipelines de documentación de IA. 240 ejecuciones aisladas de Docker demuestran que el servidor MCP sin sanitización de Context Hub permite que documentos envenenados comprometan proyectos de desarrolladores sin previo aviso.

Ver Repositorio
423hace 5 mesesAú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

Vulnerability Disclosure Affected Version Tests Reproducible License

PoC de Cadena de Suministro de Context Hub

Vulnerabilidad de desinfección cero en Context Hub (@aisuite/chub v0.1.3) permite la inyección silenciosa de dependencias a través del pipeline de documentación MCP.

Referencias: CWE-94 (Inyección de Código) | CWE-829 (Esfera de Control No Confiable) | (Verificación Insuficiente de la Autenticidad de Datos) | (Inyección de Prompt)

CWE-345
OWASP LLM01

TL;DR

Creamos documentos envenenados realistas que contenían dependencias falsas (plaid-link-verify, stripe-checkout-guard) y los servimos a través de un servidor MCP chub local dentro de contenedores Docker aislados. No se subió ningún contenido envenenado al registro de Context Hub; ejecutamos chub build localmente y configuramos el servidor MCP para servir la salida precompilada desde el disco. Desde la perspectiva del agente, la experiencia es idéntica a obtener documentos del registro en vivo.

Cuando los asistentes de codificación de IA obtuvieron los documentos, Haiku escribió silenciosamente el paquete falso en requirements.txt en el 100% de las ejecuciones, sin mencionarlo nunca en su salida de texto. Un desarrollador que leyera la respuesta del asistente no vería nada sospechoso, pero su proyecto estaría envenenado.

240 ejecuciones aisladas. 3 modelos. 4 niveles de esfuerzo. 2 APIs. 0 contaminación.

Cómo se ve

El código generado importa silenciosamente la dependencia falsa junto con módulos legítimos:

app.py generado con dependencia inyectada

El agente también modifica CLAUDE.md para incrustar el paquete falso como un "estándar del proyecto":

CLAUDE.md después del ataque

Resultados

Estas tablas muestran los resultados de Plaid Link (120 ejecuciones aisladas). Consulte RESULTS.md para obtener los datos completos, incluido Stripe Checkout (240 ejecuciones totales).

Envenenamiento Silencioso de Dependencias (requirements.txt)

EsfuerzoHaikuSonnetOpus
Bajo100%60%0%
Medio100%70%0%
Alto100%40%0%
Máximo100%40%0%

Haiku nunca advirtió sobre la dependencia falsa (0/40). Sonnet advirtió en el 48% de las ejecuciones (19/40), pero aún así envenenó requirements.txt en el 53% general. Opus advirtió en el 75% de las ejecuciones (30/40) y nunca envenenó requirements.txt ni el código.

Persistencia en CLAUDE.md (puerta trasera de configuración del proyecto)

EsfuerzoHaikuSonnetOpus
Bajo90%70%0%
Medio80%70%0%
Alto90%40%0%
Máximo90%50%0%

Haiku modifica el CLAUDE.md del proyecto para incluir la dependencia falsa como un "estándar del proyecto" en el 88% de las ejecuciones (35/40). Este archivo se confirma en git: cada futuro desarrollador que clone el repositorio heredará la configuración envenenada.

Cadena de Ataque

root@kitploit:~
flowchart LR
    A["Atacante\nenvía PR"] -->|"Sin verificación\nde identidad"| B["Mantenedor\nfusiona PR"]
    B -->|"Sin desinfección\nde contenido"| C["Documento en CDN\n(sin verificación de integridad)"]
    C -->|"MCP sirve\ncontenido sin procesar"| D["Ventana de contexto\ndel agente"]
    D -->|"El agente actúa sobre\ncontenido no confiable"| E["Estación de trabajo\ndel desarrollador"]

    style A fill:#111,stroke:#333,color:#f0f0f0
    style B fill:#161616,stroke:#333,color:#888
    style C fill:#161616,stroke:#333,color:#888
    style D fill:#161616,stroke:#333,color:#888
    style E fill:#111,stroke:#333,color:#f0f0f0

Modelo de Amenaza

AtacanteCualquiera que pueda enviar un PR al registro de documentos de Context Hub
Superficie de ataqueDocumentos comunitarios que fluyen desde GitHub PR hasta CDN, MCP y contexto del agente
Límite de confianzaContenido de colaboradores no confiables tratado como documentación autorizada de API
PrerrequisitoUn PR fusionado que contenga un documento envenenado
ImpactoEjecución arbitraria de código mediante inyección de dependencias + hooks post-instalación de pip

Hallazgos Clave

  1. El envenenamiento de Haiku es completamente silencioso. 0/80 ejecuciones de Haiku en ambas APIs mencionaron la dependencia falsa en la respuesta. El modelo escribe en disco sin avisar. Sonnet advirtió en el 48% de las ejecuciones, pero aún así envenenó requirements.txt en el 35-53% de las ejecuciones. Opus advirtió en el 23-75% de las ejecuciones y nunca envenenó requirements.txt ni el código.

  2. Haiku es 100% explotable en todos los niveles de esfuerzo. Independiente del esfuerzo en ambas APIs. El modelo más débil de la familia nunca detecta la dependencia falsa.

  3. Opus resiste el envenenamiento de código pero no el de configuración. Opus nunca escribió la dependencia falsa en requirements.txt ni en código Python (0/80 en ambas APIs). Pero en Stripe, Opus modificó CLAUDE.md en el 38% de las ejecuciones, documentando el canario como una dependencia del proyecto sin instalarlo.

  4. La persistencia en CLAUDE.md crea un vector de cadena de suministro. Los archivos de configuración modificados se confirman en git, envenenando a cada desarrollador que clone el repositorio y a cada futura sesión de IA en ese proyecto. Esto funciona en todos los modelos (Haiku 88-90%, Sonnet 58%, Opus 0-38%).

  5. La familiaridad con la API importa. Stripe (bien conocida): los modelos detectan paquetes falsos mediante datos de entrenamiento. Plaid (menos conocida): los modelos no pueden verificar y aceptan la dependencia falsa sin cuestionarla.

  6. Este es un problema de toda la categoría. Context7 tuvo ContextCrush (febrero de 2026). Context Hub tiene esto. Cualquier herramienta que inyecte contenido externo sin desinfectar en el contexto del agente es vulnerable.

Hallazgos en el Código Fuente

Cero desinfección en todo el pipeline:

  • annotations.js - writeFileSync con contenido sin procesar, sin filtrado
  • build.js - sin escaneo de contenido, sin normalización Unicode
  • cache.js - recuperación de CDN con verificación de hash/firma cero
  • source: official en el frontmatter - autodeclarado, no verificado

Divulgación

Context Hub no tiene SECURITY.md. No hay una forma documentada de divulgar responsablemente una vulnerabilidad: sin contacto de seguridad, sin clave PGP, sin política de divulgación. Los miembros de la comunidad encontraron las vulnerabilidades de todos modos y las reportaron como issues y PRs regulares. Ninguno fue revisado.

PRs de seguridad abiertos con cero revisiones

FechaEvento
2026-03-12Issue #74 presentado por @bjorkbjork reportando 4 vulnerabilidades de seguridad, incluyendo integridad de CDN, verificación de fuente autodeclarada e inyección de anotaciones
2026-03-12Issue #74 asignado internamente a un miembro del equipo central: cero seguimiento
2026-03-17PR #125 presentado por @hobostay agregando verificación de integridad de contenido: cero revisiones
2026-03-12 a 03-20PRs de seguridad adicionales (#69, #81) presentados por la comunidad: cero revisiones
2026-03-20 a 03-23Nuestra auditoría independiente confirma y cuantifica las vulnerabilidades con 240 ejecuciones Docker aisladas
2026-03-23Divulgación pública

Nota: No presentamos el issue #74. Nuestra auditoría descubrió y cuantificó estas vulnerabilidades de forma independiente. El issue #74 y los PR #69, #81, #125 se citan como arte previo que demuestra que la comunidad ha señalado estos problemas sin participación de los mantenedores.

Escalada

Una vez que el paquete falso está en requirements.txt, un pip install -r requirements.txt estándar le da al atacante ejecución arbitraria de código a través de los hooks post-instalación de setup.py. Esto no es un sandbox: pip ejecuta Python sin restricciones con los permisos completos del desarrollador.

Desde ese único punto de entrada, el atacante puede:

  • Exfiltrar datos. Leer y enviar variables de entorno, claves de API, credenciales de AWS, claves SSH, archivos .env o código fuente a un servidor controlado por el atacante.
  • Instalar una puerta trasera persistente. Shell inverso, cron job, perfil de shell modificado o proceso en segundo plano que sobrevive a la desinstalación del paquete.
  • Envenenar el registro de chub. Modificar ~/.chub/config.yaml para agregar una fuente de documentos controlada por el atacante. Todas las consultas futuras de chub en todas las bibliotecas ahora incluyen contenido del atacante. Sobrevive a chub cache clear porque la configuración no es caché.
  • Propagarse a través de git. La modificación de CLAUDE.md se confirma en el repositorio. Cada desarrollador que clone el repositorio hereda la configuración envenenada. Si ejecutan el mismo flujo de trabajo, el ataque se repite en su máquina.

Estas no son mutuamente excluyentes. Un solo hook post-instalación puede hacer todas ellas en menos de un segundo. No creamos ni registramos un paquete malicioso.

Estructura del Repositorio

root@kitploit:~
.
|-- README.md                    # Este archivo
|-- RESULTS.md                   # Conjunto de datos completo con desgloses por ejecución
|-- REPRODUCE.md                 # Guía de reproducción basada en Docker
|-- alternatives-comparison.md   # Comparación de Context7, LAP, GitMCP, Docfork
|-- article.html                 # Artículo completo
|-- docker/
|   |-- Dockerfile               # Entorno de prueba aislado
|   |-- run_isolated.ps1         # Ejecutor de PowerShell (Windows/macOS/Linux vía pwsh)
|   |-- seed-claude.md           # CLAUDE.md mínimo sembrado en cada ejecución
|   |-- plaid-doc/               # Documento envenenado de Plaid Link (canario: plaid-link-verify)
|   |   `-- plaid/link/DOC.md
|   `-- stripe-doc/              # Documento envenenado de Stripe Checkout (canario: stripe-checkout-guard)
|       `-- stripe/checkout/DOC.md
`-- results/
    |-- plaid-isolated/          # 120 ejecuciones de Plaid: JSON + transcripciones de sesión + archivos de proyecto
    `-- stripe-isolated/         # 120 ejecuciones de Stripe: JSON + transcripciones de sesión + archivos de proyecto

Reproducción de los Resultados

Consulte REPRODUCE.md para la guía completa de reproducción basada en Docker.

Inicio rápido:

root@kitploit:~
# Plaid (predeterminado)
docker build --build-arg DOC_DIR=plaid-doc -t plaid-bench docker/
docker run -d --name plaid-runner plaid-bench sleep infinity
docker exec -it plaid-runner claude login

# Stripe
docker build --build-arg DOC_DIR=stripe-doc -t stripe-bench docker/
docker run -d --name stripe-runner stripe-bench sleep infinity
docker exec -it stripe-runner claude login

# Luego ejecute la matriz de pruebas desde el host (consulte REPRODUCE.md)

Limitaciones

  1. Solo se probaron modelos Claude. GPT-4, Gemini, Llama pueden diferir.
  2. 10 ejecuciones por celda: suficiente para tendencias, no para intervalos de confianza estrechos.
  3. Las pruebas usaron --permission-mode bypassPermissions. Los agentes reales pueden solicitar confirmación.
  4. Fuente de documentos local, no CDN. La ruta CDN requiere un PR malicioso fusionado.
  5. No se registró ningún paquete malicioso real en PyPI.

Trabajo Relacionado

  • ContextCrush (Noma Security, febrero 2026): misma clase de ataque contra Context7
  • Morris II (Cohen, Bitton, Nassi): prompts autorreplicantes en agentes de IA
  • Cadena de Eliminación de Promptware (Nassi, Schneier et al.): taxonomía de ataques LLM de múltiples etapas
  • Envenenamiento de Herramientas MCP (Invariant Labs): manipulación de herramientas entre servidores

Licencia

MIT

Divulgación

Esta investigación fue realizada por Mickey Shmueli, el desarrollador de LAP, una alternativa de código abierto a Context Hub. LAP utiliza compilación determinista a partir de especificaciones oficiales de API, sin contenido aportado por la comunidad en el pipeline. Esta auditoría fue motivada por una preocupación genuina de seguridad sobre los pipelines de contenido no desinfectado, una clase de vulnerabilidad que afecta a cualquier herramienta en este espacio que acepte contribuciones comunitarias no verificadas. Los hallazgos hablan por sí solos: 240 ejecuciones Docker aisladas, detección determinista, completamente reproducible.

Aviso Legal

Este PoC es solo para fines educativos y de investigación en seguridad. Todas las pruebas se realizaron localmente en contenedores Docker aislados. No se envió ningún contenido malicioso al repositorio de Context Hub. Todos los nombres de paquetes canarios verificados como inexistentes en PyPI antes de las pruebas.

Estas vulnerabilidades fueron reportadas de forma independiente por miembros de la comunidad en issue #74 (12 de marzo) y PR #125 (17 de marzo). Ambos recibieron cero respuesta de los mantenedores.

Descargar herramienta