# Dependabot bump เผยแพร่เวิร์ม 22 แพ็กเกจ

Published: 2026-09-17

บอทเปิด Pull Request มนุษย์รวมมันใน 24 นาทีหลังจากนั้น 95 นาทีหลังจากนั้น เวิร์มได้เผยแพร่ 110 เวอร์ชันที่เป็นอันตรายของ 22 แพ็กเกจ npm ของเขา ภายใต้ชื่อของเขา ด้วยโทเค็นที่มันพบใน CI ของเขา

Canonical: https://thedailydiff.dev/th/video/2026-09-17-dependabot-tanstack/

## วิดีโอนี้ครอบคลุมอะไรบ้าง

- บอท มนุษย์ เวิร์ม
- มันเกิดขึ้นได้อย่างไร ทำไม npm ถึงอนุญาต ใครรับผิดชอบ
- ไทม์ไลน์: แคชที่เป็นพิษ
- 21:48 — การอัปเดต Dependabot
- เหตุผลที่มันทำงาน

## บท

- 0:00 บอท มนุษย์ เวิร์ม
- 0:20 มันเกิดขึ้นได้อย่างไร ทำไม npm ถึงอนุญาต ใครรับผิดชอบ
- 0:30 ไทม์ไลน์: แคชที่เป็นพิษ
- 1:15 21:48 — การอัปเดต Dependabot
- 1:50 เหตุผลที่มันทำงาน
- 2:20 git blame
- 2:45 รัศมีการระเบิด
- 3:00 คำตัดสิน

## บทถอดเสียงที่แปลแล้ว

แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย 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)](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem) — tanstack.com
- [TanStack "Hardening TanStack After the npm Compromise" (May 12)](https://tanstack.com/blog/incident-followup) — tanstack.com
- [TanStack/router#7383 — the StepSecurity detection issue](https://github.com/TanStack/router/issues/7383) — github.com
- [Downstream incident post, @squawk/\* (May 12)](https://github.com/neilcochran/squawk/discussions/251) — github.com
- [Downstream hardening post (May 14)](https://github.com/neilcochran/squawk/discussions/264) — github.com
- [The Dependabot PR #246 (opened 21:48 UTC, merged 22:12)](https://github.com/neilcochran/squawk/pull/246) — github.com
- [@tan\_stack advisory post, 21:19 UTC](https://x.com/tan_stack/status/2053948103766716630) — x.com
- [StepSecurity — worm internals, bypass\_2fa search, Dependabot-style branch names](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem) — www.stepsecurity.io
- [Socket](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack) — socket.dev
- [Aikido — "over 160 packages, including Mistral"](https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised) — www.aikido.dev
- [Hacker News (1,097 points)](https://news.ycombinator.com/item?id=48100706) — news.ycombinator.com
