Dependabot-ի թարմացումը որդ է հրապարակել։ 22 փաթեթ։
Բոտը քաշելու հարցում է բացում։ Մարդը միաձուլում է այն 24 րոպե անց։ Դրանից 95 րոպե հետո որդը հրապարակել է իր 22 npm փաթեթների 110 վնասակար տարբերակ՝ իր անունով, իր CI-ում գտած թոքենով։
Բոտը քաշելու հարցում է բացում։ Մարդը միաձուլում է այն 24 րոպե անց։ Դրանից 95 րոպե հետո որդը հրապարակել է իր 22 npm փաթեթների 110 վնասակար տարբերակ՝ իր անունով, իր CI-ում գտած թոքենով։
Կարդացեք գրավոր տարբերակը (անգլերեն) ↗
Ինչ է ընդգրկում այս տեսանյութը
- Բոտ, մարդ, որդ
- Ինչպես դա տեղի ունեցավ, ինչու npm-ը թույլ տվեց, ում է մեղքը
- Ժամանակացույց. թունավորված քեշը
- 21:48 — Dependabot-ի թարմացումը
- Ինչու է այն աշխատում
Թարգմանված արձանագրություն
Թարգմանվել է բնօրինակ անգլերեն պատմությունից։ Հասանելի աուդիո և ենթագրերը վերահսկվում են YouTube-ի կողմից։
Բոտ, մարդ, որդ
0:00 Բոտը քաշելու հարցում է բացում, մարդը միաձուլում է այն քսանչորս րոպե անց։ Իննսունհինգ րոպե անց որդը հրապարակել է նրա հարյուր տասը տարբերակները փաթեթները, որպես ինքը։ TanStack-ի հետմահու զեկույցում կան վերին հոսանքի ժամանակային դրոշմները, ներքին հոսանքի սպասարկողի մոտ մնացածն է, իսկ Hacker News-ը դրան տալիս է տասնմեկ հարյուր միավոր և անուն՝ Mini Շայ-Հուլուդ։ Ինչպես է դա տեղի ունենում, ինչու է 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-ի տեղադրման մոդելը, հիսունհինգ տոկոս. սկրիպտերն աշխատում են տեղադրման ժամանակ, հնացածը մնում է տեղադրելի, գոյություն ունեն երկգործոնային շրջանցման թոքեններ։ TanStack-ի CI, քսանհինգ. չստուգված քաշելու հարցման թիրախային աշխատանքային հոսքը գործարկում է ֆորկ կոդ՝ քեշի վրա գրելու հասանելիությամբ։ Թարմացման սովորությունը, տասնհինգ. տասներեք թարմացում միաձուլված քսանչորս րոպեում, թոքենը սենյակում։
2:17 Dependabot, հինգ. այնքան վստահելի, որ որդը կրում է նրա համազգեստը։
git blame
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



