+− THE DAILY DIFFdev & AI news
SHIP IT

Dependabot-päivitys julkaisi madon. 22 pakettia.

Botti avaa pull requestin.

Botti avaa pull requestin. Ihminen yhdistää sen 24 minuuttia myöhemmin. 95 minuuttia sen jälkeen mato on julkaissut 110 haitallista versiota 22 npm-paketistaan, hänen nimellään, käyttäen tokenia, jonka se löysi hänen CI:stään.

Lue kirjoitettu versio (englanniksi) ↗

Mitä tämä video käsittelee

  • Botti, ihminen, mato
  • Miten se tapahtui, miksi npm salli sen, kuka saa syyn
  • Aikajana: myrkytetty välimuisti
  • 21:48 – Dependabot-päivitys
  • Miksi se toimii

Käännetty transkriptio

Käännetty alkuperäisestä englanninkielisestä selostuksesta. Käytettävissä olevan äänen ja tekstitysten hallinta tapahtuu YouTuben kautta.

Botti, ihminen, mato

0:00 Botti avaa pull requestin; ihminen yhdistää sen 24 minuuttia myöhemmin. 95 minuuttia myöhemmin mato on julkaissut sata kymmenen versiota hänen paketeistaan, häneen itseensä vedoten. TanStackin jälkipuinti sisältää ylävirran aikaleimat, alavirran ylläpitäjän sisältää loput, ja Hacker News antaa sille 1100 pistettä ja nimen: Mini Shai-Hulud. Miten se tapahtuu, miksi npm sallii sen, kuka saa syyn.

Miten se tapahtui, miksi npm salli sen, kuka saa syyn

0:21 Tämä on The Daily Diff, jälkipuinti. Toukokuun 11. päivä, aamulla. Uudelleennimetty fork avaa pull requestin TanStack Routeria vastaan. Se sulkeutuu tunnin sisällä, mutta suorituskykytestaus-työnkulku on jo suorittanut sen koodin ja

Aikajana: myrkytetty välimuisti

0:33 tallentanut myrkytetyn välimuistin avaimella, jota julkaisutyönkulku käyttää. 19:20. Legitiimi yhdistäminen käynnistää julkaisun. Välimuisti palautuu, binääri lukee suorittimen muistin, nostaa julkaisutokenin ja lähettää 84 versiota 42 paketin poikki, validilla alkuperällä. Testit epäonnistuvat. Se julkaisee joka tapauksessa. 19:46, StepSecurity-tutkija tekee ilmoituksen; kello 9 UTC kaikki on vanhentunutta ja varoitus on julkaistu.

0:55 Vanhentunut ei tarkoita kadonnutta: npm kieltäytyy poistamasta mitään, jolla on riippuvuuksia, joten se pysyy asennettavissa tuntikausia. 21:48. Yhdeksän tähden ilmailudataprojektissa, Dependabot avaa rutiininomaisen pull requestinsa: päivittää dev-riippuvuuksien ryhmää, 13 päivitystä. Kaksi on myrkytettyjä TanStack-versioita. 22:12: yhdistetty. Julkaisutyönkulku suorittaa npm C-I:n tokenin kanssa

21:48 – Dependabot-päivitys

1:15 käyttöalueella; prepare-skripti lukee sen, ja 22:17 mato julkaisee hänen nimissään. Viisi versiota jokaisesta paketista, johon token yltää, jopa vanhasta sivuhankkeesta: yksi klassinen token kaikkeen. Sata kymmenen versiota 95 minuutissa. Hän saa tietää sähköpostitse, keskiyön jälkeen. Miksi se toimii. Yksi: npm install suorittaa tuntemattomien elinkaariskriptit oletuksena, ja git-riippuvuuden prepare-skripti lasketaan mukaan.

1:39 Kaksi: mato haluaa yhden asian: tokenin, joka julkaisee ilman toista tekijää. Sitten se kysyy rekisteriltä, mitä muuta kyseinen ylläpitäjä omistaa, ja julkaisee kaiken uudelleen itsensä kanssa sisällä. Kolme: mikään ketjussa ei ole ihminen.

Miksi se toimii

1:51 Botti ehdottaa, putki asentaa, ja mato palauttaa palveluksen: sen kuolleen pudotuksen oksat on nimetty dependabot slash github-actions slash fremen. git blame. npm:n asennusmalli, 55 prosenttia: skriptit ajetaan asennuksessa, vanhentunut pysyy asennettavissa, kaksivaiheisen ohituksen tokenit ovat olemassa. TanStackin CI, 25: tarkistamaton pull request -kohdetyönkulku, joka suorittaa fork-koodia kirjoitusoikeudella välimuistiin. Päivitystapa, 15: kolmetoista päivitystä yhdistettiin 24 minuutissa, token huoneessa.

2:17 Dependabot, viisi: niin luotettu, että mato käyttää sen univormua.

git blame

2:20 Räjähdysalue: 42 TanStack-pakettia. 22 alavirran pakettia, yhdeksän tähden projektista. Yli 160 ekosysteemissä, kun mato tavoittaa Mistralin. Jokainen ylävirran versio sisälsi kelvollisen allekirjoituksen: rakennettu virallisen putken toimesta. Totta. Tuomio, jälkipuinti: SHIP IT. Molemmat ylläpitäjät julkaisevat aikaleimatut jälkipuinnot vuorokauden sisällä; kolmen sisällä alavirran putki asentaa ignore-scripts-asetuksella, erottaa rakentamisen julkaisusta ja pudottaa pitkäikäisen tokenin.

Räjähdysalue

2:47 npm:n oletukset eivät ole muuttuneet. Maanantai: ignore-scripts asennuksen yhteydessä, ja julkaisutoken pois työstä, joka suorittaa sen. Lähetä minulle tapaus, josta et edelleenkään saa puhua, kommenteissa tai osoitteeseen thedailydiff.dev. Ja siinäpä tämän päivän The Daily Diff.

Tuomio

3:00 Olen Niko Axrisista. Yhdistä vastuullisesti.

Lähteet

  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

Aiheeseen liittyvät videot