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
tanscript-exploit-check — Comprobador de IOC para el ataque a la cadena de suministro de npm TanStack/Mini Shai-Hulud (CVE-2026-45321) | Kitploit
Herramientas/GitHubGitHub/nkopylov/tanscript-exploit-check
Gestión de Indicadores de Compromiso (IOC)Análisis de VulnerabilidadesAnálisis ForenseInteligencia de AmenazasSeguridad de Cadena de SuministroRespuesta a Incidentes
GitHubnkopylov/tanscript-exploit-check

tanscript-exploit-check

Comprobador de IOC para el ataque a la cadena de suministro de npm TanStack/Mini Shai-Hulud (CVE-2026-45321)

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
Ver Repositorio
1hace 2 mesesAún no revisado

Mini Shai-Hulud Ataque a la Cadena de Suministro — Comprobador de IOCs

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash

O clonar y ejecutar localmente:

root@kitploit:~
git clone https://github.com/nkopylov/tanscript-exploit-check.git
cd tanscript-exploit-check
./check-tanstack-exploit.sh [directorio_del_proyecto ...]

Lo que sucedió

Este comprobador cubre dos oleadas de la campaña de ataque a la cadena de suministro Mini Shai-Hulud por parte de TeamPCP:

Oleada 1: Compromiso del CI/CD de TanStack (11 de mayo de 2026)

El 11 de mayo de 2026 (19:20-19:26 UTC), un atacante publicó 84 versiones maliciosas en 42 paquetes @tanstack/* de npm en una ventana de 6 minutos. El ataque también afectó a paquetes de Mistral AI, UiPath, OpenSearch y otros, con más de 170 paquetes en total en npm y PyPI.

No se robaron credenciales de mantenedores. El atacante explotó la propia cadena de confianza del CI/CD mediante un ataque de 3 etapas:

  1. Explotación de pull_request_target — Un fork de GitHub desechable abrió un PR que ejecutaba código del atacante en el contexto de seguridad del repositorio base.
  2. Envenenamiento de caché de GitHub Actions — El código del fork envenenó la caché compartida de pnpm, que posteriormente infectó los flujos de trabajo de publicación legítimos.
  3. Extracción de tokens OIDC de la memoria del proceso — El código malicioso extrajo tokens de publicación de npm directamente de la memoria del runner de GitHub Actions, produciendo paquetes con atestados de procedencia SLSA Build Level 3 válidos.

Oleada 2: Toma de cuenta de npm "atool" (19 de mayo de 2026)

El 19 de mayo de 2026 (01:39-02:06 UTC), la cuenta comprometida de npm atool ([email protected]) publicó 637 versiones maliciosas en 314 paquetes en dos oleadas automatizadas. Los objetivos de alto impacto incluyen:

  • size-sensor (4.2M descargas/mes)
  • echarts-for-react (3.8M descargas/mes)
  • @antv/scale (2.2M descargas/mes)
  • timeago.js (1.15M descargas/mes)
  • 310+ paquetes adicionales @antv/* y otros

Esta oleada utilizó una carga útil basada en Bun (498KB index.js) activada mediante "preinstall": "bun run index.js", con una carga útil de segunda etapa oculta en commits impostores enviados al repositorio de GitHub antvis/G2 mediante la explotación del objeto compartido del fork.

Lo que hace el código malicioso (ambas oleadas)

Ambas oleadas utilizan la misma familia de herramientas "Mini Shai-Hulud":

  • Recolección de credenciales: Más de 80 variables de entorno, cadena completa de AWS (env → config → IMDSv2 → ECS → Secrets Manager), PATs de GitHub, tokens de npm, claves SSH, tokens K8s, tokens de Vault, gestores de contraseñas (1Password, Bitwarden, pass, gopass).
  • Persistencia: Demonios gh-token-monitor (Oleada 1) y kitty-monitor (Oleada 2) mediante LaunchAgent/systemd; hooks en .claude/settings.json y .vscode/tasks.json.
  • Exfiltración: Redes P2P (Oleada 1), API de Git Data de GitHub + HTTPS disfrazado como trazas de OpenTelemetry (Oleada 2).
  • Abuso de CI/CD: Inyección de flujos de trabajo volcando toJSON(secrets), intercambio de tokens OIDC de npm.
  • Interruptor de hombre muerto: rm -rf ~/ si el token de GitHub se revoca mientras el daemon está activo.
  • C2 de buzón muerto (Oleada 2): Consulta la API de búsqueda de commits de GitHub en busca de la palabra clave firedalazer, comandos firmados con RSA-PSS.

Lo que comprueba este script

Paquetes afectados

Oleada 1: TanStack (42 paquetes)

Solo se vieron afectados @tanstack/router* y @tanstack/start*. NO afectados: @tanstack/query*, @tanstack/table*, @tanstack/form*, @tanstack/virtual*, @tanstack/store.

Consulte el aviso completo para los 42 paquetes.

Oleada 2: Cuenta atool (314 paquetes)

Todos los paquetes publicados por el usuario de npm atool ([email protected]) recibieron versiones maliciosas el 19 de mayo de 2026. Los paquetes de alto impacto incluyen:

PaqueteDescargas mensuales
size-sensor4.2M
echarts-for-react3.8M
@antv/scale2.2M

Además de 310+ paquetes principalmente en el ámbito @antv/* (@antv/g2, @antv/g6, @antv/l7, @antv/s2, @antv/x6, @antv/f2, etc.), ai-figure, timeago-react, jest-canvas-mock, jest-date-mock y otros.

Consulte el informe de SafeDep para la lista completa.

Mitigación (si está comprometido)

CRÍTICO: Deshabilite el interruptor de hombre muerto ANTES de revocar cualquier token. El malware borra $HOME si los tokens se revocan mientras el daemon está activo.

  1. Mate los demonios de persistencia (gh-token-monitor Y kitty-monitor) y elimine los servicios de LaunchAgent/systemd.
  2. Elimine los archivos de persistencia (.claude/router_runtime.js, .vscode/setup.mjs, ~/.local/share/kitty/cat.py, /var/tmp/.gh_update_state, etc.)
  3. Borre node_modules y los archivos lock, reinstale con --ignore-scripts
  4. Rote TODAS las credenciales (npm, GitHub, AWS, GCP, claves SSH, tokens de Vault, tokens de gestores de contraseñas, etc.)
  5. Bloquee los dominios del atacante a nivel de DNS/cortafuegos (api.masscan.cloud, filev2.getsession.org, git-tanstack.com, t.m-kosche.com)

Anuncios oficiales y referencias

Oleada 1: TanStack (11 de mayo)

  • CVE-2026-45321 (CVSS 9.6 Crítico) — Registro CVE
  • GHSA-g7cv-rxg3-hmpx — Aviso de GitHub
  • Informe post-mortem de TanStack — tanstack.com/blog/npm-supply-chain-compromise-postmortem
  • Seguimiento de endurecimiento de TanStack — tanstack.com/blog/incident-followup
  • Issue de seguimiento de GitHub — TanStack/router#7383

Oleada 2: Toma de cuenta atool (19 de mayo)

  • Análisis de SafeDep — safedep.io/mini-shai-hulud-strikes-again-314-npm-packages-compromised

Informes de investigadores de seguridad

  • Socket.dev
  • Snyk
  • StepSecurity (descubridores originales)
  • Wiz
  • Orca Security
  • SecurityWeek

Indicaciones de endurecimiento para agentes de codificación de IA

Copie y pegue estas indicaciones en su agente de codificación de IA (Claude Code, Cursor, Cline/OpenClaw, Windsurf, Hermes, etc.) para endurecer su proyecto contra ataques a la cadena de suministro como este.

Indicación 1: Retraso de publicación en npm (cuarentena de nuevas versiones)

Endurece la configuración npm de este proyecto contra ataques a la cadena de suministro. Haz lo siguiente:

  1. Fija versiones exactas: Elimina todos los prefijos ^ y ~ de cada dependencia en package.json para que npm install nunca obtenga silenciosamente una versión recién publicada.

  2. Deshabilita los scripts postinstall por defecto: Añade ignore-scripts=true a .npmrc. Luego añade un script "preinstall" explícito en package.json que ejecute solo los scripts de ciclo de vida conocidos y seguros que este proyecto realmente necesite (si los hay).

  3. Exige instalaciones solo desde lockfile en CI: Asegúrate de que CI use npm ci (no npm install). Si hay un archivo de configuración de CI, verifícalo. Si no, indícalo como paso manual.

  4. Añade verificación de procedencia: Añade npm audit signatures como paso en el pipeline de CI y como hook pre-push de git.

Indicación 2: Endurecer la configuración del agente de IA

Audita y endurece la configuración del agente de codificación de IA de este proyecto contra ataques de inyección en la cadena de suministro (como la campaña TanStack/Mini Shai-Hulud que inyectó hooks maliciosos en .claude/settings.json y .vscode/tasks.json). Haz lo siguiente:

Claude Code (.claude/):

  1. Revisa .claude/settings.json y .claude/settings.local.json en busca de entradas hooks que ejecuten comandos de shell. Señala cualquier cosa que ejecute archivos .js, .mjs o .sh, especialmente desde dentro de .claude/, .vscode/ o node_modules/.
  2. Elimina cualquier hook que no puedas rastrear hasta un propósito legítimo y creado por el usuario.

Indicación 3: Endurecimiento de GitHub Actions

Audita y endurece la configuración de GitHub Actions en este repositorio contra ataques a la cadena de suministro de CI/CD. Haz lo siguiente:

  1. Elimina o refactoriza cualquier disparador pull_request_target — estos ejecutan código del flujo de trabajo en el contexto del repositorio base con acceso a secretos, incluso cuando se activan mediante un fork. Reemplázalos con pull_request + un flujo de trabajo separado con aprobación si es necesario.

  2. Fija todas las acciones de terceros a commits SHA completos (no etiquetas o ramas). Por ejemplo, reemplaza actions/checkout@v4 con actions/checkout@<sha-completo>. Añade un comentario con la etiqueta para legibilidad.

  3. Aplica permisos de mínimo privilegio a cada flujo de trabajo. Añade bloques permissions: explícitos. La mayoría de los flujos de trabajo solo necesitan contents: read. Los flujos de trabajo de publicación necesitan id-token: write — y nada más.

  4. Restringe el ámbito de la caché: Si usas actions/cache, asegúrate de que las claves de caché tengan ámbito por rama para evitar el envenenamiento entre ramas. Añade restore-keys con cuidado — no restaures cachés de ramas no confiables.

Licencia

MIT

Descargar herramienta
#ComprobaciónDescripción
1Interruptor de hombre muertoDemonios de persistencia: gh-token-monitor (Oleada 1), kitty-monitor (Oleada 2)
2Procesos maliciososNombres de procesos conocidos del atacante (ambas oleadas)
3Archivos de carga útilArchivos maliciosos conocidos por nombre y hash SHA-256 (4 hashes)
4Hooks de Claude CodeHooks inyectados en .claude/settings.json + heurística genérica de SessionStart
5Tareas de VS CodeTareas inyectadas en .vscode/tasks.json + heurística genérica de runOn: folderOpen
6GitHub ActionstoJSON(secrets) en cualquier flujo de trabajo + advertencia de pull_request_target
7Archivos lock de npmVersiones de paquetes comprometidos en archivos lock
8optionalDependencies@tanstack/setup y @antv/setup maliciosos + 4 SHAs de commits impostores
9Conexiones de redConexiones activas a infraestructura C2 (5 dominios/IPs)
10Caché DNSResolución previa de dominios del atacante (4 dominios)
11Ramas de GitPatrón de nombres de ramas del atacante con temática de Dune
12Scripts de ciclo de vidaHeurística: bun run en preinstall/postinstall (paquetes instalados)
13C2 de buzón muertoPalabra clave firedalazer y marcadores "Shai-Hulud" en el historial de git
14Dependencias de GitHubHeurística: dependencias github: fijadas a un SHA de commit en optionalDeps
PaqueteVersiones maliciosasPrimera versión segura
@tanstack/react-router1.169.5, 1.169.81.169.9
@tanstack/router-core1.169.5, 1.169.81.169.9
@tanstack/vue-router1.169.5, 1.169.81.169.9
@tanstack/solid-router1.169.5, 1.169.81.169.9
@tanstack/react-start1.167.68, 1.167.711.167.72
@tanstack/router-plugin1.167.38, 1.167.411.167.42
timeago.js
1.15M
  • Audite los registros del proveedor de nube para el 11-19 de mayo de 2026
  • Crea un script de política de actualización: Crea un scripts/safe-update.sh que:

    • Tome un nombre de paquete como argumento
    • Compruebe cuándo se publicó la última versión (npm view <pkg> time --json)
    • Se niegue a actualizar si la versión tiene menos de 3 días
    • Si es mayor de 3 días, ejecute npm install <pkg>@latest --save-exact
    • Imprima un resumen de lo que cambió
  • No modifiques ningún código de aplicación. Solo toca archivos de configuración, .npmrc, scripts de package.json y configuración de CI.

  • Añade una regla .gitignore para evitar que .claude/settings.local.json se añada (debe permanecer local).
  • VS Code (.vscode/):

    1. Revisa .vscode/tasks.json y .vscode/launch.json en busca de tareas que ejecuten scripts o binarios inesperados.
    2. Elimina cualquier entrada de tarea que haga referencia a archivos como setup.mjs, router_runtime.js u otros nombres que no pertenezcan a este proyecto.
    3. Revisa .vscode/extensions.json en busca de extensiones que no reconozcas.

    Cursor (.cursor/):

    1. Revisa .cursor/settings.json y cualquier archivo de reglas en busca de comandos o hooks inyectados.
    2. Mismas comprobaciones que VS Code arriba — Cursor hereda la configuración de .vscode/.

    General:

    1. Revisa si hay scripts preinstall, postinstall, prepare o prestart en package.json que no hayas escrito. Señala los sospechosos.
    2. Revisa .github/workflows/ en busca de cualquier flujo de trabajo que use pull_request_target — márcalo como riesgo de seguridad con un comentario explicando por qué.
    3. Asegúrate de que .gitignore excluya archivos de sesión del agente que podrían filtrar credenciales (.claude/projects/, .cursor/logs/, etc.).

    Informa lo que encontraste y lo que cambiaste. No modifiques código de aplicación.

  • Añade StepSecurity Harden-Runner como primer paso en cada trabajo: step-security/harden-runner@v2 con egress-policy: audit (o block si conoces tus endpoints permitidos).

  • Revisa secretos en los registros del flujo de trabajo: Asegúrate de que ningún paso del flujo de trabajo imprima ${{ secrets.* }} o ${{ toJSON(secrets) }} en stdout.

  • Informa todos los cambios. No modifiques código de aplicación.