Este incidente representa un sofisticado ataque a la cadena de suministro que encadenó tres vulnerabilidades conocidas en GitHub Actions para comprometer los paquetes npm de TanStack. La causa raíz principal fue la configuración insegura del workflow pull_request_target (bundle-size.yml), que permitía la ejecución de código de forks externos y, crucialmente, la escritura en la caché de GitHub Actions del repositorio base. Esta configuración violó el límite de confianza implícito entre los forks y el repositorio principal.

El ataque se desarrolló en varias etapas. Primero, el atacante utilizó el patrón 'Pwn Request' para inyectar código malicioso en el entorno de ejecución de un workflow pull_request_target. Este workflow, al usar actions/checkout@v6.0.2 con ref: refs/pull/${{ github.event.pull_request.number }}/merge y ejecutar pnpm nx run @benchmarks/bundle-size:build, permitió que el código del fork se ejecutara en el contexto del repositorio base. La clave aquí es que actions/cache@v5 no respeta las permissions: configuradas para el job, permitiendo que un job con permisos de solo lectura escriba en la caché. El atacante envenenó deliberadamente la caché de pnpm-store con un payload que sería restaurado por el workflow de release.yml en futuras ejecuciones en la rama main.

Una vez que la caché envenenada fue restaurada en el runner del workflow release.yml (disparado por un merge legítimo a main), el código malicioso se ejecutó. Este malware estaba diseñado para extraer tokens OIDC de la memoria del proceso Runner.Worker de GitHub Actions, aprovechando la declaración id-token: write del workflow. Con el token OIDC, el malware pudo autenticarse directamente con registry.npmjs.org y publicar versiones maliciosas de 42 paquetes, eludiendo por completo el paso de publicación legítimo del workflow. La detección fue externa, lo que subraya la falta de monitoreo interno sobre las publicaciones de paquetes.

Las salvaguardas fallaron debido a una combinación de factores: la falta de una auditoría de seguridad de los workflows pull_request_target, el uso de referencias flotantes (@v6.0.2, @main) para acciones de terceros que introducen riesgo de cadena de suministro, y la ausencia de un monitoreo proactivo de las publicaciones de npm. La política de npm de 'no unpublish si existen dependientes' también exacerbó el incidente al retrasar la eliminación de los tarballs maliciosos. Este incidente es un claro ejemplo de cómo la combinación de vulnerabilidades conocidas puede llevar a un compromiso significativo si no se aplican mitigaciones conscientes.