Cinco registries. Ocho fases. Treinta y tres días. Un solo grupo.

TeamPCP — también conocidos como PCPcat, ShellForce, DeadCatx3, CipherForce, Persy_PCP — encadenó ataques contra GitHub Actions, npm, Docker Hub, PyPI y OpenVSX en una campaña que todavía no terminó. Comprometieron escáneres de vulnerabilidades, herramientas de seguridad de supply chain, gateways de IA, paquetes de telefonía, y — mientras escribíamos esto — la librería HTTP más usada del planeta. Luego pivotearon a ransomware.

La tesis cabe en una línea: la industria de seguridad de supply chain no puede proteger su propio supply chain.

No lo decimos nosotros. Lo dicen ellos, desde su canal de Telegram con más de 700 miembros:

"These companies were made to protect your supply chains and can't even protect their own."

Esto no es un artículo sobre LiteLLM — ese ya lo escribimos. Esto es el mapa completo de la mayor campaña de supply chain en cascada documentada en 2026.


Cien millones de razones

[Este desarrollo ocurrió durante la escritura de este artículo.]

axios@1.14.1 — más de cien millones de descargas semanales, presente en el 80% de cloud environments según Wiz — apareció el 30 de marzo con una dependencia que no existía veinticuatro horas antes: plain-crypto-js@4.2.1.

No una versión — dos. También axios@0.30.4. El atacante comprometió la cuenta npm de jasonsaayman, el maintainer principal de axios, cambió el email registrado a una dirección de Proton Mail (ifstap@proton.me), y publicó ambas versiones vía CLI. La dependencia inyectada — plain-crypto-js — se atribuía falsamente a Evan Vosberg (el autor real de crypto-js) y apuntaba al repo legítimo de brix/crypto-js. Typosquatting impecable.

El postinstall script desplegaba un RAT cross-platform completo en quince segundos: macOS vía shell, Windows vía PowerShell, Linux vía bash. Cosechaba credenciales, llaves SSH, tokens de nube. Se autodestruía después de ejecución. Socket documentó que el payload se descargaba desde un servidor externo y se ejecutaba en memoria.

Las versiones maliciosas fueron removidas por npm a las 03:29 UTC. Wiz observó ejecución en el 3% de los ambientes afectados — lo que, con el 80% de presencia en cloud environments, es una superficie de ataque masiva. The Hacker News, Hackread, y CyberInsider cubrieron el incidente como una de las mayores brechas de supply chain del año.

La atribución a TeamPCP no está confirmada. Ningún vendor lo ha vinculado formalmente al momento de publicación. Pero el patrón — maintainer hijacking, postinstall scripts, timing tres días después de Telnyx — es idéntico al MO de la campaña. CanisterWorm enumeraba automáticamente todos los paquetes de cada maintainer comprometido para republicarlos con payload. Si el maintainer de axios fue víctima en algún punto entre el 19 y el 27 de marzo, su token npm fue robado. Y con ese token, publicar dos versiones envenenadas es una operación trivial.

Confirmado o no, axios ya es el incidente de supply chain más grande de 2026 por superficie de impacto. De 3.4M descargas diarias (LiteLLM) a 100M semanales (axios). La escalación no es lineal — es exponencial.


La campaña TeamPCP

Todo empezó con un gusano de nube. Entre diciembre de 2025 y febrero de 2026, TeamPCP comprometió más de 60,000 servidores vía Docker expuesto, Kubernetes sin auth, Ray abierto, Redis sin password. No era sofisticado. No necesitaba serlo. Fue el examen de ingreso.

El 19 de marzo, la graduación. TeamPCP reescribió 76 de 77 tags de aquasecurity/trivy-action — el escáner de vulnerabilidades que corre en CI/CD en todo el ecosistema. Un PAT robado del bot hackerbot-claw vía pull_request_target. CVE-2026-33634, CVSS 9.4, CISA lo añadió al KEV. CrowdStrike lo detectó primero. GitGuardian verificó 474 repos públicos comprometidos — lower bound, excluye privados.

La paradoja: las organizaciones más diligentes — las que escaneaban cada build — tuvieron la mayor exposición. Como lo tituló SANS Institute: "When the Security Scanner Became the Weapon."

Desde ahí, la cascada:

20 marzo — npm. CanisterWorm infectó 66+ paquetes con un gusano auto-propagante. C2 vía canisters de Internet Computer Protocol — blockchain como servidor de comando y control. Descentralizado, inmutable, imposible de tumbar.

22 marzo — Docker Hub. Imágenes maliciosas de Trivy v0.69.4 a v0.69.6. 44 repos de GitHub defaceados. Las imágenes robaban credenciales en silencio. El defacement era ruido.

23 marzo — Checkmarx. Todos los tags de kics-github-action comprometidos. Una empresa que vende seguridad de supply chain. Sysdig confirmó payload idéntico al de Trivy. Su respuesta: "no tenemos conocimiento de impacto." Es como si la empresa de alarmas le hubiera dado las llaves a los ladrones.

24 marzo — LiteLLM. Credenciales PyPI del CEO robadas vía Trivy comprometido. Persistencia .pth — se ejecuta en cada proceso Python sin import. Live por tres horas, 47,000 descargas. Wiz reporta LiteLLM en 36% de cloud environments. El mundo se enteró por una fork bomb accidental. Cobertura completa acá.

27 marzo — Telnyx. Esteganografía en WAV. Cada frame de 16 bytes: 8 de payload XOR + 8 de llave. Persistencia en Windows. La sofisticación evolucionó en cada fase.

28 marzo — Ransomware. Partnership con LAPSUS$ vía Vect ransomware. Databricks investigando. ~300GB de credenciales comprimidas. Mandiant estima 1,000 a 10,000 entornos SaaS comprometidos.


La paradoja del escáner

¿Por qué empezar por herramientas de seguridad? Porque corren con privilegios elevados por diseño — necesitan leer código, dependencias, secretos de CI. Porque son trusted por default. Porque están en cada pipeline. Porque tienen acceso a todos los secretos como requisito funcional. Y porque nadie las escanea a ellas.

Un PAT robado → 76 tags → 474+ repos → tokens de PyPI, npm, Docker Hub → 1,705 paquetes downstream → millones de usuarios. Noelle Murata lo destiló: "outsourcing your root access to anyone who can phish a single package maintainer."

Dan Lorenc, CEO de Chainguard, llamó el diseño de tags mutables en GitHub Actions "plain irresponsible." Tags sin log de transparencia, sin firma criptográfica. Un git push -f y el código descargado es otro. Nadie pinnea a SHA. La conveniencia gana. Siempre gana.

Y hay algo que hace el C2 de esta campaña especialmente significativo. El fundador de paila.news fue target directo de un ataque con el mismo patrón conceptual — blockchain como dead drop de C2 — pero ejecutado por Lazarus Group (DPRK) usando TRON en vez de ICP. Transacciones de 1 sun al burn address con payloads cifrados, llaves XOR desde BSC. Detectado antes de ejecución. Un grupo criminal y un estado-nación llegaron independientemente a la misma solución arquitectónica. No es coincidencia. Es selección natural.


El loop no se cerró

La campaña sigue activa. Los canisters de ICP siguen online. Los backdoors pollan C2 cada cinco a cincuenta minutos. Los 300GB de credenciales son una bomba de tiempo — no todas fueron rotadas, no todas van a serlo. Algunas organizaciones ni saben que fueron comprometidas.

Trivy escanea vulnerabilidades. Checkmarx protege supply chains. LiteLLM centraliza llaves de IA. axios es la librería HTTP de cada proyecto JavaScript. Las herramientas que existen para protegerte — y las que usas para construir — fueron el vector de ataque. Y ahora mismo, en algún pipeline que nadie ha auditado, un tag mutable apunta a un commit que nadie verificó.

El loop no se cerró.

Se expandió.