’n Dependabot-opdatering het ’n wurm gepubliseer. 22 pakkette.
’n Bot open ’n trekversoek.
’n Bot open ’n trekversoek. ’n Mens voeg dit 24 minute later saam. 95 minute daarna het ’n wurm 110 kwaadwillige weergawes van sy 22 npm-pakkette gepubliseer, onder sy naam, met ’n teken wat dit in sy CI gevind het.
Lees die geskrewe uitgawe (Engels) ↗
Wat hierdie video dek
- ’n Bot, ’n mens, ’n wurm
- Hoe dit gebeur het, waarom npm dit toegelaat het, wie die skuld kry
- Tydlyn: die vergiftigde kas
- 21:48 — die Dependabot-opdatering
- Waarom dit werk
Vertaalde transkripsie
Vertaal uit die oorspronklike Engelse vertelling. Beskikbare klank en onderskrifte word deur YouTube beheer.
’n Bot, ’n mens, ’n wurm
0:00 'n Bot open 'n trekversoek; 'n mens voeg dit vier-en-twintig minute later saam. Vyf-en-negentig minute later het 'n wurm gepubliseer honderd-en-tien weergawes van sy pakkette, as hy. TanStack se nadoodse ondersoek het die stroomop-tydstempels, die stroomaf-onderhouer s'n het die res, en Hacker News gee dit elfhonderd punte en 'n naam: Mini Shai-Hulud. Hoe dit gebeur, waarom npm dit toelaat, wie die skuld kry.
Hoe dit gebeur het, waarom npm dit toegelaat het, wie die skuld kry
0:21 Dit is The Daily Diff, nadoodse ondersoek. 11 Mei, oggend. 'n Herrangskikte vurk open 'n trekversoek teen TanStack Router. Dit sluit binne die uur, maar 'n maatstaf-werkstroom het reeds sy kode uitgevoer en
Tydlyn: die vergiftigde kas
0:33 'n vergiftigde kas gestoor onder die sleutel wat die vrystelling-werkstroom sal gebruik. Negentien-twintig. 'n Legitieme saamvoeging voer die vrystelling uit. Die kas kom terug, 'n binêre lêer lees die hardloper se geheue, lig die publiseer-token, en stuur vier-en-tagtig weergawes oor twee-en-veertig pakkette, met geldige herkoms. Toetse misluk. Dit publiseer in elk geval. Negentien vier-en-veertig, 'n StepSecurity-navorser dien die kwessie in; teen nege UTC alles is verouderd en die advies is uit.
0:55 Verouderd is nie weg nie: npm weier om enigiets met afhanklikhede te depubliseer, so dit bly ure lank installeerbaar. Een-en-twintig vier-en-tagtig. In 'n nege-ster lugvaart-data projek, Dependabot open sy roetine-trekversoek: verhoog die dev-dependencies groep, dertien opdaterings. Twee is vergiftigde TanStack-weergawes. Twee-en-twintig-twaalf: saamgevoeg. Die publiseer-werkstroom voer npm C-I uit met die token in
21:48 — die Dependabot-opdatering
1:15 omvang; 'n voorberei-skrip lees dit, en teen twee-en-twintig-sewentien publiseer die wurm as hy. Vyf weergawes van elke pakket wat die token bereik, selfs 'n ou syprojek: een klassieke token vir alles. Honderd-en-tien weergawes in vyf-en-negentig minute. Hy vind uit per e-pos, na middernag. Waarom dit werk. Een: npm install voer standaard vreemdelinge se lewensiklus-skripte uit, en 'n git-afhanklikheid se voorberei-skrip tel.
1:39 Twee: die wurm wil een ding hê: 'n token wat publiseer sonder 'n tweede faktor. Dan vra dit die register wat anders daardie onderhouer besit, en herpubliseer alles met homself binne-in. Drie: niks in die ketting is 'n persoon nie.
Waarom dit werk
1:51 'n Bot stel voor, 'n pyplyn installeer, en die wurm gee die guns terug: sy dood-val takke is genoem dependabot slash github-actions slash fremen. git blame. npm se installasie-model, vyf-en-vyftig persent: skripte loop by installasie, verouderd bly installeerbaar, twee-faktor-omseil-tokens bestaan. TanStack se CI, vyf-en-twintig: 'n ongeouditeerde trekversoek-teiken-werkstroom wat vurk-kode uitvoer met skryftoegang tot die kas. Die 'bump'-gewoonte, vyftien: dertien opdaterings saamgevoeg in vier-en-twintig minute, token in die kamer.
2:17 Dependabot, vyf: so vertrou dat die wurm sy uniform dra.
git blame
2:20 Ontploffingsradius: twee-en-veertig TanStack-pakkette. Twee-en-twintig stroomaf, van 'n projek met nege sterre. Meer as honderd-en-sestig ekosisteem-wyd sodra die wurm Mistral bereik. Elke stroomop-weergawe het 'n geldige handtekening gedra: gebou deur die amptelike pyplyn. Waar. Uitspraak, nadoodse ondersoek: SHIP IT. Albei onderhouers plaas tydstempel-nadoodse ondersoeke binne 'n dag; binne drie, die stroomaf-pyplyn installeer met ignore-scripts, verdeel bou van publiseer, en laat die langlewende token val.
Ontploffingsradius
2:47 npm se verstekwaardes het nie beweeg nie. Maandag: ignore-scripts by installasie, en die publiseer-token uit die werk wat dit uitvoer. Stuur vir my die insident waaroor jy nog nie mag praat nie, in die kommentaar, of by thedailydiff.dev. En dit is die verskil vir vandag.
Uitspraak
3:00 Ek is Niko van Axrisi. Voeg verantwoordelik saam.
Bronne
- 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



