Một cuộc tấn công supply chain vừa được phát hiện trên registry npm, ảnh hưởng đến hơn 40 package từ nhiều developer khác nhau. Trong đó, package @ctrl/tinycolor
với hơn 2,2 triệu lượt tải hàng tuần là một trong những trường hợp bị ảnh hưởng đáng chú ý nhất. Mã độc không chỉ đánh cắp thông tin nhạy cảm mà còn có khả năng tự lây lan sang các package khác.

Cộng đồng mã nguồn mở JavaScript đang đối mặt với một chiến dịch tấn công chuỗi cung ứng có chủ đích, sau khi các phiên bản độc hại của hàng loạt package trên npm được phát hiện. Vụ việc được một lập trình viên, Daniel dos Santos Pereira, nhận thấy đầu tiên và sau đó được xác nhận bởi hệ thống phát hiện mã độc tự động của công ty bảo mật Socket.
Theo phân tích, các phiên bản bị xâm nhập chứa một đoạn mã có khả năng tự nhân bản. Cụ thể, mã độc sẽ tìm kiếm các package khác trên máy tính của nhà phát triển, tự động chèn một đoạn script độc hại (bundle.js
) vào chúng, sau đó đóng gói lại và tự động publish phiên bản đã bị trojan hóa lên npm – biến một chương trình bình thường thành một chương trình nhiễm độc.
Mục tiêu chính của mã độc trong file bundle.js
là đánh cắp thông tin nhạy cảm. Nó thực hiện việc này bằng cách tải về và lạm dụng TruffleHog
, một công cụ quét bí mật hợp lệ, để tìm kiếm trên toàn bộ hệ thống file và repository của máy tính bị xâm nhập. Các loại thông tin mà nó nhắm đến bao gồm GITHUB_TOKEN
, NPM_TOKEN
, AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
và các thông tin xác thực từ các dịch vụ cloud metadata. Toàn bộ dữ liệu đánh cắp được sẽ được gửi về một webhook endpoint đã được mã hóa cứng.
Một trong những kỹ thuật nguy hiểm nhất của cuộc tấn công này là khả năng tạo ra sự tồn tại dai dẳng trong hệ thống CI/CD. Nếu phát hiện có GITHUB_TOKEN
, mã độc sẽ tự động tạo ra một GitHub Actions workflow độc hại trong repository của nhà phát triển. Điều này có nghĩa là, ngay cả khi package độc hại đã được gỡ bỏ khỏi máy local, cuộc tấn công vẫn có thể tiếp diễn trong các lần build sau này trên môi trường CI, nơi chứa nhiều bí mật và thông tin nhạy cảm.
Trong số hơn 40 package bị ảnh hưởng, @ctrl/tinycolor
(phiên bản 4.1.1 và 4.1.2) là đáng chú ý nhất do sự phổ biến của nó. Tuy nhiên, các nhà nghiên cứu nhấn mạnh rằng tinycolor
chỉ là một trong số rất nhiều package bị ảnh hưởng, không phải là nguồn gốc của cuộc tấn công.
Trước tình hình này, các chuyên gia bảo mật đã đưa ra hướng dẫn xử lý khẩn cấp cho cộng đồng lập trình viên. Người dùng được khuyến cáo cần rà soát ngay lập tức các dependency trong package để phát hiện các package bị ảnh hưởng, sau đó gỡ bỏ hoặc pin phiên bản về các phiên bản an toàn đã được xác nhận. Đồng thời, việc kiểm tra lại toàn bộ môi trường như máy tính cá nhân và các agent của hệ thống CI/CD là cực kỳ quan trọng để tìm kiếm dấu hiệu bất thường. Quan trọng nhất, nếu có bất kỳ nghi ngờ nào về việc bị xâm nhập, các tổ chức và cá nhân phải ngay lập tức thu hồi và cấp mới toàn bộ các thông tin nhạy cảm như token npm, token GitHub và các khóa truy cập dịch vụ cloud. Cuối cùng, việc tăng cường giám sát log hệ thống để phát hiện các hoạt động npm publish
lạ cũng là một bước phòng thủ cần thiết.