Fecha de publicación: Vie, 29/05/2026 - 10:46

Alerta de seguridad

Nivel de peligrosidad: Crítico

Descripción

La vulnerabilidad, identificada formalmente como CVE-2026-45321 (registrada técnicamente como CWE-506 de código malicioso embebido) , consiste en una falla crítica de diseño y límites de confianza en la configuración de integración continua (CI/CD) de GitHub Actions del monorrepo TanStack/router. Los atacantes explotaron un encadenamiento de tres debilidades técnicas: una configuración permisiva del disparador pull_request_target que ejecutaba código de bifurcaciones externas sin aprobación manual, un envenenamiento de caché entre límites de confianza (actions/cache@v5) que inyectó dependencias corruptas en el espacio compartido de producción, y la extracción en memoria del token OpenID Connect (OIDC) del proceso del runner de GitHub Actions (Runner.Worker). Como consecuencia, el atacante logró publicar 84 versiones envenenadas de 42 paquetes legítimos portando firmas y procedencia criptográfica SLSA Nivel 3 válidas. Al instalarse en los clientes, npm procesa una dependencia opcional falsa vinculada a un commit huérfano de Git que ejecuta silenciosamente un script preinstalador (router_init.js). El malware roba secretos del sistema (AWS, GCP, tokens de GitHub, llaves SSH) exfiltrándolos vía la red peer-to-peer cifrada de Session, y se autopropaga buscando otros repositorios de software en los que el usuario comprometido posea permisos de publicación.

Recursos afectados

  • Un total de 42 paquetes pertenecientes al ecosistema @tanstack/* (principalmente de las familias de componentes y adaptadores de Router y Start, tales como @tanstack/react-router, @tanstack/solid-router, @tanstack/vue-router, entre otros) de forma exclusiva en sus versiones envenenadas publicadas el 11 de mayo de 2026 (por ejemplo, versiones = 1.169.5 y = 1.169.8 de los paquetes de enrutamiento principal).
  • Servidores de integración continua, entornos de prueba y estaciones de trabajo locales que descargaron e instalaron las dependencias comprometidas durante la ventana de exposición.

Solución/Mitigación

Se recomienda actualizar de manera inmediata todos los paquetes @tanstack/* afectados a sus versiones limpias de parche (versión 1.169.9 o superior). Asimismo, se debe purgar el entorno local de desarrollo eliminando node_modules y lockfiles, forzando la reinstalación con bloqueo explícito de scripts de ciclo de vida :rm -rf node_modules package-lock.json pnpm-lock.yaml yarn.lock && npm install --ignore-scripts

Indicadores de compromiso

Al tratarse de una vulnerabilidad de pipeline y cadena de suministro de paquetes, los indicadores de compromiso técnicos y genéricos a auditar son:

  • Ejecuciones o re-ejecuciones inesperadas de flujos de trabajo de lanzamiento (release.yml) o compilaciones que hayan restaurado o guardado cachés sospechosas (pnpm-store) creadas por flujos de pull requests de colaboradores externos.
  • Presencia de dependencias opcionales inusuales o llamadas directas a URLs de Git (github:...) apuntando a commits huérfanos o bifurcaciones de terceros no documentadas dentro de los archivos package.json locales o del árbol de dependencias.
  • Peticiones de red salientes inusuales originadas por procesos de compilación o instalación de dependencias (node, npm, pnpm o procesos secundarios) dirigidas hacia endpoints externos de red ajenos al registro de paquetes oficial inmediatamente después de ejecutar la resolución de paquetes.
  • Detección en las bitácoras del runner de la ejecución de runtimes o motores de ejecución no estándar (como llamadas a procesos de compilación o preparación alternativos) durante la instalación de dependencias.

Recomendaciones

  • Auditar minuciosamente el historial de flujos de trabajo del runner de compilación y las bitácoras de los desarrolladores para identificar posibles instalaciones que coincidan con la ventana de compromiso.
  • Utilizar la API de GitHub o la consola de administración para purgar e invalidar todas las cachés existentes asociadas a repositorios que configuren flujos de trabajo con activadores vulnerables.
  • En caso de confirmar que un runner o terminal local instaló dependencias envenenadas bajo esta vulnerabilidad, se debe asumir que cualquier secreto expuesto o en memoria del runner ha sido comprometido. Se debe proceder con la rotación integral de tokens de npm, secretos de GitHub, credenciales de nube (AWS, GCP), variables de entorno y llaves SSH de acceso.

Referencias