+− THE DAILY DIFFdev & AI news
SHIP IT

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

Një bot hap një kërkesë tërheqjeje.

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.

Lexoni edicionin e shkruar (anglisht) ↗

Ç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

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

  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

Video të ngjashme