Egy Dependabot frissítés egy férget publikált. 22 csomag.
Egy bot nyit egy pull requestet.
Egy bot nyit egy pull requestet. Egy ember 24 perccel később egyesíti. Azután 95 perccel egy féreg 110 rosszindulatú verziót publikált a 22 npm csomagjából, a nevében, egy token segítségével, amit a CI-jében talált.
Olvassa el az írott kiadást (angolul) ↗
Amit ez a videó tartalmaz
- Egy bot, egy ember, egy féreg
- Hogyan történt, miért engedte az npm, ki a hibás
- Idővonal: a mérgezett gyorsítótár
- 21:48 – a Dependabot frissítés
- Miért működik
Lefordított átirat
Az eredeti angol narrációból fordítva. A rendelkezésre álló hangot és feliratokat a YouTube vezérli.
Egy bot, egy ember, egy féreg
0:00 Egy bot nyit egy pull requestet; egy ember huszonnégy perccel később egyesíti. Kilencvenöt perccel később egy féreg publikált száztíz verziót az ő csomagjaiból, az ő nevében. A TanStack utólagos elemzése tartalmazza a upstream időbélyegeket, a downstream karbantartóé a többit, és a Hacker News ezerkétszáz pontot és egy nevet ad neki: Mini Shai-Hulud. Hogyan történik, miért engedi az npm, ki a hibás.
Hogyan történt, miért engedte az npm, ki a hibás
0:21 Ez a The Daily Diff, utólagos elemzés. Május 11, reggel. Egy átnevezett fork nyit egy pull requestet a TanStack Router ellen. Egy órán belül bezárul, de egy benchmark munkafolyamat már futtatta a kódját és
Idővonal: a mérgezett gyorsítótár
0:33 egy mérgezett gyorsítótárat mentett a kulcs alá, amit a kiadási munkafolyamat használni fog. Tizenkilenc-húsz. Egy jogos egyesítés futtatja a kiadást. A gyorsítótár visszajön, egy bináris olvassa a futtató memóriáját, kiemeli a publikációs tokent, és nyolcvannégy verziót szállít negyvenkét csomagon keresztül, érvényes eredettel. A tesztek sikertelenek. Ennek ellenére publikál. Tizenkilenc-negyvenhat, egy StepSecurity kutató bejelenti a problémát; kilenc UTC-re mindent elavulttá tesznek, és a figyelmeztetés is kiadódik.
0:55 Az elavult nem tűnt el: az npm megtagadja bárminek a publikálásának visszavonását, aminek függőségei vannak, így órákig telepíthető marad. Huszonegy-negyvennyolc. Egy kilenc csillagos repülési adat projektben, a Dependabot megnyitja a szokásos pull requestjét: frissítse a dev-dependencies csoportot, tizenhárom frissítés. Kettő mérgezett TanStack verzió. Huszonkettő-tizenkettő: egyesítve. A publikálási munkafolyamat futtatja az npm C-I-t a tokenrel
21:48 – a Dependabot frissítés
1:15 a hatókörben; egy előkészítő szkript elolvassa, és huszonkettő-tizenhétkor a féreg publikál a nevében. Öt verzió minden csomagból, amit a token elér, még egy régi mellékprojekt is: egy klasszikus token mindenre. Száztíz verzió kilencvenöt perc alatt. E-mailben tudja meg, éjfél után. Miért működik. Egy: az npm install alapértelmezetten futtat idegenek életciklus szkriptjeit, és egy git függőség prepare szkriptje is számít.
1:39 Kettő: a féreg egy dolgot akar: egy tokent, ami második tényező nélkül publikál. Aztán megkérdezi a nyilvántartástól, hogy mi mással rendelkezik még az a karbantartó, és mindent újrapublikál magával együtt. Három: a láncban semmi sem személy.
Miért működik
1:51 Egy bot javasol, egy pipeline telepít, és a féreg viszonzást nyújt: a halott-csepp ágai dependabot slash github-actions slash fremen néven vannak. git blame. Az npm telepítési modellje, ötvenöt százalék: szkriptek futnak telepítéskor, az elavult telepíthető marad, léteznek kétfaktoros-bypass tokenek. A TanStack CI-je, huszonöt: egy nem auditált pull request cél munkafolyamat, amely fork kódot futtat, írási hozzáféréssel a gyorsítótárhoz. A frissítési szokás, tizenöt: tizenhárom frissítés egyesítve huszonnégy perc alatt, token a szobában.
2:17 Dependabot, öt: annyira megbízható, hogy a féreg az egyenruháját viseli.
git blame
2:20 Robbanási sugár: negyvenkét TanStack csomag. Huszonkettő downstream, egy kilenc csillagos projektből. Több mint százhatvan ökoszisztéma-szerte, amint a féreg eléri a Mistralt. Minden upstream verzió érvényes aláírással rendelkezett: az hivatalos pipeline építette. Igaz. Ítélet, utólagos elemzés: SHIP IT. Mindkét karbantartó időbélyeggel ellátott utólagos elemzést tesz közzé egy napon belül; három napon belül a downstream pipeline ignore-scripts-el telepít, szétválasztja az építést a publikálástól, és eldobja a hosszú életű tokent.
Robbanási sugár
2:47 Az npm alapértelmezett beállításai nem mozdultak. Hétfő: ignore-scripts a telepítéskor, és a publikálási token kívül a feladaton, ami futtatja. Küldje el nekem azt az incidenst, amiről még mindig nem szabad beszélnie, a kommentekben, vagy a thedailydiff.dev címen. És ez a mai diff.
Ítélet
3:00 Niko vagyok az Axrisi-től. Felelősségteljesen egyesítse.
Források
- TanStack postmortem (Tanner Linsley, May 11, refined May 15)tanstack.com
- TanStack "Hardening TanStack After the npm Compromise" (May 12)tanstack.com
- TanStack/router#7383 — the StepSecurity detection issuegithub.com
- Downstream incident post, @squawk/* (May 12)github.com
- Downstream hardening post (May 14)github.com
- The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)github.com
- @tan_stack advisory post, 21:19 UTCx.com
- StepSecurity — worm internals, bypass_2fa search, Dependabot-style branch nameswww.stepsecurity.io
- Socketsocket.dev
- Aikido — "over 160 packages, including Mistral"www.aikido.dev
- Hacker News (1,097 points)news.ycombinator.com



