+− THE DAILY DIFFdev & AI news
SHIP IT

Багі Dependabot апублікаваў чарвяка. 22 пакеты.

Бот адкрывае запыт на зліццё.

Бот адкрывае запыт на зліццё. Чалавек злівае яго праз 24 хвіліны. Праз 95 хвілін чарвяк апублікаваў 110 шкоднасных версій сваіх 22 npm пакетаў, пад яго імем, з токенам, які ён знайшоў у яго CI.

Чытаць пісьмовае выданне (англійская) ↗

Што ахоплівае гэта відэа

  • Бот, чалавек, чарвяк
  • Як гэта адбылося, чаму npm гэта дазволіў, хто вінаваты
  • Храналогія: атручаны кэш
  • 21:48 — абнаўленне Dependabot
  • Чаму гэта працуе

Перакладзеная стэнаграма

Перакладзена з арыгінальнай англійскай агучкі. Даступнае аўдыя і субтытры кантралююцца 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 адкрывае свой звычайны запыт на зліццё: абнавіць групу dev-dependencies, трынаццаць абнаўленняў. Два з іх - атручаныя версіі TanStack. Дваццаць два дванаццаць: зліта. Працоўны працэс публікацыі запускае npm C-I з токенам у

21:48 — абнаўленне Dependabot

1:15 сферы; скрыпт падрыхтоўкі чытае яго, і ў дваццаць два семнаццаць чарвяк публікуе як ён. Пяць версій кожнага пакета, да якога даходзіць токен, нават стары пабочны праект: адзін класічны токен для ўсяго. Сто дзесяць версій за дзевяноста пяць хвілін. Ён даведваецца пра гэта па электроннай пошце, пасля поўначы. Чаму гэта працуе. Адно: npm install па змаўчанні запускае скрыпты жыццёвага цыкла незнаёмцаў, і скрыпт падрыхтоўкі залежнасці git лічыцца.

1:39 Два: чарвяк хоча аднаго: токен, які публікуе без другога фактару. Затым ён пытаецца ў рэестра, што яшчэ належыць гэтаму суправаджальніку, і перапублікуе ўсё гэта з сабой унутры. Тры: нічога ў ланцужку не з'яўляецца чалавекам.

Чаму гэта працуе

1:51 Бот прапануе, канвеер усталёўвае, і чарвяк вяртае ласку: яго галіны мёртвай кропкі называюцца dependabot slash github-actions slash fremen. git blame. Мадэль устаноўкі npm, пяцьдзесят пяць працэнтаў: скрыпты запускаюцца пры ўстаноўцы, састарэлае застаецца даступным для ўстаноўкі, існуюць токены абыходу двухфактарнай аўтэнтыфікацыі. CI TanStack, дваццаць пяць: неправераны працоўны працэс мэтавага запыту на зліццё, які запускае код форка з доступам на запіс у кэш. Звычка абнаўлення, пятнаццаць: трынаццаць абнаўленняў зліта за дваццаць чатыры хвіліны, токен у пакоі.

2:17 Dependabot, пяць: настолькі давераны, што чарвяк носіць яго форму.

git blame

2:20 Радыус паражэння: сорак два пакеты TanStack. Дваццаць два ніжэй па плыні, з праекта з дзевяццю зоркамі. Больш за сто шэсцьдзесят па ўсёй экасістэме, як толькі чарвяк даходзіць да Mistral. Кожная версія вышэй па плыні мела сапраўдны подпіс: створана афіцыйным канвеерам. Праўда. Вердыкт, пасмяротны аналіз: SHIP IT. Абодва суправаджальнікі публікуюць пасмяротныя аналізы з меткамі часу на працягу дня; на працягу трох, канвеер ніжэй па плыні ўсталёўвае з ignore-scripts, падзяляе зборку ад публікацыі і адкідвае доўгатэрміновы токен.

Радыус паражэння

2:47 Настройкі npm па змаўчанні не змяніліся. Панядзелак: ignore-scripts пры ўстаноўцы, і токен публікацыі з задання, якое яго запускае. Дашліце мне інцыдэнт, пра які вам усё яшчэ не дазваляецца гаварыць, у каментарах або на thedailydiff.dev. І гэта ўвесь 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 · be · 25 вер 2026 г.

Баг у адну мілісекунду спыніў паветраны рух Вялікабрытаніі. На шэсць гадзін.

У 10:00 у аўторак, 8 верасня, адзін звычайны запыт squawk-кода ў Нацыянальнай паветранай сістэме (NAS) NATS быў перапынены паведамленнем з больш высокім прыярытэтам, пакуль ён знаходзіўся на паўдарогі

3:06 ↗
postmortem · be · 22 вер 2026 г.

Перазагрузка адправіла Telstra ў 2006 год. Дзевяць мільёнаў тэлефонаў.

Інжынер у Мельбурне ўключае шасі сінхранізацыі ў 2:50 раніцы, і да сняданку найбуйнейшая мабільная сетка Аўстраліі пагаджаецца, што гэта лістапад 2006 года. 8 ліпеня 2026 года: карта GPS у шасі NTP Te

3:15 ↗