Dependabot-ის განახლებამ ჭიაყელა გაავრცელა. 22 პაკეტი.
ბოტი ხსნის pull request-ს.
ბოტი ხსნის pull request-ს. ადამიანი მას 24 წუთის შემდეგ აერთიანებს. ამის შემდეგ 95 წუთში, ჭიაყელამ გამოაქვეყნა მისი 22 npm პაკეტის 110 მავნე ვერსია, მისი სახელით, ტოკენით, რომელიც იპოვა მის CI-ში.
წაიკითხეთ წერილობითი გამოცემა (ინგლისური) ↗
რას მოიცავს ეს ვიდეო
- ბოტი, ადამიანი, ჭიაყელა
- როგორ მოხდა, რატომ დაუშვა npm-მა, ვის ეკისრება ბრალი
- ქრონოლოგია: მოწამლული ქეში
- 21:48 — Dependabot-ის განახლება
- რატომ მუშაობს
ნათარგმნი ტრანსკრიპტი
ნათარგმნია ორიგინალური ინგლისური ნარატივიდან. ხელმისაწვდომი აუდიო და სუბტიტრები კონტროლდება YouTube-ის მიერ.
ბოტი, ადამიანი, ჭიაყელა
0:00 ბოტი ხსნის pull request-ს; ადამიანი მას ოცდაოთხი წუთის შემდეგ აერთიანებს. ოთხმოცდათხუთმეტი წუთის შემდეგ, ჭიაყელამ გამოაქვეყნა ას ათი ვერსია მისი პაკეტების, მის მიერ. TanStack-ის პოსტმოკვლევაში მოცემულია ზემოაღნიშნული დროის აღნიშვნები, ქვემოთა მომვლელის დანარჩენი აქვს, და Hacker News აძლევს მას ათას ას ქულას და სახელს: Mini Shai-Hulud. როგორ ხდება, რატომ უშვებს npm ამას, ვის ეკისრება ბრალი.
როგორ მოხდა, რატომ დაუშვა npm-მა, ვის ეკისრება ბრალი
0:21 ეს არის The Daily Diff, პოსტმოკვლევა. 11 მაისი, დილა. გადარქმეული ფორკი ხსნის pull request-ს TanStack Router-ის წინააღმდეგ. ის იხურება საათში, მაგრამ ბენჩმარკის სამუშაო ნაკადმა უკვე გაუშვა მისი კოდი და
ქრონოლოგია: მოწამლული ქეში
0:33 შეინახა მოწამლული ქეში იმ გასაღების ქვეშ, რომელსაც გამოშვების სამუშაო ნაკადი გამოიყენებს. ცხრამეტი-ოცი. ლეგიტიმური შერწყმა აწარმოებს გამოშვებას. ქეში ბრუნდება, ბინარული ფაილი კითხულობს გაშვების მეხსიერებას, იღებს გამოქვეყნების ტოკენს და აგზავნის ოთხმოცდაოთხ ვერსიას ორმოცდაორ პაკეტზე, ვალიდური წარმომავლობით. ტესტები ვერ ხერხდება. ის მაინც აქვეყნებს. ცხრამეტი ორმოცდაექვსი, StepSecurity-ის მკვლევარი წარადგენს პრობლემას; ცხრა საათისთვის UTC ყველაფერი გაუქმებულია და გაფრთხილებაც გამოქვეყნებულია.
0:55 გაუქმებული არ ნიშნავს წაშლილს: npm უარს ამბობს ნებისმიერი რამის გაუქმებაზე, რასაც დამოკიდებულებები აქვს, ასე რომ ის საათობით ხელმისაწვდომი რჩება ინსტალაციისთვის. ოცდაერთი ორმოცდარვა. ცხრავარსკვლავიან საავიაციო მონაცემთა პროექტში, Dependabot ხსნის თავის რუტინულ pull request-ს: dev-dependencies ჯგუფის განახლება, ცამეტი განახლება. ორი არის მოწამლული TanStack ვერსია. ოცდაორი-თორმეტი: გაერთიანდა. გამოქვეყნების სამუშაო ნაკადი აწარმოებს npm C-I-ს ტოკენით
21:48 — Dependabot-ის განახლება
1:15 ფარგლებში; მოსამზადებელი სკრიპტი კითხულობს მას, და ოცდაორი-ჩვიდმეტზე ჭიაყელა აქვეყნებს მის მიერ. ყოველი პაკეტის ხუთი ვერსია, რომელსაც ტოკენი აღწევს, თუნდაც ძველი გვერდითი პროექტი: ერთი კლასიკური ტოკენი ყველაფრისთვის. ას ათი ვერსია ოთხმოცდათხუთმეტ წუთში. ის ამის შესახებ ელ. ფოსტით გაიგებს, შუაღამის შემდეგ. რატომ მუშაობს. ერთი: npm install ნაგულისხმევად აწარმოებს უცნობების სასიცოცხლო ციკლის სკრიპტებს, და git დამოკიდებულების მოსამზადებელი სკრიპტი ითვლება.
1:39 ორი: ჭიაყელას ერთი რამ უნდა: ტოკენი, რომელიც აქვეყნებს მეორე ფაქტორის გარეშე. შემდეგ ის ეკითხება რეესტრს, რა სხვა რამ აქვს ამ მომვლელს, და ხელახლა აქვეყნებს ყველაფერს თავისთავად შიგნით. სამი: ჯაჭვში არაფერია ადამიანი.
რატომ მუშაობს
1:51 ბოტი გვთავაზობს, კონვეიერი აინსტალირებს, და ჭიაყელა სამაგიეროს უბრუნებს: მისი dead-drop ტოტებს ჰქვია dependabot slash github-actions slash fremen. git blame. npm-ის ინსტალაციის მოდელი, ორმოცდათხუთმეტი პროცენტი: სკრიპტები მუშაობს ინსტალაციისას, გაუქმებული რჩება ინსტალაციისთვის, ორფაქტორიანი გვერდის ავლის ტოკენები არსებობს. TanStack-ის CI, ოცდახუთი: არააუდიტირებული pull request target სამუშაო ნაკადი, რომელიც აწარმოებს ფორკის კოდს, ქეშზე ჩაწერის ნებართვით. განახლების ჩვევა, თხუთმეტი: ცამეტი განახლება გაერთიანდა ოცდაოთხ წუთში, ტოკენი ოთახში.
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



