Cuộc tấn công chuỗi cung ứng npm mới nhất đã ảnh hưởng đến hàng trăm gói JavaScript liên quan đến thư viện @antv, gây rủi ro an toàn thông tin cho các ứng dụng tự động cập nhật phụ thuộc. Theo báo cáo kỹ thuật, đây là một trong những sự cố lớn nhất gần đây trong hệ sinh thái npm supply chain attack.
Phạm vi ảnh hưởng của cuộc tấn công mạng
Chiến dịch được ghi nhận vào rạng sáng 19/05/2026, khi mã độc được chèn vào các gói phổ biến dùng bởi hàng triệu lập trình viên. Một trong những gói bị ảnh hưởng là echarts-for-react, wrapper React có khoảng 1,1 triệu lượt tải mỗi tuần.
Nhà nghiên cứu từ Socket.dev phát hiện hành vi phát hành gói độc hại gần như theo thời gian thực và gắn nhãn các phiên bản bị tác động là known malware. Báo cáo của Socket ghi nhận 639 phiên bản gói bị xâm nhập trên 323 gói duy nhất trong đợt “5/19 Mini Shai-Hulud wave”, với phần lớn phát hiện trong vòng 6 đến 12 phút sau khi được xuất bản. Tham khảo báo cáo tại: https://socket.dev/blog/antv-packages-compromised.
Trên phạm vi chiến dịch rộng hơn, Socket theo dõi 1.055 phiên bản trên 502 gói duy nhất thuộc các registry npm, PyPI và Composer. Riêng hệ sinh thái npm chiếm phần lớn với 1.048 phiên bản bị xâm nhập trên 498 gói.
Đường đi của lây nhiễm trong chuỗi cung ứng npm
Nhóm tấn công đã chiếm quyền tài khoản duy trì gói được biết đến với tên “atool” và dùng tài khoản này để đẩy các phiên bản bị cấy mã độc lên nhiều gói phổ biến. Ngoài các gói lõi của @antv, tác động còn lan sang các gói không liên quan trực tiếp như timeago.js, size-sensor và canvas-nest.js.
Phạm vi ảnh hưởng đáng chú ý vì tài khoản phát hành liên quan đến các gói dùng trong data visualization, graphing, mapping và phát triển React component. Chỉ cần một phần trong số đó được cập nhật độc hại, các hệ thống tự động kéo phiên bản mới có thể bị xâm nhập trái phép ở tầng phụ thuộc.
Cơ chế cài mã độc qua preinstall
Payload độc hại bám theo mẫu của họ mã độc Mini Shai-Hulud. Mỗi gói bị chiếm quyền chứa một file index.js ở thư mục gốc, file này sửa package.json để kích hoạt tải trọng ở thời điểm cài đặt thông qua hook preinstall chạy trên Bun.
Mã độc được làm rối bằng string-array lookup table kích thước lớn và một custom decryptor, nhằm che giấu chuỗi nhạy cảm khỏi các bước kiểm tra tĩnh cơ bản.
"preinstall": "bun index.js"Hành vi thu thập và exfiltration dữ liệu
Sau khi được kích hoạt, payload thu thập dữ liệu nhạy cảm từ môi trường phát triển và CI/CD. Thông tin bị nhắm đến gồm GitHub tokens, AWS credentials, Kubernetes service-account material, SSH private keys, Vault tokens, file xác thực Docker và chuỗi kết nối cơ sở dữ liệu.
Dữ liệu bị đánh cắp được tuần tự hóa, nén bằng gzip, mã hóa bằng AES-256-GCM, sau đó khóa được bọc bằng RSA-OAEP trước khi gửi về máy chủ điều khiển. Lớp mã hóa nhiều tầng này khiến việc khôi phục nội dung từ network traffic logs trở nên khó khăn hơn.
Hành vi exfiltration cũng có cơ chế thứ cấp: nếu lấy được GitHub token hợp lệ, mã độc tạo repository mới trong tài khoản nạn nhân và commit dữ liệu bị đánh cắp vào các file theo cấu trúc tên định sẵn. Cách làm này lợi dụng GitHub như một hạ tầng tin cậy để ẩn lưu lượng rò rỉ dữ liệu.
IOC liên quan đến chiến dịch
- Marker chiến dịch: chuỗi nhận diện đảo ngược được dùng trong mô tả repository.
- Tên repository mẫu:
sayyadina-stillsuit-852,fremen-fedaykin-225. - Kiểu hành vi: tạo repository mới, commit dữ liệu bị đánh cắp, sử dụng tên và mô tả có cùng marker đảo ngược.
- Payload: file
index.jsở root, hookpreinstall, triển khai trên Bun.
Ảnh hưởng đến hệ thống và bề mặt tấn công
Chiến dịch này tạo ra blast radius rất lớn vì chuỗi cung ứng npm được dùng trong nhiều ứng dụng web hiện đại. Các tổ chức có quy trình tự động cập nhật dependency sẽ đối mặt với nguy cơ hệ thống bị tấn công ngay khi gói mới được kéo về môi trường build hoặc runtime.
Payload còn có khả năng tự lan truyền. Nó kiểm tra thông tin xác thực npm đã chiếm được, liệt kê các gói mà tài khoản có quyền xuất bản, chèn mã độc và phát hành lại phiên bản đã chỉnh sửa. Cơ chế này khiến cuộc tấn công mạng mang đặc tính worm-like, lan từ tài khoản duy trì này sang tài khoản duy trì khác mà không cần thêm thao tác thủ công.
Khuyến nghị kiểm tra và ứng phó
Các nhóm phát triển và bảo mật cần rà soát ngay các bản cập nhật gần đây từ @antv và các namespace npm liên quan. Nếu môi trường đã cài các phiên bản bị ảnh hưởng, cần coi đây là tình huống rủi ro an toàn thông tin và thực hiện xoay vòng toàn bộ secrets có khả năng đã đi qua hệ thống đó.
Ngoài ra, nên kiểm tra log của pipeline CI/CD để phát hiện hành vi tạo repository GitHub bất thường, đặc biệt trong giai đoạn build hoặc publish package. Các sự kiện publish lạ, thay đổi đột ngột trong package.json, hoặc xuất hiện hook preinstall không mong muốn đều là dấu hiệu cần điều tra.
npm ls @antv/*
npm audit --production
cat package.json | grep -n "preinstall"Điểm cần lưu ý trong phát hiện tấn công
Trong môi trường giám sát, có thể ưu tiên theo dõi các dấu hiệu sau để hỗ trợ phát hiện xâm nhập:
- Xuất hiện phiên bản package mới bất thường từ namespace @antv.
- Thay đổi trong index.js ở root package.
- Hook preinstall được thêm vào package.json.
- Hoạt động tạo repository GitHub mới từ tài khoản phát hành gói.
- Lưu lượng outbound có mẫu nén gzip và mã hóa AES-256-GCM.
Liên hệ với quy trình bảo mật chuỗi cung ứng
Đây là một trường hợp điển hình của cảnh báo CVE theo nghĩa vận hành chuỗi cung ứng, dù nội dung gốc không cung cấp mã CVE hay CVSS cụ thể. Trọng tâm kỹ thuật nằm ở việc kiểm soát phụ thuộc, xác minh nguồn phát hành, và giám sát các thay đổi ở lớp package manager.
Khi một lỗ hổng zero-day hoặc chiến dịch cấy mã độc được phát tán qua registry, khâu phát hiện sớm trong hệ thống build là yếu tố quyết định. Việc theo dõi threat intelligence từ các nguồn như Socket giúp thu hẹp thời gian từ lúc phát hành độc hại đến khi khoanh vùng tác động.
Chuyển tiếp điều tra nên tập trung vào danh sách package đã cài gần thời điểm 19/05/2026, các commit liên quan tới dependency lockfile, và mọi hoạt động bất thường trong hệ thống phát hành package nội bộ nếu có tái sử dụng mã nguồn từ các package bị ảnh hưởng.










