- Shai Hulud 2.0 tiếp tục tấn công hệ sinh thái npm, lây nhiễm các gói của những dự án lớn như Zapier, ENS Domains, AsyncAPI, PostHog, Postman
- Mã độc tự động chạy trong quá trình cài đặt để đánh cắp bí mật trên hệ thống của nhà phát triển và trong môi trường đám mây
- Trên các hệ thống bị nhiễm, nó dùng TruffleHog để tìm API key, token, mật khẩu rồi tải chúng lên kho GitHub công khai
- Đợt tấn công này mở rộng hơn trước, với tối đa 100 gói bị lây nhiễm, đồng thời có thêm chức năng xóa tệp trong thư mục home khi xác thực thất bại
- Đây là một cuộc tấn công chuỗi cung ứng quy mô lớn đe dọa mô hình tin cậy của hệ sinh thái npm, làm nổi bật sự cần thiết phải rà soát và thay thế bí mật cho mọi đội ngũ phát triển
Tổng quan về chiến dịch Shai-Hulud
- Shai-Hulud là mã độc dạng sâu tự sao chép trong hệ sinh thái npm, lây lan nhanh qua các môi trường phát triển đã bị nhiễm
- Khi lây nhiễm, nó dùng TruffleHog để tìm kiếm các bí mật bị lộ như API key, token
- Thông tin thu thập được sẽ được gửi tới kho GitHub công khai, sau đó các gói độc hại mới lại được phát hành lên npm để tiếp tục phát tán
- Kẻ tấn công gọi đợt này là “Second Coming”
- Cuộc tấn công được tái khởi động đúng vào thời điểm npm thông báo thu hồi token cũ vào ngày 9 tháng 12
Dòng thời gian tấn công
- 27 tháng 8: công bố báo cáo về chiến dịch S1ngularity
- 16 tháng 9: xảy ra cuộc tấn công Shai-Hulud đầu tiên
- 18 tháng 9: công bố phân tích kỹ thuật và hành vi của payload
- 24 tháng 11: ngay trước khi npm thu hồi token, cuộc tấn công thứ hai (Second Coming) xảy ra
Thay đổi trong phương thức tấn công
- Đợt này sử dụng tệp
setup_bun.js để cài runtime Bun, sau đó chạy bun_environment.js
- Tạo kho GitHub với tên ngẫu nhiên để tải dữ liệu đánh cắp lên
- Số gói bị nhắm mục tiêu tăng từ 20 lên 100
- Khi xác thực GitHub hoặc npm thất bại, mã độc có thể xóa toàn bộ thư mục home của người dùng
Các gói bị nhiễm
- Tổng cộng 492 gói npm bị nhiễm, với tổng lượt tải hàng tháng lên tới 132 triệu
- Các dự án bị ảnh hưởng lớn gồm: Zapier, ENS Domains, AsyncAPI, PostHog, Postman, Browserbase
- Ví dụ các gói:
@zapier/zapier-sdk, @ensdomains/ensjs, @asyncapi/cli, posthog-js, @postman/pm-bin-linux-x64
Rò rỉ bí mật
- Mã độc tải bí mật lên các kho GitHub có phần mô tả chứa “Sha1-Hulud: The Second Coming”
- Đến nay, đã xác nhận có hơn 26.300 kho bị lộ
Sai sót của kẻ tấn công
- Một số gói chỉ chứa
setup_bun.js nhưng thiếu bun_environment.js, khiến sâu không thể chạy đầy đủ
- Vì vậy, phạm vi lây lan của cuộc tấn công bị hạn chế
Đường lây nhiễm và điểm xâm nhập ban đầu
- Ca nhiễm đầu tiên bắt đầu vào 2025-11-24 03:16:26 GMT+0 từ
go-template và 36 gói liên quan đến AsyncAPI
- Sau đó lan sang PostHog (04:11:55) rồi Postman (05:09:25)
- Trong kho AsyncAPI CLI, đã phát hiện mã được phát hành sau khi tạo nhánh độc hại
Tác động tiềm tàng
- Tự động chạy khi cài đặt, cho phép truy cập môi trường cục bộ của nhà phát triển, hệ thống build và thông tin xác thực đám mây
- Bí mật bị đánh cắp có thể được dùng để xâm phạm thêm tài khoản và phát hành gói độc hại
- Đây là mối đe dọa nghiêm trọng đối với bảo mật chuỗi cung ứng dựa trên niềm tin của hệ sinh thái npm
Khuyến nghị ứng phó bảo mật
- Rà soát toàn bộ các dependency npm liên quan đến Zapier và ENS
- Thay mới toàn bộ bí mật của GitHub, npm, đám mây và CI/CD
- Tìm trên GitHub các kho có mô tả chứa “Sha1-Hulud: The Second Coming”
- Vô hiệu hóa script npm
postinstall trong môi trường CI
- Cố định phiên bản gói và bật MFA, đồng thời dùng các công cụ như Safe-Chain để chặn gói độc hại
Kết luận
- Shai-Hulud 2.0 là một đợt tái tấn công quy mô lớn nhắm vào chuỗi cung ứng npm,
ảnh hưởng tới hàng trăm gói phổ biến và hàng nghìn kho GitHub
- Mọi đội ngũ phát triển cần xác minh dependency, thay thế bí mật và chặn các script cài đặt tự động ngay lập tức
1 bình luận
Ý kiến trên Hacker News
Đáng để nhắc đến Bubblewrap(bwrap). Công cụ này có thể loại bỏ phần lớn các vector tấn công có thể xảy ra trong môi trường npm/node, hoặc ít nhất là giới hạn thiệt hại khi thực thi mã tùy ý
Không phải giải pháp hoàn hảo, nhưng khi dùng cùng một script wrapper đơn giản thì theo tôi nó tốt hơn nhiều so với container rootless Podman
Liên kết GitHub của Bubblewrap
Chia sẻ một script viết bằng Python. Script này giúp kiểm tra xem trong các kho của tôi có gói bị xâm phạm trong file lock của pnpm hoặc npm hay không
Liên kết script
Ban đầu trông có vẻ là bài trùng lặp (Dup), nhưng thực ra là một bài khác
Liên kết liên quan
Thông báo rằng cuộc thảo luận trùng lặp đang diễn ra ở đây
Chỉ ra rằng tiêu đề có lỗi chính tả. Tiêu đề HN hiện tại là
Sha1-Hulud: The Second Comingsha1-huludLiên kết tìm kiếm GitHub liên quan