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 вина
2:20 Радиус на експлозија: четириесет и два TanStack пакети. Дваесет и два низводно, од проект со девет ѕвезди. Над сто и шеесет низ целиот екосистем откако црвот ќе го достигне Mistral. Секоја претходна верзија носеше валиден потпис: изградена од официјалниот цевковод. Вистина. Пресуда, пост-мортем: SHIP IT. Двата одржувачи објавуваат пост-мортеми со временски ознаки во рок од еден ден; во рок од три, цевководот низводно се инсталира со ignore-scripts, го дели градењето од објавувањето и го отфрла долготрајниот токен.
Радиус на експлозија
2:47 Стандардните поставки на npm не се поместија. Понеделник: ignore-scripts при инсталирање, и токенот за објавување надвор од задачата што го извршува. Испратете ми го инцидентот за кој сè уште не ви е дозволено да зборувате, во коментарите, или на thedailydiff.dev. И тоа е разликата за денес.
Пресуда
3:00 Јас сум Нико од Axrisi. Спојувајте одговорно.
Извори
- TanStack postmortem (Tanner Linsley, May 11, refined May 15)tanstack.com
- TanStack "Hardening TanStack After the npm Compromise" (May 12)tanstack.com
- TanStack/router#7383 — the StepSecurity detection issuegithub.com
- Downstream incident post, @squawk/* (May 12)github.com
- Downstream hardening post (May 14)github.com
- The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)github.com
- @tan_stack advisory post, 21:19 UTCx.com
- StepSecurity — worm internals, bypass_2fa search, Dependabot-style branch nameswww.stepsecurity.io
- Socketsocket.dev
- Aikido — "over 160 packages, including Mistral"www.aikido.dev
- Hacker News (1,097 points)news.ycombinator.com



