1 điểm bởi GN⁺ 2025-11-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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-template36 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

 
GN⁺ 2025-11-25
Ý 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

    • Giải thích rằng họ đã gộp các bình luận liên quan lại thành một. Dù liên kết khác nhau, nếu chủ đề thảo luận về bản chất là giống nhau thì vẫn đáp ứng tiêu chí gộp. Vì liên kết thứ hai có thêm thông tin nên nó cũng được hiển thị ở đầu bài gốc
    • Nhắc rằng bài này có khá nhiều thông tin bổ sung
    • Đề xuất dùng “Dup” cho các lần gửi lại cùng một liên kết, còn với liên kết khác nhưng nói về cùng một sự việc thì dùng “See also”
    • Nhấn mạnh rằng đây không phải bài trùng lặp, mà là một bài khác về cùng sự việc
    • Đồng thời đưa thêm để tham khảo Shai-Hulud Returns: Over 300 NPM Packages Infected (helixguard.ai)
  • 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 Comming – Postman, Zapier, PostHog All Compromised via NPM
    nhưng cách viết đúng là Shai-Hulud

    • Tuy nhiên, có vẻ sự nhầm lẫn xuất phát từ việc tên kho chứa bí mật bị tải lên thực tế là Sha1-Hulud: The Second Coming
    • Bản thân con worm đang đăng bí mật lên GitHub với tên sha1-hulud
      Liên kết tìm kiếm GitHub liên quan
    • Cũng có ý kiến nói rằng “coming” chỉ nên có một chữ m, và hỏi liệu đó có phải là một cách chơi chữ có chủ đích hay không
    • Họ nói không hiểu vì sao bị downvote, đồng thời giải thích rằng cuộc tấn công thực tế không liên quan đến thuật toán SHA1, và cái tên đó cũng không phải một kiểu nhại có chủ đích