# Unha actualización de Dependabot publicou un° verme. 22 paquetes.

Published: 2026-09-17

Un bot abre unha solicitude de «pull». Un humano fusiónaa 24 minutos despois. 95 minutos despois diso, un verme publicou 110 versións maliciosas dos seus 22 paquetes npm, baixo o seu nome, cun token que atopou no seu CI.

Canonical: https://thedailydiff.dev/gl/video/2026-09-17-dependabot-tanstack/

## Que abrangue este vídeo

- Un bot, un humano, un verme
- Como pasou, por que npm o permitiu, quen ten a culpa
- Cronoloxía: a caché envelenada
- 21:48 — a actualización de Dependabot
- Por que funciona

## Capítulos

- 0:00 Un bot, un humano, un verme
- 0:20 Como pasou, por que npm o permitiu, quen ten a culpa
- 0:30 Cronoloxía: a caché envelenada
- 1:15 21:48 — a actualización de Dependabot
- 1:50 Por que funciona
- 2:20 git blame
- 2:45 Radio de explosión
- 3:00 Veredicto

## Transcrición traducida

Traducido da narración orixinal en inglés. O audio e os subtítulos dispoñibles son controlados por YouTube.

### Un bot, un humano, un verme

0:00 Un bot abre unha solicitude de extracción; un humano fúsioa vinte e catro minutos despois. Noventa e cinco minutos despois, un verme publicou cento dez versións dos seus paquetes, coma el. O análise post-mortem de TanStack ten as marcas de tempo iniciais, o mantedor secundario ten o resto, e Hacker News dálle mil cen puntos e un nome: Mini Shai-Hulud. Como acontece, por que npm o permite, quen ten a culpa.

### Como pasou, por que npm o permitiu, quen ten a culpa

0:21 Este é The Daily Diff, post-mortem. 11 de maio, pola mañá. Unha bifurcación renomeada abre unha solicitude de extracción contra TanStack Router. Pechase antes da hora, pero un fluxo de traballo de «benchmark» xa executou o seu código e

### Cronoloxía: a caché envelenada

0:33 gardou unha caché envelenada baixo a chave que usará o fluxo de traballo de «release». Dezanove e vinte. Unha fusión lexítima executa a versión. A caché volve, un binario le a memoria do «runner», toma o token de publicación e envía oitenta e catro versións a través de corenta e dous paquetes, con procedencia válida. As probas fallan. Publica igual. Dezanove corenta e seis, un investigador de StepSecurity presenta o problema; ás nove UTC todo está obsoleto e o aviso sae.

0:55 Obsoleto non é eliminado: npm rexeita despublicar calquera cousa con dependentes, polo que permanece instalable durante horas. Vinte e un corenta e oito. Nun proxecto de datos de aviación de nove estrelas, Dependabot abre a súa solicitude de extracción rutineira: actualizar o grupo de dependencias de desenvolvemento, trece actualizacións. Dúas son versións envelenadas de TanStack. Vinte e dous e doce: fusionado. O fluxo de traballo de publicación executa npm C-I co token en

### 21:48 — a actualización de Dependabot

1:15 alcance; un script de preparación leo, e ás vinte e dous e dezasete o verme publica coma el. Cinco versións de cada paquete ao que chega o token, mesmo un vello proxecto paralelo: un token clásico para todo. Cento dez versións en noventa e cinco minutos. Descúbreo por correo electrónico, despois da medianoite. Por que funciona. Un: npm install executa os scripts de ciclo de vida de estraños por defecto, e un script de preparación dunha dependencia git conta.

1:39 Dous: o verme quere unha cousa: un token que publique sen un segundo factor. Logo pregúntalle ao rexistro que máis posúe ese mantedor, e republica todo con el mesmo dentro. Tres: nada na cadea é unha persoa.

### Por que funciona

1:51 Un bot propón, un «pipeline» instala, e o verme devolve o favor: os seus ramos de «dead-drop» chámanse dependabot slash github-actions slash fremen. git blame. O modelo de instalación de npm, cincuenta e cinco por cento: os scripts execútanse na instalación, o obsoleto permanece instalable, existen tokens de «bypass» de dous factores. CI de TanStack, vinte e cinco: un fluxo de traballo de «pull request target» non auditado que executa código bifurcado con acceso de escritura á caché. O hábito de actualización, quince: trece actualizacións fusionadas en vinte e catro minutos, token na sala.

2:17 Dependabot, cinco: tan confiable que o verme viste o seu uniforme.

### git blame

2:20 Radio de explosión: corenta e dous paquetes TanStack. Vinte e dous «downstream», dun proxecto con nove estrelas. Máis de cento sesenta en todo o ecosistema unha vez que o verme chega a Mistral. Cada versión anterior levaba unha sinatura válida: construída polo oficial pipeline. Certo. Veredicto, post-mortem: SHIP IT. Ambos mantedores publican análises post-mortem con marca de tempo nun día; en tres, o «pipeline downstream» instala con ignore-scripts, divide a construción da publicación e elimina o token de longa duración.

### Radio de explosión

2:47 Os valores predeterminados de npm non se moveron. Luns: ignore-scripts na instalación, e o token de publicación fóra do traballo que o executa. Envíame o incidente do que aínda non se che permite falar, nos comentarios, ou en thedailydiff.dev. E esa é a diferenza de hoxe.

### Veredicto

3:00 Son Niko de Axrisi. Fusión responsable.

## Fontes

- [TanStack postmortem (Tanner Linsley, May 11, refined May 15)](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem) — tanstack.com
- [TanStack "Hardening TanStack After the npm Compromise" (May 12)](https://tanstack.com/blog/incident-followup) — tanstack.com
- [TanStack/router#7383 — the StepSecurity detection issue](https://github.com/TanStack/router/issues/7383) — github.com
- [Downstream incident post, @squawk/\* (May 12)](https://github.com/neilcochran/squawk/discussions/251) — github.com
- [Downstream hardening post (May 14)](https://github.com/neilcochran/squawk/discussions/264) — github.com
- [The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)](https://github.com/neilcochran/squawk/pull/246) — github.com
- [@tan\_stack advisory post, 21:19 UTC](https://x.com/tan_stack/status/2053948103766716630) — x.com
- [StepSecurity — worm internals, bypass\_2fa search, Dependabot-style branch names](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem) — www.stepsecurity.io
- [Socket](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack) — socket.dev
- [Aikido — "over 160 packages, including Mistral"](https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised) — www.aikido.dev
- [Hacker News (1,097 points)](https://news.ycombinator.com/item?id=48100706) — news.ycombinator.com
