# Một bản cập nhật của Dependabot đã phát tán một con sâu. 22 gói.

Published: 2026-09-17

Một bot mở một pull request. Một người hợp nhất nó 24 phút sau đó. 95 phút sau đó, một con sâu đã phát hành 110 phiên bản độc hại của 22 gói npm của anh ấy, dưới tên anh ấy, với một token mà nó tìm thấy trong CI của anh ấy.

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

## Nội dung video này đề cập

- Một bot, một người, một con sâu
- Cách nó xảy ra, tại sao npm cho phép, ai là người chịu trách nhiệm
- Dòng thời gian: bộ nhớ đệm bị nhiễm độc
- 21:48 — bản cập nhật của Dependabot
- Tại sao nó hoạt động

## Chương

- 0:00 Một bot, một người, một con sâu
- 0:20 Cách nó xảy ra, tại sao npm cho phép, ai là người chịu trách nhiệm
- 0:30 Dòng thời gian: bộ nhớ đệm bị nhiễm độc
- 1:15 21:48 — bản cập nhật của Dependabot
- 1:50 Tại sao nó hoạt động
- 2:20 git blame
- 2:45 Phạm vi ảnh hưởng
- 3:00 Phán quyết

## Bản ghi đã dịch

Được dịch từ lời tường thuật tiếng Anh gốc. Âm thanh và phụ đề có sẵn được điều khiển bởi YouTube.

### Một bot, một người, một con sâu

0:00 Một bot mở một pull request; một người hợp nhất nó hai mươi bốn phút sau đó. Chín mươi lăm phút sau, một con sâu đã phát hành một trăm mười phiên bản của gói, với tư cách là anh ấy. Bài phân tích sự cố của TanStack có các mốc thời gian thượng nguồn, của người bảo trì hạ nguồn có phần còn lại, và Hacker News cho nó một nghìn một trăm điểm và một cái tên: Mini Shai-Hulud. Cách nó xảy ra, tại sao npm cho phép, ai là người chịu trách nhiệm.

### Cách nó xảy ra, tại sao npm cho phép, ai là người chịu trách nhiệm

0:21 Đây là The Daily Diff, phân tích sự cố. Ngày 11 tháng 5, buổi sáng. Một fork được đổi tên mở một pull request chống lại TanStack Router. Nó đóng trong vòng một giờ, nhưng một quy trình làm việc benchmark đã chạy mã của nó và

### Dòng thời gian: bộ nhớ đệm bị nhiễm độc

0:33 lưu một bộ nhớ đệm bị nhiễm độc dưới khóa mà quy trình làm việc phát hành sẽ sử dụng. Mười chín hai mươi. Một bản hợp nhất hợp lệ chạy bản phát hành. Bộ nhớ đệm quay lại, một tệp nhị phân đọc bộ nhớ của runner, lấy token publish, và phát hành tám mươi tư phiên bản trên bốn mươi hai gói, với nguồn gốc hợp lệ. Kiểm tra thất bại. Nó vẫn publish. Mười chín bốn mươi sáu, một nhà nghiên cứu StepSecurity nộp vấn đề; đến chín giờ UTC mọi thứ đã bị deprecated và khuyến nghị đã được đưa ra.

0:55 Deprecated không có nghĩa là biến mất: npm từ chối hủy publish bất cứ thứ gì có phụ thuộc, vì vậy nó vẫn có thể cài đặt được trong nhiều giờ. Hai mươi mốt bốn mươi tám. Trong một dự án dữ liệu hàng không chín sao, Dependabot mở pull request thường lệ của nó: cập nhật nhóm dev-dependencies, mười ba bản cập nhật. Hai trong số đó là các phiên bản TanStack bị nhiễm độc. Hai mươi hai mười hai: đã hợp nhất. Quy trình làm việc publish chạy npm C-I với token trong

### 21:48 — bản cập nhật của Dependabot

1:15 phạm vi; một tập lệnh prepare đọc nó, và lúc hai mươi hai mười bảy con sâu publish với tư cách là anh ấy. Năm phiên bản của mỗi gói mà token tiếp cận, ngay cả một dự án phụ cũ: một token cổ điển cho mọi thứ. Một trăm mười phiên bản trong chín mươi lăm phút. Anh ấy phát hiện ra qua email, sau nửa đêm. Tại sao nó hoạt động. Một: npm install chạy các tập lệnh vòng đời của người lạ theo mặc định, và một tập lệnh prepare của dependency git được tính.

1:39 Hai: con sâu muốn một thứ: một token publish mà không có yếu tố thứ hai. Sau đó, nó hỏi registry những gì người bảo trì đó còn sở hữu, và tái phát hành tất cả với chính nó bên trong. Ba: không có gì trong chuỗi là một người.

### Tại sao nó hoạt động

1:51 Một bot đề xuất, một pipeline cài đặt, và con sâu trả ơn: các nhánh dead-drop của nó được đặt tên dependabot slash github-actions slash fremen. git blame. Mô hình cài đặt của npm, năm mươi lăm phần trăm: các tập lệnh chạy khi cài đặt, đã deprecated vẫn có thể cài đặt, các token bỏ qua xác thực hai yếu tố tồn tại. CI của TanStack, hai mươi lăm: một quy trình làm việc pull request target không được kiểm tra chạy mã fork với quyền ghi vào bộ nhớ đệm. Thói quen cập nhật, mười lăm: mười ba bản cập nhật được hợp nhất trong hai mươi bốn phút, token trong phòng.

2:17 Dependabot, năm: được tin cậy đến nỗi con sâu mặc đồng phục của nó.

### git blame

2:20 Phạm vi ảnh hưởng: bốn mươi hai gói TanStack. Hai mươi hai hạ nguồn, từ một dự án có chín sao. Hơn một trăm sáu mươi trên toàn hệ sinh thái một khi con sâu đến Mistral. Mọi phiên bản thượng nguồn đều mang một chữ ký hợp lệ: được xây dựng bởi official pipeline. Đúng. Phán quyết, phân tích sự cố: SHIP IT. Cả hai người bảo trì đều đăng các bài phân tích sự cố có dấu thời gian trong vòng một ngày; trong vòng ba ngày, pipeline hạ nguồn cài đặt với ignore-scripts, tách build khỏi publish, và loại bỏ token tồn tại lâu dài.

### Phạm vi ảnh hưởng

2:47 Các cài đặt mặc định của npm vẫn chưa thay đổi. Thứ Hai: ignore-scripts khi cài đặt, và token publish ra khỏi job mà chạy nó. Gửi cho tôi sự cố mà bạn vẫn chưa được phép nói đến, trong phần bình luận, hoặc tại thedailydiff.dev. Và đó là the diff cho hôm nay.

### Phán quyết

3:00 Tôi là Niko từ Axrisi. Hợp nhất có trách nhiệm.

## Nguồn

- [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
