+− THE DAILY DIFFdev & AI news
SHIP IT

Dependabot bump je objavio crva. 22 paketa.

Bot otvara pull request.

Bot otvara pull request. Čovjek ga spaja 24 minute kasnije. 95 minuta nakon toga, crv je objavio 110 zlonamjernih verzija njegovih 22 npm paketa, pod njegovim imenom, s tokenom koji je pronašao u njegovom CI-u.

Pročitajte pisano izdanje (engleski) ↗

Šta ovaj video pokriva

  • Bot, čovjek, crv
  • Kako se dogodilo, zašto je npm to dopustio, tko je kriv
  • Vremenska linija: otrovna predmemorija
  • 21:48 — Dependabot bump
  • Zašto to funkcionira

Prevedeni transkript

Prevedeno iz originalne engleske naracije. Dostupan zvuk i titlovi kontroliše YouTube.

Bot, čovjek, crv

0:00 Bot otvara pull request; čovjek ga spaja dvadeset i četiri minute kasnije. Devedeset i pet minuta kasnije, crv je objavio stotinu i deset verzija njegovih paketa, kao on. TanStack-ova postmortem analiza sadrži uzvodne vremenske oznake, a nizvodnog održavatelja sadrži ostalo, a Hacker News mu daje jedanaest stotina bodova i ime: Mini Shai-Hulud. Kako se događa, zašto npm to dopušta, tko je kriv.

Kako se dogodilo, zašto je npm to dopustio, tko je kriv

0:21 Ovo je The Daily Diff, postmortem. 11. svibnja, ujutro. Preimenovani fork otvara pull request prema TanStack Routeru. Zatvara se unutar sata, ali benchmark workflow je već pokrenuo svoj kod i

Vremenska linija: otrovna predmemorija

0:33 spremio otrovnu predmemoriju pod ključem koji će koristiti release workflow. Devetnaest-dvadeset. Legitimno spajanje pokreće izdanje. Predmemorija se vraća, binarni program čita memoriju pokretača, podigne publish token i isporuči osamdeset i četiri verzije kroz četrdeset i dva paketa, s valjanim porijeklom. Testovi ne uspijevaju. Ipak objavljuje. Devetnaest četrdeset i šest, istraživač StepSecurity-a podnosi problem; do devet UTC sve je zastarjelo i savjet je objavljen.

0:55 Zastarjelo nije nestalo: npm odbija ukloniti bilo što s ovisnostima, pa ostaje instalirano satima. Dvadeset i jedan četrdeset i osam. U projektu avijacijskih podataka s devet zvjezdica, Dependabot otvara svoj rutinski pull request: ažurirajte dev-dependencies grupu, trinaest ažuriranja. Dva su otrovane TanStack verzije. Dvadeset i dva-dvanaest: spojeno. Publish workflow pokreće npm C-I s tokenom u

21:48 — Dependabot bump

1:15 opsegu; prepare skripta ga čita, i u dvadeset i dva-sedamnaest crv objavljuje kao on. Pet verzija svakog paketa do kojeg token dođe, čak i stari sporedni projekt: jedan klasični token za sve. Stotinu i deset verzija u devedeset i pet minuta. Saznaje putem e-pošte, poslije ponoći. Zašto to funkcionira. Jedan: npm install pokreće lifecycle skripte stranaca prema zadanim postavkama, i prepare skripta git ovisnosti se računa.

1:39 Dva: crv želi jednu stvar: token koji objavljuje bez drugog faktora. Zatim pita registar što još taj održavatelj posjeduje, i ponovno objavljuje sve to sa sobom unutra. Tri: ništa u lancu nije osoba.

Zašto to funkcionira

1:51 Bot predlaže, pipeline instalira, a crv vraća uslugu: njegove dead-drop grane su nazvane dependabot slash github-actions slash fremen. git blame. npm-ov install model, pedeset i pet posto: skripte se pokreću pri instalaciji, zastarjelo ostaje instalirano, postoje tokeni za zaobilaženje dvofaktorske autentifikacije. TanStack-ov CI, dvadeset i pet: neaudirani pull request target workflow koji pokreće kod forka s pristupom za pisanje u cache. Navika ažuriranja, petnaest: trinaest ažuriranja spojeno u dvadeset i četiri minute, token u sobi.

2:17 Dependabot, pet: toliko mu se vjeruje da crv nosi njegovu uniformu.

git blame

2:20 Radijus eksplozije: četrdeset i dva TanStack paketa. Dvadeset i dva nizvodno, iz projekta s devet zvjezdica. Preko stotinu i šezdeset u cijelom ekosustavu kada crv dođe do Mistrala. Svaka uzvodna verzija nosila je valjan potpis: izrađena od strane službenog pipeline-a. Istina. Presuda, postmortem: SHIP IT. Oba održavatelja objavljuju postmorteme s vremenskim oznakama u roku od jednog dana; u roku od tri, nizvodni pipeline instalira s ignore-scripts, razdvaja build od publisha i odbacuje dugotrajni token.

Radijus eksplozije

2:47 Zadane postavke npm-a se nisu pomaknule. Ponedjeljak: ignore-scripts pri instalaciji i publish token izvan posla koji ga pokreće. Pošaljite mi incident o kojem još uvijek ne smijete govoriti, u komentarima, ili na thedailydiff.dev. I to je diff za danas.

Presuda

3:00 Ja sam Niko iz Axrisija. Spajajte odgovorno.

Izvori

  1. TanStack postmortem (Tanner Linsley, May 11, refined May 15)tanstack.com
  2. TanStack "Hardening TanStack After the npm Compromise" (May 12)tanstack.com
  3. TanStack/router#7383 — the StepSecurity detection issuegithub.com
  4. Downstream incident post, @squawk/* (May 12)github.com
  5. Downstream hardening post (May 14)github.com
  6. The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)github.com
  7. @tan_stack advisory post, 21:19 UTCx.com
  8. StepSecurity — worm internals, bypass_2fa search, Dependabot-style branch nameswww.stepsecurity.io
  9. Socketsocket.dev
  10. Aikido — "over 160 packages, including Mistral"www.aikido.dev
  11. Hacker News (1,097 points)news.ycombinator.com

Povezani videozapisi