# Një Dependabot bump publikoi një krimb. 22 paketa.

Published: 2026-09-17

Një bot hap një kërkesë tërheqjeje. Një njeri e bashkon atë 24 minuta më vonë. 95 minuta pas kësaj, një krimb ka publikuar 110 versione keqdashëse të 22 paketave të tij npm, nën emrin e tij, me një token që gjeti në CI-në e tij.

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

## Çfarë mbulon kjo video

- Një bot, një njeri, një krimb
- Si ndodhi, pse e lejoi npm, kush merr fajin
- Afati kohor: cache-i i helmuar
- 21:48 — the Dependabot bump
- Pse funksionon

## Kapitujt

- 0:00 Një bot, një njeri, një krimb
- 0:20 Si ndodhi, pse e lejoi npm, kush merr fajin
- 0:30 Afati kohor: cache-i i helmuar
- 1:15 21:48 — the Dependabot bump
- 1:50 Pse funksionon
- 2:20 git blame
- 2:45 Rrezja e shpërthimit
- 3:00 Vendimi

## Transkript i përkthyer

Përkthyer nga tregimi origjinal në anglisht. Audio dhe titrat e disponueshme kontrollohen nga YouTube.

### Një bot, një njeri, një krimb

0:00 Një bot hap një kërkesë tërheqjeje; një njeri e bashkon atë njëzet e katër minuta më vonë. Nëntëdhjetë e pesë minuta më vonë, një krimb ka publikuar njëqind e dhjetë versione të tij paketa, si ai. Postmortem i TanStack ka kohën e origjinës, mirëmbajtësi i rrjedhës së poshtme ka pjesën tjetër, dhe Hacker News i jep njëmijë e njëqind pikë dhe një emër: Mini Shai-Hulud. Si ndodh, pse e lejon npm, kush merr fajin.

### Si ndodhi, pse e lejoi npm, kush merr fajin

0:21 Ky është The Daily Diff, postmortem. 11 maj, mëngjes. Një fork i riemërtuar hap një kërkesë tërheqjeje kundër TanStack Router. Mbyllet brenda orës, por një fluks pune benchmark ka ekzekutuar tashmë kodin e tij dhe

### Afati kohor: cache-i i helmuar

0:33 ka ruajtur një cache të helmuar nën çelësin që do të përdorë fluksi i punës së lëshimit. Nëntëmbëdhjetë-njëzet. Një bashkim legjitim ekzekuton lëshimin. Cache-i kthehet, një binar lexon memorien e ekzekutuesit, ngre tokenin e publikimit dhe dërgon tetëdhjetë e katër versione në dyzet e dy paketa, me prejardhje të vlefshme. Testet dështojnë. Publikon gjithsesi. Nëntëmbëdhjetë e dyzet e gjashtë, një studiues i StepSecurity paraqet çështjen; nga ora nëntë UTC gjithçka është e vjetëruar dhe këshilla është jashtë.

0:55 E vjetëruar nuk do të thotë e zhdukur: npm refuzon të çpublikojë çdo gjë me varësi, kështu që mbetet e instalueshme për orë të tëra. Njëzet e një e dyzet e tetë. Në një projekt me nëntë yje të të dhënave të aviacionit, Dependabot hap kërkesën e tij rutinë tërheqjeje: bump dev-dependencies group, trembëdhjetë përditësime. Dy janë versione të helmuara të TanStack. Njëzet e dy e dymbëdhjetë: bashkuar. Fluksi i punës së publikimit ekzekuton npm C-I me tokenin në

### 21:48 — the Dependabot bump

1:15 fushë; një skript përgatitjeje e lexon atë, dhe në njëzet e dy e shtatëmbëdhjetë krimbi publikon si ai. Pesë versione të çdo pakete që arrin tokeni, edhe një projekt i vjetër anësor: një token klasik për gjithçka. Njëqind e dhjetë versione në nëntëdhjetë e pesë minuta. Ai e zbulon me email, pas mesnate. Pse funksionon. Një: npm install ekzekuton skriptet e ciklit të jetës së të panjohurve si parazgjedhje, dhe skripti i përgatitjes së një varësie git llogaritet.

1:39 Dy: krimbi dëshiron një gjë: një token që publikon pa një faktor të dytë. Pastaj ai pyet regjistrin se çfarë tjetër zotëron ai mirëmbajtës, dhe ripublikon të gjitha me veten brenda. Tre: asgjë në zinxhir nuk është person.

### Pse funksionon

1:51 Një bot propozon, një tubacion instalon, dhe krimbi kthen favorin: degët e tij të vdekura janë emërtuar dependabot slash github-actions slash fremen. git blame. Modeli i instalimit të npm, pesëdhjetë e pesë përqind: skriptet ekzekutohen në instalim, e vjetëruar mbetet e instalueshme, ekzistojnë tokena për të anashkaluar verifikimin me dy faktorë. CI e TanStack, njëzet e pesë: një fluks pune target i kërkesave tërheqëse të paaudituar që ekzekuton kodin e fork-ut me akses shkrimi në cache. Zakoni i bump-it, pesëmbëdhjetë: trembëdhjetë përditësime të bashkuara në njëzet e katër minuta, token në dhomë.

2:17 Dependabot, pesë: aq i besueshëm saqë krimbi vesh uniformën e tij.

### git blame

2:20 Rrezja e shpërthimit: dyzet e dy paketa TanStack. Njëzet e dy në rrjedhën e poshtme, nga një projekt me nëntë yje. Mbi njëqind e gjashtëdhjetë në të gjithë ekosistemin pasi krimbi arrin Mistral. Çdo version i rrjedhës së sipërme mbante një nënshkrim të vlefshëm: i ndërtuar nga zyrtari tubacion. E vërtetë. Vendimi, postmortem: SHIP IT. Të dy mirëmbajtësit postojnë postmortem me kohë brenda një dite; brenda tre, tubacionet e rrjedhës së poshtme instalohen me ignore-scripts, ndajnë ndërtimin nga publikimi dhe heqin tokenin me jetë të gjatë.

### Rrezja e shpërthimit

2:47 Parazgjedhjet e npm nuk kanë lëvizur. E hënë: ignore-scripts në instalim, dhe tokeni i publikimit jashtë punës që e ekzekuton. Më dërgoni incidentin për të cilin ende nuk ju lejohet të flisni, në komente, ose te thedailydiff.dev. Dhe kjo është diferenca për sot.

### Vendimi

3:00 Unë jam Niko nga Axrisi. Bashkoheni me përgjegjësi.

## Burimet

- [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
