Một sâu tự nhân bản đã lặng lẽ lây lan trên kho lưu trữ npm, thực hiện một tấn công mạng tinh vi mà hầu hết các đội ngũ an ninh ít chú ý. Thay vì ẩn mình trong các script package.json, những kẻ tấn công đã vũ khí hóa một tệp cấu hình nhỏ gọi là binding.gyp để kích hoạt mã độc ngay khi nhà phát triển chạy lệnh npm install.
Chiến dịch này đã tấn công hàng chục gói trên nhiều tài khoản maintainer trong một làn sóng kéo dài chưa đầy hai giờ. Điều này cho thấy đây là một cuộc tấn công chuỗi cung ứng nhanh chóng và có hiệu quả cao.
Phân tích Kỹ thuật Cuộc Tấn Công Mạng Bằng binding.gyp
Các Gói npm Bị Ảnh Hưởng và Quy Mô Lây Nhiễm
Vào ngày 3 tháng 6 năm 2026, cuộc tấn công đã xâm phạm 57 gói npm thông qua hơn 286 phiên bản độc hại. Mục tiêu lớn nhất là gói @vapi-ai/server-sdk, SDK máy chủ AI giọng nói chính thức của Vapi.ai, với hơn 408.000 lượt tải xuống hàng tháng, đã bị tấn công đầu tiên vào lúc 23:30 UTC cùng ngày.
Trong vòng một giờ, hơn 50 gói bổ sung thuộc về maintainer jagreehal cũng bị nhiễm độc, bao gồm ai-sdk-ollama, với hơn 120.000 lượt tải xuống hàng tháng.
Kỹ Thuật Khai Thác “Phantom Gyp”
Các nhà nghiên cứu tại StepSecurity đã xác định và phân tích chuỗi tấn công đầy đủ, đặt tên cho kỹ thuật này là “Phantom Gyp”. Báo cáo của StepSecurity giải thích cách kẻ tấn công đã khai thác một tệp binding.gyp chỉ 157 byte để kích hoạt thực thi mã trong quá trình cài đặt.
Kỹ thuật này hoàn toàn vượt qua các kiểm tra vòng đời preinstall và postinstall mà hầu hết các công cụ quét bảo mật được thiết kế để phát hiện. Phương pháp binding.gyp hoạt động vì npm tự động chạy node-gyp rebuild khi phát hiện tệp này, coi đó là tín hiệu gói chứa mã C hoặc C++ gốc.
Kẻ tấn công đã nhúng một lệnh shell bằng cú pháp thay thế lệnh của gyp, lặng lẽ khởi chạy payload độc hại trong khi trả về một tên tệp nguồn giả mạo để quá trình xây dựng không hiển thị lỗi. Các công cụ chỉ quét package.json cho các script cài đặt không thấy điều gì đáng ngờ.
Cơ Chế Che Giấu và Khai Thác Nâng Cao
Tệp index.js độc hại có dung lượng 4.5 MB, trong khi điểm vào hợp pháp của gói chỉ là 27 KB. Khoảng cách kích thước này đáng lẽ phải gây ra sự nghi ngờ ngay lập tức.
Payload được chôn giấu dưới bốn lớp che giấu, bao gồm mã hóa ROT, mã hóa AES-128-GCM và một thủ thuật chuyển đổi runtime. Thủ thuật này tải xuống Bun JavaScript runtime chỉ trong chưa đầy một giây để thực thi giai đoạn cuối cùng bên ngoài Node.js.
Động thái thông minh này đặc biệt né tránh các công cụ bảo mật chỉ giám sát hoạt động tiến trình của Node.js. Điều này làm tăng thách thức cho việc phát hiện và ứng phó với tấn công mạng.
Chức Năng và Mục Tiêu Của Mã Độc Miasma
Thu Thập Thông Tin Xác Thực Toàn Diện
Khi hoạt động, mã độc đóng vai trò là một công cụ thu thập thông tin xác thực toàn diện, được xây dựng đặc biệt cho môi trường CI/CD. Nó nhắm mục tiêu vào các khóa AWS, thông tin xác thực GCP, token Azure, token HashiCorp Vault, bí mật GitHub Actions và kho 1Password.
Nó trực tiếp lấy bộ nhớ của GitHub Actions runner để kéo các bí mật bị che giấu ra dưới dạng không che giấu. Đây là kỹ thuật tương tự đã được quan sát thấy trong vụ xâm phạm TanStack từ tháng 5 năm 2026. Các thông tin xác thực bị đánh cắp được mã hóa và tải lên các kho lưu trữ được tạo theo chương trình dưới tài khoản GitHub do kẻ tấn công kiểm soát là liuende501. Điều này dẫn đến nguy cơ rò rỉ dữ liệu nghiêm trọng.
Lây Nhiễm và Duy Trì Quyền Kiểm Soát
Sâu độc không dừng lại ở việc đánh cắp thông tin xác thực. Nó sử dụng các token npm bị đánh cắp để liệt kê mọi gói mà một maintainer bị xâm phạm sở hữu. Sau đó, nó tiêm payload binding.gyp vào từng gói và phát hành lại với chứng chỉ SLSA provenance và Sigstore signing giả mạo.
Điều này khiến các gói bị tái nhiễm trông hoàn toàn hợp pháp, ngay cả đối với các công cụ được thiết kế đặc biệt để xác minh tính toàn vẹn của chuỗi cung ứng. Đây là một thách thức lớn đối với an ninh mạng.
Mã độc cũng tiêm các tệp cấu hình backdoor vào các trợ lý mã hóa AI như Claude Code, Cursor và Gemini. Vì vậy, mọi gợi ý được hỗ trợ bởi AI trong một dự án bị nhiễm độc đều có thể bị kẻ tấn công ảnh hưởng một cách thầm lặng.
Chỉ Dẫn Phòng Ngừa và Giảm Thiểu Rủi Ro Trước Tấn Công Mạng
Khuyến Nghị Ngay Lập Tức
StepSecurity khuyên các đội ngũ nên ngay lập tức kiểm toán các kho lưu trữ và CI pipelines để tìm bất kỳ gói nào bị ảnh hưởng. Tất cả thông tin xác thực từ các môi trường bị xâm phạm cần được coi là bị đánh cắp và xoay vòng ngay lập tức.
Các đội ngũ cũng nên tìm kiếm các tệp trợ lý AI bị tiêm như .claude/setup.mjs, .cursor/rules/setup.mdc và .vscode/setup.mjs trong các kho lưu trữ dự án của mình.
Phát Hiện và Ngăn Chặn
Chặn truy cập mạng đi ra đến github.com/liuende501 và điểm cuối tải xuống Bun được khuyến nghị mạnh mẽ như một biện pháp ngăn chặn tức thì. Đây là bước quan trọng để bảo vệ an ninh mạng.
Các Chỉ Số Thỏa Hiệp (IoCs)
- Tài khoản GitHub của kẻ tấn công:
liuende501(trên github.com) - Điểm cuối tải xuống của Bun: Các đội ngũ nên chặn quyền truy cập mạng ra ngoài tới các URL tải xuống Bun (chi tiết cần được theo dõi thông qua các công cụ Threat Intelligence).
- Chuỗi nhận dạng của kẻ tấn công: Chuỗi đảo ngược giải mã thành “Shai-Hulud: Here We Go Again”, được tìm thấy trong mô tả của 195 kho lưu trữ GitHub.
- Các tệp cấu hình AI bị tiêm:
.claude/setup.mjs.cursor/rules/setup.mdc.vscode/setup.mjs










