Phân tích sau sự cố: Cuộc tấn công chuỗi cung ứng npm của TanStack
Vào ngày 11/05/2026, kẻ tấn công đã phát hành 84 phiên bản độc hại trên 42 gói npm của TanStack bằng cách khai thác lỗ hổng GitHub Actions và cache poisoning. Mặc dù không có token npm nào bị đánh cắp trực tiếp, người dùng được khuyến cáo xoay vòng toàn bộ thông tin đăng nhập nếu đã cài đặt các phiên bản bị ảnh hưởng.

Vào ngày 11/05/2026, giữa khung giờ 19:20 và 19:26 UTC, hệ sinh thái JavaScript đã phải đối mặt với một cuộc tấn công chuỗi cung ứng nghiêm trọng nhắm vào các thư viện của TanStack. Kẻ tấn công đã thành công trong việc phát hành 84 phiên bản độc hại trên 42 gói npm thuộc phạm vi @tanstack/*.
Sự cố này được kích hoạt bởi sự kết hợp của ba lỗ hổng: mô hình "Pwn Request" thông qua pull_request_target, việc nh độc cache (cache poisoning) GitHub Actions qua ranh giới tin cậy giữa fork và kho chính (base repo), và kỹ thuật trích xuất token OIDC từ bộ nhớ runtime của quy trình Actions.
Kỹ thuật tấn công chuỗi lỗ hổng
Cuộc tấn công này là một ví dụ điển hình về việc xâu chuỗi các lỗ hổng dường như không liên quan để vượt qua các biên pháp bảo mật.
Đầu tiên, kẻ tấn công đã khai thác tệp bundle-size.yml. Quy trình công việc này sử dụng pull_request_target cho các PR từ fork, cho phép nó chạy code trong ngữ cảnh của kho chính với quyền hạn cao hơn. Mặc dù tác giả đã cố gắng tách biệt quyền hạn, nhưng kẻ tấn công đã lợi dụng việc này để tiêm mã độc vào cache.
Cụ thể, mã độc vite_setup.mjs được thiết kế để ghi dữ liệu vào thư mục cache pnpm với một khóa mà quy trình phát hành chính release.yml sẽ sử dụng sau này. Khi công việc benchmark kết thúc, hành động actions/cache@v5 đã lưu trữ cache pnpm đã bị nhiễm độc này.
Khi release.yml chạy tiếp theo trên nhánh chính, nó khôi phục lại cache đã bị nhiễm độc. Tại thời điểm này, các tệp nhị phân do kẻ tấn công kiểm soát được thực thi trong quá trình build. Chúng sử dụng một kỹ thuật trích xuất bộ nhớ (được ghi nhận từ các sự cố trước đây như tj-actions/changed-files) để lấy cắp token OIDC từ bộ nhớ của trình chạy GitHub Actions.
Token này sau đó được sử dụng để xuất bản các gói npm độc hại lên registry chính thức.
Phản ứng và Hậu quả
Các phiên bản độc hại đã được phát hiện công khai chỉ trong vòng 20 phút bởi nhà nghiên cứu ashishkurmi (thuộc stepsecurity). Hiện tại, tất cả các phiên bản bị ảnh hưởng đã bị đánh dấu là không dùng nữa (deprecated) và npm security đã tham gia để gỡ bỏ các tệp tarball khỏi registry.
Tuy nhiên, do tính chất của payload, bất kỳ nhà phát triển hoặc môi trường CI nào chạy npm install, pnpm install hoặc yarn install đối với phiên bản bị ảnh hưởng vào ngày 11/05/2026 đều phải coi máy chủ (host) của mình đã bị xâm phạm.
Mã độc router_init.js (khoảng 2,3 MB, đã bị làm rối mã) được thực thi như một phần của vòng đời cài đặt npm.
Khuyến nghị cho cộng đồng
Đội ngũ TanStack khẳng định không có bằng chứng cho thấy thông tin đăng nhập npm bị đánh cắp, nhưng do mã độc có khả năng truy cập vào môi trường hệ thống, họ đưa ra khuyến cáo mạnh mẽ:
"Chúng tôi khuyên mạnh rằng bất kỳ ai đã cài đặt phiên bản bị ảnh hưởng vào ngày 2026-05-11 nên xoay vòng (thay đổi) thông tin đăng nhập cho AWS, GCP, Kubernetes, Vault, GitHub, npm và SSH có thể truy cập được từ máy chủ cài đặt."
Danh sách đầy đủ các phiên bản bị ảnh hưởng và các gói an toàn (như @tanstack/query, @tanstack/table) có thể được tìm thấy trong Cảnh báo Bảo mật GitHub: GHSA-g7cv-rxg3-hmpx.
Bài viết liên quan

Phần mềm
Intel và AMD vá tổng cộng 70 lỗ hổng bảo mật trong Patch Tuesday tháng 5
13 tháng 5, 2026

Phần mềm
Plugin Checkmarx Jenkins bị xâm phạm trong cuộc tấn công chuỗi cung ứng
11 tháng 5, 2026

Công nghệ
Substrate (YC S24) tuyển dụng Technical Success Manager cho nền tảng AI chuyên xử lý thanh toán y tế
13 tháng 5, 2026
