Là những kỹ sư phần mềm làm việc với các hệ thống backend và frontend hiện đại, chúng ta thường xuyên phụ thuộc vào sự ổn định của hệ sinh thái mã nguồn mở. Tuy nhiên, một sự cố bảo mật cực kỳ nghiêm trọng vừa xảy ra vào ngày 11/05/2026: một cuộc tấn công chuỗi cung ứng tinh vi đã cấy mã độc thành công vào các package thuộc hệ sinh thái TanStack – bao gồm thư viện đình đám @tanstack/react-router với hơn 12.7 triệu lượt tải mỗi tuần.

Điều khiến sự cố "Mini Shai-Hulud" này trở nên đặc biệt nguy hiểm là hacker không hề đánh cắp tài khoản hay mật khẩu của người bảo trì (maintainer). Thay vào đó, chúng đã tấn công trực tiếp vào quy trình CI/CD (GitHub Actions) để xuất bản các bản cập nhật độc hại với đầy đủ chứng nhận minh bạch hợp lệ (SLSA provenance).

Hãy cùng phân tích cách cuộc tấn công này diễn ra và những gì bạn cần làm để bảo vệ dự án của mình.

Những thư viện nào bị ảnh hưởng?

Cuộc tấn công nhắm thẳng vào nhóm core của TanStack router. Có tổng cộng 84 phiên bản độc hại thuộc 42 package đã bị xuất bản lên npm, điển hình là:

  • @tanstack/react-router (v1.169.5, 1.169.8)

  • @tanstack/vue-router (v1.169.5, 1.169.8)

  • @tanstack/solid-router (v1.169.5, 1.169.8)

  • @tanstack/router-core (v1.169.5, 1.169.8)

Sự việc không dừng lại ở đó. Mã độc (đóng vai trò như một con sâu npm) có cơ chế tự lây lan và nhanh chóng lan rộng sang hàng chục thư viện lớn khác như @mistralai, @uipath@draftlab.

Hacker đã "qua mặt" hệ thống CI/CD như thế nào?

Kẻ tấn công (được cho là nhóm TeamPCP) đã cực kỳ khôn ngoan khi xâu chuỗi 3 lỗ hổng bảo mật trong quy trình phát hành tự động của TanStack:

1. Khai thác cấu hình pull_request_target

Hacker tạo một Pull Request giả mạo từ một bản fork chứa mã độc. Do file cấu hình CI của TanStack sử dụng trigger pull_request_target nhưng lại check-out mã nguồn từ nhánh fork, mã độc đã được thực thi dưới quyền hạn bảo mật của repository gốc.

2. Đầu độc bộ nhớ đệm (Cache Poisoning)

Mã độc không vội vàng đánh cắp dữ liệu ngay. Thay vào đó, nó âm thầm "đầu độc" kho lưu trữ package của pnpm và lưu vào cache của GitHub Actions. Khoảng 8 giờ sau, khi các maintainer hợp lệ đẩy code lên nhánh main và kích hoạt luồng phát hành (release workflow), hệ thống đã tải lại chính bộ cache đã bị nhiễm độc này.

3. Trực tiếp đánh cắp token OIDC từ bộ nhớ

Luồng phát hành hợp lệ của npm yêu cầu quyền id-token: write để lấy token OIDC dùng cho việc xác thực. Khi mã độc từ bộ nhớ đệm khởi chạy, chúng đã quét trực tiếp bộ nhớ (memory) của máy chủ GitHub Actions Runner, trích xuất thành công token OIDC. Với token này trong tay, hacker đường hoàng đóng gói mã độc và xuất bản (publish) lên npm dưới tư cách chính thức của TanStack.

Điều này dẫn đến việc các package chứa mã độc có đầy đủ chứng chỉ mã hóa SLSA – vốn được sinh ra để chứng minh gói code được build từ nguồn đáng tin cậy. Đáng tiếc, bản thân quy trình build hợp lệ lại đi đóng gói những tệp lệnh không an toàn.

Bạn cần làm gì ngay lập tức?

Nếu các dự án microservices hay hệ thống web của bạn có cập nhật cài đặt nhóm thư viện @tanstack/* vào ngày 11/05/2026, hãy coi môi trường đó đã bị xâm phạm hoàn toàn.

Hãy thực hiện ngay các bước sau:

  1. Cô lập và kiểm tra: Rà soát lại package.jsonpnpm-lock.yaml / package-lock.json để xem dự án có dính các phiên bản độc hại hay không.

  2. Thay đổi toàn bộ Secret (Rotate Secrets): Mã độc này được thiết kế để gom và gửi dữ liệu thông tin xác thực ra ngoài. Bất kỳ API Key, biến môi trường, thông tin kết nối database (như MongoDB, Redis) hay thông tin đăng nhập Cloud VPS nào tồn tại trên máy tính hoặc máy chủ CI dính mã độc đều phải được tạo mới hoàn toàn.

  3. Audit lại CI/CD của riêng bạn: Rà soát lại tất cả các luồng GitHub Actions của bạn. Hết sức cẩn trọng khi sử dụng trigger pull_request_target chung với các action liên quan đến cache hoặc những workflow yêu cầu quyền OIDC cao (id-token: write).

Tổng kết

Sự kiện "Mini Shai-Hulud" là một bài học đắt giá cho toàn bộ cộng đồng phát triển phần mềm. Chúng ta không thể chỉ phụ thuộc hoàn toàn vào các chứng chỉ mã hóa hay uy tín của tổ chức phát hành. Việc hiểu sâu về cách vận hành của CI/CD, cơ chế cấp quyền trong GitHub Actions và quản lý chặt chẽ chuỗi cung ứng dependencies là kỹ năng bắt buộc để bảo vệ sự an toàn cho hệ thống và dữ liệu của người dùng.