Dependabot bump เผยแพร่เวิร์ม 22 แพ็กเกจ
บอทเปิด Pull Request มนุษย์รวมมันใน 24 นาทีหลังจากนั้น 95 นาทีหลังจากนั้น เวิร์มได้เผยแพร่ 110 เวอร์ชันที่เป็นอันตรายของ 22 แพ็กเกจ npm ของเขา ภายใต้ชื่อของเขา ด้วยโทเค็นที่มันพบใน CI ของเขา
บอทเปิด Pull Request มนุษย์รวมมันใน 24 นาทีหลังจากนั้น 95 นาทีหลังจากนั้น เวิร์มได้เผยแพร่ 110 เวอร์ชันที่เป็นอันตรายของ 22 แพ็กเกจ npm ของเขา ภายใต้ชื่อของเขา ด้วยโทเค็นที่มันพบใน CI ของเขา
อ่านฉบับลายลักษณ์อักษร (ภาษาอังกฤษ) ↗
วิดีโอนี้ครอบคลุมอะไรบ้าง
- บอท มนุษย์ เวิร์ม
- มันเกิดขึ้นได้อย่างไร ทำไม npm ถึงอนุญาต ใครรับผิดชอบ
- ไทม์ไลน์: แคชที่เป็นพิษ
- 21:48 — การอัปเดต Dependabot
- เหตุผลที่มันทำงาน
บทถอดเสียงที่แปลแล้ว
แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย YouTube
บอท มนุษย์ เวิร์ม
0:00 บอทเปิด Pull Request; มนุษย์รวมมันใน 24 นาทีหลังจากนั้น 95 นาทีผ่านไป เวิร์มได้เผยแพร่ หนึ่งร้อยสิบเวอร์ชันของ แพ็กเกจ ในนามของเขา โพสต์มอร์เทมของ TanStack มีการประทับเวลาอัปสตรีม ผู้ดูแลดาวน์สตรีม มีส่วนที่เหลือ และ Hacker News ให้ 1,100 คะแนนและชื่อ: Mini Shai-Hulud. มันเกิดขึ้นได้อย่างไร ทำไม npm ถึงอนุญาต ใครรับผิดชอบ
มันเกิดขึ้นได้อย่างไร ทำไม npm ถึงอนุญาต ใครรับผิดชอบ
0:21 นี่คือ The Daily Diff, Postmortem 11 พฤษภาคม ตอนเช้า fork ที่เปลี่ยนชื่อเปิด Pull Request กับ TanStack Router มันปิดลงภายในหนึ่งชั่วโมง แต่เวิร์กโฟลว์เปรียบเทียบได้รันโค้ดของมันแล้ว
ไทม์ไลน์: แคชที่เป็นพิษ
0:33 และบันทึกแคชที่เป็นพิษภายใต้คีย์ที่เวิร์กโฟลว์การเผยแพร่จะใช้ สิบเก้านาฬิกายี่สิบนาที การรวมที่ถูกต้องรันการเผยแพร่ แคชกลับมา ไบนารีอ่านหน่วยความจำของ Runner ดึงโทเค็นเผยแพร่ และจัดส่ง 84 เวอร์ชันใน 42 แพ็กเกจ ด้วยหลักฐานที่ถูกต้อง การทดสอบล้มเหลว มันยังคงเผยแพร่ต่อไป สิบเก้านาฬิกาสี่สิบหกนาที นักวิจัย StepSecurity ยื่นปัญหา; ภายในเก้า UTC ทุกอย่างถูกยกเลิกและคำแนะนำถูกเผยแพร่
0:55 ยกเลิกไม่ได้หมายถึงหายไป: npm ปฏิเสธที่จะยกเลิกการเผยแพร่สิ่งใดที่มีผู้ที่ขึ้นอยู่ด้วย ดังนั้นมันยังคงติดตั้งได้นานหลายชั่วโมง ยี่สิบเอ็ดนาฬิกาสี่สิบแปดนาที ในโครงการข้อมูลการบินเก้าดาว Dependabot เปิด Pull Request ปกติ: อัปเดตกลุ่ม dev-dependencies สิบสามรายการ สองรายการเป็นเวอร์ชัน TanStack ที่เป็นพิษ ยี่สิบสองนาฬิกาสิบสองนาที: รวมกัน เวิร์กโฟลว์การเผยแพร่รัน npm C-I ด้วยโทเค็นใน
21:48 — การอัปเดต Dependabot
1:15 ขอบเขต; สคริปต์เตรียมการอ่านมัน และที่ยี่สิบสองนาฬิกาสิบเจ็ดนาที เวิร์มเผยแพร่ ในนามของเขา ห้าเวอร์ชันของทุกแพ็กเกจที่โทเค็นเข้าถึงได้ แม้แต่โปรเจ็กต์เสริมเก่า: โทเค็นคลาสสิกหนึ่งอันสำหรับทุกอย่าง หนึ่งร้อยสิบเวอร์ชันในเก้าสิบห้านาที เขาค้นพบทางอีเมล หลังเที่ยงคืน เหตุผลที่มันทำงาน หนึ่ง: npm install รันสคริปต์วงจรชีวิตของคนแปลกหน้าโดยค่าเริ่มต้น และสคริปต์เตรียมการของ git dependency นับรวมด้วย
1:39 สอง: เวิร์มต้องการสิ่งเดียว: โทเค็นที่เผยแพร่ได้โดยไม่ต้องมีปัจจัยที่สอง จากนั้นมันจะถาม Registry ว่าผู้ดูแลคนนั้นเป็นเจ้าของอะไรอีก และเผยแพร่ทั้งหมดพร้อมกับตัวเองอยู่ข้างใน สาม: ไม่มีอะไรในห่วงโซ่ที่เป็นคน
เหตุผลที่มันทำงาน
1:51 บอทเสนอ ไพพ์ไลน์ติดตั้ง และเวิร์มตอบแทนบุญคุณ: มัน สาขา dead-drop มีชื่อว่า dependabot slash github-actions slash fremen git blame โมเดลการติดตั้งของ npm ห้าสิบห้าเปอร์เซ็นต์: สคริปต์รันเมื่อติดตั้ง ที่ถูกยกเลิกยังคงติดตั้งได้ โทเค็นที่ข้ามสองปัจจัยยังคงมีอยู่ CI ของ TanStack ยี่สิบห้า: เวิร์กโฟลว์ Pull Request Target ที่ไม่ได้ตรวจสอบ ที่รันโค้ด fork ด้วยสิทธิ์เขียนไปยังแคช พฤติกรรมการอัปเดต สิบห้า: สิบสามรายการอัปเดตที่รวมกันในยี่สิบสี่นาที โทเค็นอยู่ในห้อง
2:17 Dependabot ห้า: ได้รับความไว้วางใจมากจนเวิร์มสวมเครื่องแบบของมัน
git blame
2:20 รัศมีการระเบิด: สี่สิบสองแพ็กเกจ TanStack ยี่สิบสองรายการดาวน์สตรีม จากโปรเจ็กต์ที่มีเก้าดาว มากกว่าหนึ่งร้อยหกสิบรายการทั่วทั้งระบบนิเวศเมื่อเวิร์มเข้าถึง Mistral ทุกเวอร์ชันอัปสตรีมมีลายเซ็นที่ถูกต้อง: สร้างโดยทางการ ไพพ์ไลน์ จริง คำตัดสิน, โพสต์มอร์เทม: SHIP IT ผู้ดูแลทั้งสองโพสต์โพสต์มอร์เทมที่มีการประทับเวลาภายในหนึ่งวัน; ภายในสามวัน ไพพ์ไลน์ดาวน์สตรีมติดตั้งด้วย ignore-scripts แยก build จาก publish และทิ้งโทเค็นที่มีอายุยาวนาน
รัศมีการระเบิด
2:47 ค่าเริ่มต้นของ npm ยังไม่เปลี่ยนแปลง วันจันทร์: ignore-scripts เมื่อติดตั้ง และโทเค็นเผยแพร่ออกจากงานที่ รันมัน ส่งเหตุการณ์ที่คุณยังไม่ได้รับอนุญาตให้พูดถึงให้ฉัน ในความคิดเห็น หรือที่ thedailydiff.dev และนั่นคือ The Daily Diff สำหรับวันนี้
คำตัดสิน
3:00 ผม Niko จาก 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



