
Escáner para el gusano de cadena de suministro Mini Shai-Hulud en npm/PyPI (NHS CC-4781 · CVE-2026-45321). Detecta la persistencia de gh-token-monitor, artefactos de payload y commits de atacantes. Python, Bash, PowerShell.
Un escáner gratuito y offline para el gusano de la cadena de suministro de npm/PyPI que actualmente está devorando paquetes importantes. Creado por el equipo de Intrudify. Sin registro, sin telemetría, funciona completamente offline.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
Si has ejecutado npm install o pip install en las últimas semanas, esto es para ti.
Especialmente si has tocado @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, o los paquetes de PyPI litellm, mistralai, guardrails-ai, lightning o telnyx. Esos son los espacios de nombres confirmados como envenenados. 149 paquetes en total, más de 400 versiones maliciosas rastreadas hasta ahora.
Mini Shai-Hulud es el gusano que está causando el daño. Roba tus credenciales de npm y GitHub, planta persistencia en macOS, Linux y Windows, y (la parte que la mayoría pasa por alto) deja detrás un token con trampa. Si lo revocas desde la máquina infectada, activa rm -rf ~/. Tu directorio personal, eliminado. El orden de limpieza importa.
Este escáner comprueba los 19 indicadores de compromiso conocidos en paquetes, lockfiles, mecanismos de persistencia, hashes de payloads, tráfico C2, historial de git y entornos CI. Solo lee. Nunca escribe, elimina ni se comunica con el exterior.
Tres scripts, un objetivo: Python, Bash, PowerShell. Elige el que se adapte a tu stack.
Intrudify es el primer pentester de IA completamente autónomo de Europa para aplicaciones web. La propuesta es simple: el mismo resultado que un equipo de pentest humano de 30.000 $, entregado en horas en lugar de semanas, con un informe listo para auditoría y guía de remediación paso a paso para NIS2, SOC2 e ISO27001. Si publicas código y no tienes un equipo de seguridad, ese es el vacío que cubrimos.
Este escáner es una pieza de eso. Es gratuito porque los gusanos de la cadena de suministro se mueven más rápido que los ciclos de adquisición. Un desarrollador mirando un feed de CVE a las 23:00 no necesita una llamada de ventas. Necesita una herramienta que se ejecute en 30 segundos y le diga si está comprometido.
Para compromisos activos (secuestros de pipelines CI/CD, abuso de tokens OIDC de GitHub Actions, respuesta a incidentes en la cadena de suministro de npm/PyPI), contacta directamente: [email protected]
Si has instalado un paquete de npm o PyPI en las últimas semanas, especialmente algo de @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, o los paquetes de PyPI litellm, mistralai, guardrails-ai, lightning o telnyx, tu máquina puede estar comprometida.
El gusano Mini Shai-Hulud roba credenciales, planta persistencia en macOS, Linux y Windows, y puede borrar tu directorio personal si gestionas la limpieza en el orden incorrecto.
Este escáner comprueba los 19 indicadores conocidos. Solo lee. Nunca escribe, elimina ni envía nada fuera de tu máquina.
El gusano planta un token de npm con trampa. Revocarlo desde la máquina infectada activa rm -rf ~/. El orden importa.
Si el escáner encuentra hallazgos CRÍTICOS, haz esto en orden:
| Estás en... | Usa este |
|---|
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
# Python (cualquier SO)
python3 scan_cc4781.py --deep
El flag --deep / -Deep recurre en todos los node_modules bajo el directorio actual. Recomendado si tienes un monorepo o múltiples proyectos.
Si PowerShell bloquea el script:
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULTADO: 0 CRÍTICOS / 0 ALTOS → estás limpio
RESULTADO: X CRÍTICOS / Y ALTOS → detente y sigue los pasos anteriores antes de hacer cualquier otra cosa
CRÍTICO = indicador de compromiso confirmado. Actúa de inmediato.
ALTO = sospechoso. Investiga. Algunos hallazgos ALTOS son falsos positivos esperados (ver más abajo).
CC-4781 / Escáner de ataque a la cadena de suministro Mini Shai-Hulud
Host: tu-nombre-de-host SO: tu-so
Comprobando 149 paquetes npm (más de 400 versiones maliciosas), 5 paquetes PyPI
[OK] proceso gh-token-monitor no detectado
[ALTO] artefacto-payload: sysmon.py -> .../coverage/sysmon.py <- falso positivo: paquete Python coverage
[ALTO] artefacto-payload: execution.js -> .../n8n/.../execution.js <- falso positivo: n8n
[OK] git-tanstack.com no resuelve
[OK] Sin referencias maliciosas github: en optionalDependencies
[OK] Sin commits de exfiltración del atacante en el registro de git
RESULTADO: 0 CRÍTICOS / 4 ALTOS
Los hallazgos ALTOS de sysmon.py y execution.js son falsos positivos: los nombres de archivo coinciden con los nombres de los payloads del gusano, pero los hashes SHA-256 no. CRÍTICO solo se activa cuando el hash coincide con un payload confirmado como malicioso.
Formato de salida JSON: { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
Importante: que npm audit signatures pase no significa que estás a salvo. Mini Shai-Hulud es el primer ataque documentado que genera provenance SLSA Build Level 3 válida mediante un secuestro del pipeline OIDC de GitHub Actions. Las firmas verifican la procedencia de la compilación, no que el propio pipeline de compilación estuviera limpio.
El gusano usa ofuscación en tres capas: obfuscator.io, luego un cifrado de sustitución Fisher-Yates (PBKDF2-SHA256, 200.000 iteraciones) y luego AES-256-GCM. Exfiltra credenciales a través del CDN del Protocolo Session, buzones muertos (dead-drops) de GraphQL de GitHub, un canister de la blockchain ICP y esteganografía WAV.
La persistencia se planta como LaunchAgent de macOS, unidad systemd de Linux, Tarea programada de Windows o clave HKCU Run, hook SessionStart de Claude Code, tarea folderOpen de VS Code y un archivo de arranque Python .pth. En runners CI comprometidos planta un DaemonSet de Kubernetes.
El RANSOM TOKEN (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) está emparejado con un demonio gh-token-monitor que consulta api.github.com/user cada 60 segundos. Una respuesta 40x activa rm -rf ~/ en Linux/macOS o el equivalente en Windows.
Agregado de GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io (a fecha de 2026-05-13).
Reglas de detección: Sigma 5299fadf-f228-4526-8274-251db1960be9 (Ejecución maliciosa de Shai-Hulud mediante Bun), firma ATP de Palo Alto 87120.
Intrudify se especializa en respuesta a incidentes en la cadena de suministro de npm/PyPI, secuestros de pipelines CI/CD y abuso de tokens OIDC de GitHub Actions.
Contacto: [email protected] · intrudify.com
| macOS o Linux | scan_cc4781.sh (o scan_cc4781.py si prefieres Python) |
| Windows | scan_cc4781.ps1 (o scan_cc4781.py con Python nativo) |
| CI / Docker | scan_cc4781.py o scan_cc4781.sh |
| Flag | Bash / Python | PowerShell | Qué hace |
|---|
| Escaneo profundo | --deep | -Deep | Recurre todos los node_modules bajo el directorio actual |
| Directorio objetivo | --npm-dir /ruta | -NpmDir C:\ruta | Escanea una carpeta node_modules específica |
| Salida JSON | --json | -Json | Salida legible por máquina para SIEM / SOAR |
| # | Categoría | Qué busca |
|---|
| 1 | Versiones npm | 149 paquetes, más de 400 versiones exactas confirmadas como maliciosas |
| 2 | Lockfiles | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | Persistencia | LaunchAgent de macOS, systemd de Linux, Tarea programada de Windows + clave HKCU Run |
| 5 | Persistencia | Hook SessionStart de Claude Code, tarea folderOpen de VS Code |
| 6 | Archivos payload | 13 nombres de archivo + SHA-256 contra 11 hashes conocidos como maliciosos |
| 7 | Hosts C2 | 11 dominios en /etc/hosts, variables de entorno de proxy, WinHTTP |
| 8 | DNS C2 | Resuelve los 11 dominios C2 |
| 9 | Conexiones C2 | TCP activo hacia 5 IPs C2 rastreadas |
| 10 | package.json | Inyección de optionalDependencies github:tanstack/router |
| 11 | package.json | Inyección de prepare: bun run tanstack_runner.js |
| 12 | Workflows | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Registro git | Commits de exfiltración del atacante ([email protected]) |
| 14 | Ramas git | Ramas del gusano con temática de Dune, typosquat dependabout/ |
| 15 | Tokens npm | Detección de RANSOM TOKEN |
| 16 | Historial de shell | Dominios C2, IPs, nombres de archivo de payloads |
| 17 | Entorno CI | Fuga de credenciales en GitHub Actions |
| 18 | Remotos git | Cuentas del atacante y dominios C2 |
| 19 | Persistencia avanzada | Disfraz de servicio sysmon/pgmon, litellm_init.pth, DaemonSet de Kubernetes, esteganografía WAV |
| Oleada | Fecha | Paquetes | Publicador |
|---|
| TanStack | Mayo 2026 | 43 paquetes @tanstack/* | voicproducoes |
| UiPath / JFrog | Mayo 2026 | 66 paquetes @uipath/* | voicproducoes / zblgg |
| SAP @cap-js | Abril 2026 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | Feb--Abr 2026 | litellm, telnyx, lightning, mistralai, guardrails-ai | varios |