3 điểm bởi GN⁺ 2025-09-20 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Nhiều gói npm có chứa gói mã nguồn mở @ctrl/tinycolor đã bị nhiễm các phiên bản độc hại; nguyên nhân là npm token bị đánh cắp thông qua quy trình GitHub Actions trong một kho lưu trữ cộng tác
  • Kẻ tấn công đã dùng npm token có quyền rộng để phát tán mã độc tới khoảng 20 gói; trong số đó, @ctrl/tinycolor có tới 2 triệu lượt tải mỗi tuần nên mức độ ảnh hưởng rất lớn
  • Các phiên bản bị nhiễm đã thực thi payload độc hại ở bước postinstall, và đội ngũ bảo mật của GitHub cùng npm đã phản ứng nhanh để gỡ bỏ và xử lý dọn dẹp
  • Tác giả đã chuẩn bị kế hoạch tăng cường bảo mật nhằm ngăn tái diễn, bao gồm chuyển sang Trusted Publishing(OIDC), giảm thiểu quyền token, bắt buộc 2FA, và tận dụng các tính năng của pnpm
  • Sự cố lần này cho thấy điểm yếu của bảo mật chuỗi cung ứng phần mềm, đồng thời là ví dụ cho thấy cần cải thiện các tính năng bảo mật và thay đổi thực hành bảo mật trong toàn bộ hệ sinh thái npm

TL;DR

  • Một quy trình GitHub Actions độc hại đã được đẩy lên kho lưu trữ dùng chung để đánh cắp npm token
  • Với token đó, kẻ tấn công đã phát tán các phiên bản độc hại của 20 gói, trong đó @ctrl/tinycolor có lượng tải rất lớn nên tác động lan rộng
  • Tài khoản cá nhân hay repository không bị xâm nhập trực tiếp, cũng không có phishing hay cài mã độc cục bộ
  • Nhờ phản ứng nhanh của đội bảo mật GitHub/npm, các phiên bản độc hại đã bị gỡ bỏ, sau đó các phiên bản sạch được phát hành lại để dọn cache

Diễn biến phát hiện sự cố (How I Found Out)

  • Chiều ngày 15 tháng 9, thành viên cộng đồng Wes Todd đã báo về vấn đề qua DM trên Bluesky
  • Khi đó, đội bảo mật GitHub/npm đã bắt đầu tổng hợp danh sách các gói bị ảnh hưởng và tiến hành gỡ bỏ
  • Một manh mối ban đầu được chia sẻ là tên nhánh độc hại 'Shai-Hulud', lấy từ tên sandworm trong thế giới Dune

Điều thực sự đã xảy ra (What Actually Happened)

  • Trong repository angulartics2 từng cộng tác từ lâu, vẫn còn một cộng tác viên có quyền admin
  • npm token được lưu trong kho đó đã bị đánh cắp bởi một quy trình GitHub Actions độc hại
  • Với token này, kẻ tấn công đã phát hành khoảng 20 gói, bao gồm @ctrl/tinycolor
  • Đội bảo mật GitHub/npm đã nhanh chóng xóa các phiên bản độc hại, và tác giả đã phát hành lại các phiên bản mới đáng tin cậy

Tác động (Impact)

  • Nếu cài các phiên bản độc hại, script postinstall sẽ chạy và tạo ra rủi ro bảo mật
  • Người dùng bị ảnh hưởng được khuyến nghị tham khảo hướng dẫn ứng phó khẩn cấp của StepSecurity

Thiết lập phát hành và kế hoạch ứng phó (Publishing Setup & Interim Plan)

  • Trước đây, việc phát hành tự động được thực hiện bằng tổ hợp semantic-release + GitHub Actions
  • Dù đã dùng tính năng provenance của npm, điều đó vẫn không thể ngăn kẻ tấn công sở hữu token hợp lệ
  • Trong tương lai, tác giả dự định áp dụng Trusted Publishing(OIDC) để loại bỏ token tĩnh
  • Hiện tại, tất cả token đã bị thu hồi; đồng thời đang áp dụng thêm các biện pháp như bắt buộc 2FA, chỉ cho phép token có quyền granular, và xem xét tính năng minimumReleaseAge của pnpm

Các cải tiến lý tưởng (Publishing Wishlist)

  • Cần có tùy chọn ở cấp tài khoản npm để bắt buộc Trusted Publishing dựa trên OIDC
  • Cần hỗ trợ chặn phát hành khi thiếu provenance, và tích hợp hoàn chỉnh giữa semantic-release với OIDC
  • Mong muốn GitHub UI cung cấp tính năng phát hành được phê duyệt thủ công dựa trên 2FA
  • Ngay cả không có gói Pro, người dùng vẫn nên có thể tận dụng mức bảo vệ như GitHub Environments
  • Trên trang gói npm, cần hiển thị việc có dùng script postinstall hay không và công khai lý do của các phiên bản đã bị xóa

Chưa có bình luận nào.

Chưa có bình luận nào.