El 11 de mayo de 2026 se publicaron en el registro de npm 84 versiones maliciosas de 42 paquetes @tanstack/*, en el marco de un ataque a la cadena de suministro rastreado como CVE-2026-45321, con una puntuación CVSS de 9.6 (crítica). El código malicioso robaba credenciales de las máquinas de los desarrolladores, incluidos tokens de GitHub, claves SSH y credenciales en la nube. Según CrowdSec, precisamente este ataque provocó la compromisión del portátil de un ex empleado de la empresa, a través de cuya cuenta se copiaron alrededor de 170 repositorios privados de GitHub el 22 de mayo. Un archivo comprimido con el código fuente y datos personales apareció en un foro en línea el 16 de septiembre. El incidente también afectó a OpenAI y Mistral AI.
Mecanismo del ataque a la cadena de suministro de TanStack
Según el aviso de seguridad oficial de TanStack, las 84 versiones maliciosas se publicaron en una ventana de seis minutos, entre las 19:20 y las 19:26 UTC del 11 de mayo de 2026. Cada uno de los 42 paquetes afectados recibió exactamente dos versiones maliciosas. Por ejemplo, para @tanstack/react-router fueron las versiones 1.169.5 y 1.169.8, y la versión corregida fue la 1.169.9.
La instalación de cualquiera de las versiones infectadas ejecutaba un archivo ofuscado router_init.js (~2,3 MB), que recopilaba y enviaba a servidores externos un amplio conjunto de credenciales:
- Credenciales de AWS, GCP, Kubernetes, HashiCorp Vault
- Tokens de npm y GitHub
- Claves SSH
Los datos se exfiltraban a través de los dominios filev2.getsession.org, seed1.getsession.org, seed2.getsession.org y seed3.getsession.org. Las versiones maliciosas contenían un indicador característico: la dependencia opcional @tanstack/setup, que apuntaba a la referencia de Git maliciosa github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c.
La vulnerabilidad se ha clasificado como CWE-506 (código malicioso incrustado). El aviso de TanStack indica explícitamente que los entornos de desarrollo y CI/CD que instalaron la versión afectada el 11 de mayo mediante npm, pnpm o yarn deben considerarse comprometidos.
Incidente de CrowdSec: cronología y alcance
Según los datos de CrowdSec publicados el 18 de septiembre, la cadena de acontecimientos fue la siguiente. Un ex empleado de la empresa abandonó la organización, pero se mantuvo su acceso a GitHub para finalizar el trabajo pendiente. Su portátil, según informa la empresa, fue comprometido a través de un paquete malicioso de TanStack. Once días después de la publicación de las versiones maliciosas, el 22 de mayo, se copiaron alrededor de 170 repositorios privados utilizando un token OAuth de GitHub desde la cuenta del ex empleado.
CrowdSec eliminó la cuenta de su organización en GitHub el 25 de mayo, tres días después de la copia, pero varios meses antes de tener conocimiento de la filtración. La empresa indica que el token no dejó rastro en los registros de GitHub a los que tiene acceso y que ya no existía en el momento de descubrir la filtración. Según CrowdSec, el servicio de soporte de GitHub rastreó posteriormente el historial del token y confirmó la conexión con el ataque a TanStack.
Es importante señalar: la atribución de la copia de los repositorios específicamente al token comprometido del ex empleado se basa exclusivamente en las declaraciones de CrowdSec y no está confirmada por fuentes independientes.
Contenido de la filtración
Según CrowdSec, el archivo comprimido que apareció en el foro en línea el 16 de septiembre contenía:
- Código fuente de la consola web, scripts y modelos de procesamiento de datos, scripts de automatización
- El algoritmo de consenso que determina qué direcciones IP entran en las listas de bloqueo, incluidos umbrales previamente no públicos
- Direcciones de correo electrónico de 83 usuarios de CrowdSec
- Nombres, direcciones de correo electrónico y contexto de inversión de 51 potenciales inversores (datos de 2020)
CrowdSec afirma que la infraestructura y las bases de datos de la empresa no se vieron afectadas y que el código no fue modificado. Según la empresa, la única credencial activa en la filtración daba acceso únicamente al servicio de notificaciones AWS SNS con permiso de publicación en un único tema. Un intento de usarla se registró el 17 de agosto, un mes antes de la publicación del archivo.
Contradicciones en las declaraciones de CrowdSec
El informe de CrowdSec del 18 de septiembre amplió considerablemente la descripción de las consecuencias en comparación con la declaración inicial del 17 de septiembre. En la primera declaración, la empresa afirmaba: «No se han revelado datos de clientes, inicios de sesión/contraseñas, nombres, organizaciones ni nada más», y las consecuencias se limitaban únicamente a la propia empresa. Sin embargo, al día siguiente el informe ya recogía la filtración de datos de 83 usuarios y 51 inversores. La primera declaración también indicaba que el componente malicioso de TanStack se había descubierto en el código de CrowdSec, mientras que el informe del 18 de septiembre señaló que no se encontró ninguna versión maliciosa de TanStack en el código de la empresa y que la fuente fue la cuenta del ex empleado.
Consecuencias para otras empresas
El ataque a TanStack afectó no solo a CrowdSec. Según la declaración de OpenAI, se comprometieron dos dispositivos de empleados, lo que llevó a un acceso no autorizado a un conjunto limitado de repositorios internos de código fuente. OpenAI informó de que no encontró indicios de compromiso de datos de clientes ni de propiedad intelectual, ni de modificación del software publicado. Ya hemos escrito sobre otros incidentes con participación de OpenAI. Mistral AI también informó de la compromisión de un dispositivo de desarrollador en relación con este ataque.
El incidente demuestra que un ataque a la cadena de suministro tiene dos grupos distintos de víctimas. El primero es cualquier entorno de desarrollo o CI/CD que haya instalado una versión maliciosa del paquete de TanStack: para ellos es necesaria una investigación completa del host y la rotación de todas las credenciales accesibles. El segundo lo forman organizaciones como CrowdSec, cuyos recursos se vieron comprometidos mediante tokens robados de empleados.
Recomendaciones
Para desarrolladores y equipos de DevOps que utilicen paquetes @tanstack/*:
- Compruebe las dependencias: en los manifiestos de versiones fijadas de @tanstack/* busque la dependencia opcional
@tanstack/setupy el archivorouter_init.jsen la raíz del paquete; son indicadores de compromiso - Actualice los paquetes a las versiones corregidas que se indican en el aviso de seguridad de TanStack, y reinstale las dependencias a partir de un lock-file limpio
- Rote todas las credenciales accesibles desde las máquinas afectadas; la prioridad es precisamente la rotación, y no solo la eliminación del paquete, ya que la dependencia maliciosa pudo haberse instalado y eliminado sin dejar rastro en
node_modules - Revise los registros de auditoría en la nube (AWS CloudTrail, GCP Audit Logs) en busca de accesos no autorizados mediante credenciales robadas
- Compruebe los dominios de exfiltración en los registros de red:
filev2.getsession.org,seed1-3.getsession.org
Para las organizaciones en general, el incidente de CrowdSec subraya la importancia crítica de revocar de inmediato el acceso de los empleados que abandonan la empresa a todos los sistemas sin excepción, así como la necesidad del uso obligatorio de soluciones de protección de endpoints en las máquinas de los desarrolladores. CrowdSec reconoció que en el momento del incidente no exigía la instalación de dicho software e introdujo este requisito tras lo ocurrido.
El ataque CVE-2026-45321 contra la cadena de suministro de TanStack es un caso confirmado de explotación en condiciones reales con una puntuación CVSS 9.6 crítica. Todos los equipos que trabajaron con paquetes @tanstack/* el 11 de mayo de 2026 deben comprobar inmediatamente sus entornos en busca de indicadores de compromiso, rotar las credenciales y actualizar los paquetes a las versiones corregidas. Retrasar la rotación de las credenciales crea una ventana para ataques similares a los que sufrieron CrowdSec y OpenAI.