+− THE DAILY DIFFdev & AI news
SHIP IT

Dependabot bump je objavio crva. 22 пакета.

Бот отвара захтев за повлачење.

Бот отвара захтев за повлачење. Човек га спаја 24 минута касније. 95 минута након тога, црв је објавио 110 злонамерних верзија његова 22 npm пакета, под његовим именом, са токеном који је пронашао у његовом CI-у.

Прочитајте писано издање (енглески) ↗

Шта овај видео покрива

  • Бот, човек, црв
  • Како се догодило, зашто је npm то дозволио, ко је крив
  • Временска линија: отрована кеш меморија
  • 21:48 — Dependabot bump
  • Зашто то функционише

Преведени транскрипт

Преведено са оригиналне енглеске нарације. Доступни аудио и титлови контролисани су од стране YouTube-а.

Бот, човек, црв

0:00 Бот отвара захтев за повлачење; човек га спаја двадесет четири минута касније. Деведесет пет минута касније, црв је објавио сто десет верзија његових пакета, као он. TanStack-ов постмортем има временске ознаке узводно, низводног одржаваоца има остатак, а Hacker News му даје једанаест стотина поена и име: Mini Shai-Hulud. Како се дешава, зашто npm то дозвољава, ко је крив.

Како се догодило, зашто је npm то дозволио, ко је крив

0:21 Ово је The Daily Diff, постмортем. 11. мај, ујутро. Преименовани форк отвара захтев за повлачење против TanStack Router-а. Затвара се у року од сат времена, али ток посла бенчмарка је већ покренуо свој код и

Временска линија: отрована кеш меморија

0:33 сачувао отровану кеш меморију под кључем који ће ток посла издања користити. Деветнаест двадесет. Легитимно спајање покреће издање. Кеш се враћа, бинарна датотека чита меморију извршиоца, подиже токен за објављивање и испоручује осамдесет четири верзије кроз четрдесет два пакета, са ваљаном провером порекла. Тестови падају. Ипак се објављује. Деветнаест четрдесет шест, истраживач StepSecurity-а подноси проблем; до девет UTC све је застарело и савет је објављен.

0:55 Застарело није нестало: npm одбија да деобјави било шта са зависностима, тако да остаје инсталирано сатима. Двадесет један четрдесет осам. У пројекту авијационих података са девет звездица, Dependabot отвара свој рутински захтев за повлачење: повећајте групу развојних зависности, тринаест ажурирања. Два су отроване TanStack верзије. Двадесет два дванаест: спојено. Ток посла објављивања покреће npm C-I са токеном у

21:48 — Dependabot bump

1:15 обиму; скрипта за припрему га чита, а у двадесет два седамнаест црв објављује као он. Пет верзија сваког пакета до којег токен дође, чак и стари споредни пројекат: један класични токен за све. Сто десет верзија за деведесет пет минута. Он сазнаје путем е-поште, после поноћи. Зашто то функционише. Један: npm install подразумевано покреће скрипте животног циклуса странаца, а скрипта за припрему git зависности се рачуна.

1:39 Два: црв жели једну ствар: токен који објављује без другог фактора. Затим пита регистар шта још тај одржавалац поседује, и поново објављује све то са собом унутра. Три: ништа у ланцу није особа.

Зашто то функционише

1:51 Бот предлаже, цевовод инсталира, а црв враћа услугу: његове гране за тајно остављање се зову dependabot slash github-actions slash fremen. git blame. npm-ов модел инсталације, педесет пет процената: скрипте се покрећу при инсталацији, застарело остаје инсталирано, токени за заобилажење двофакторске аутентификације постоје. TanStack-ов CI, двадесет пет: неревидирани ток посла за циљање захтева за повлачење који покреће код форка са правом писања у кеш. Навика повећања, петнаест: тринаест ажурирања спојених за двадесет четири минута, токен у соби.

2:17 Dependabot, пет: толико веродостојан да црв носи његову униформу.

git blame

2:20 Радијус експлозије: четрдесет два TanStack пакета. Двадесет два низводно, из пројекта са девет звездица. Преко сто шездесет у целом екосистему када црв стигне до Mistral-а. Свака узводна верзија носила је важећи потпис: изграђена од стране званичног цевовода. Истина. Пресуда, постмортем: SHIP IT. Оба одржаваоца објављују постмортеме са временским ознакама у року од једног дана; у року од три, низводни цевовод се инсталира са ignore-scripts, дели изградњу од објављивања и одустаје од дуговечног токена.

Радијус експлозије

2:47 npm-ове подразумеване поставке се нису промениле. Понедељак: ignore-scripts при инсталацији, и токен за објављивање изван задатка који га покреће. Пошаљите ми инцидент о коме вам још увек није дозвољено да говорите, у коментарима, или на thedailydiff.dev. И то је The Daily Diff за данас.

Пресуда

3:00 Ја сам Нико из Axrisi-ја. Спајајте одговорно.

Извори

  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

Повезани видеи

postmortem · sr · 13. 9. 2026.

Једанаест линија JavaScript кода покварило је интернет. Једно поништење објављивања.

22. март 2016, 21:30 УТЦ: програмер поништава објављивање свих 273 својих npm пакета након што npm преда назив пакета „kik“ компанији Kik, апликацији за размену порука, чији је патентни заступник обећ

2:52 ↗
postmortem · sr · 25. 9. 2026.

Грешка од једне милисекунде зауставила је ваздушни саобраћај у Великој Британији. Шест сати.

У уторак, 8. септембра, у 10:00, један рутински захтев за squawk-код у Националном систему ваздушног простора (NAS) компаније NATS бива прекинут поруком вишег приоритета док је делимично ажурирао вред

3:06 ↗