
148 gói npm giả dạng proxy học sinh biến trình duyệt thành botnet DDoS
"JFrog reported that 148 npm packages were used as disguised student proxy sites that covertly turned visitors' browsers into a DDoS botnet for about two weeks in May. The packages embedded a remote script loader and a WebSocket-based flood module that could be re-armed via mutable remote code, and the campaign was later partially cleaned up while the malicious capability remained switchable; no CVE was assigned."
Tác động đáng kể do khả năng biến trình duyệt người dùng thành tác nhân DDoS thông qua WebSocket flood và cơ chế remote code loader có thể được “tái kích hoạt”. Điểm then chốt: thực thi mã từ nhánh mutable (không SRI) và không cần chạy ở install-time nên các cơ chế kiểm tra theo pipeline có thể bỏ sót.
Rủi ro vận hành tập trung vào các tổ chức nơi người dùng truy cập proxy để vượt kiểm soát, gây tải bất thường lên hạ tầng mạng/endpoint và phát sinh chi phí xử lý sự cố. Điểm cần lưu ý: lưu lượng DDoS gián tiếp từ trình duyệt và khả năng duy trì năng lực tấn công dù một phần mô-đun đã bị loại bỏ.
Theo nghiên cứu của JFrog, một chiến dịch sử dụng 148 gói npm được ngụy trang như các trang proxy web cho học sinh đã âm thầm biến trình duyệt người truy cập thành thành phần của botnet DDoS trong khoảng hai tuần vào tháng 5. Các gói không nhắm trực tiếp vào nhà phát triển cài đặt chúng; thay vào đó, registry được dùng như hạ tầng lưu trữ miễn phí cho trang proxy “bẫy”, tận dụng người dùng tìm cách vượt bộ lọc nội dung để tạo lưu lượng tấn công.
Về kỹ thuật, gói chứa remote script loader và mô-đun tạo flood qua WebSocket. Mã độc không chạy ở thời điểm cài đặt (không có lifecycle hooks/build scripts) mà kích hoạt khi người dùng mở trang trong trình duyệt. Bộ nạp từ xa lấy JavaScript qua jsDelivr từ nhánh mutable trên GitHub, không có Subresource Integrity, và thực thi với quyền origin của trang proxy. Cấu hình flood được nạp từ tệp văn bản, sau đó mở hàng chục kết nối WebSocket tới một endpoint Wisp.
Khuyến nghị: quản trị viên nên chặn tên miền ở mức DNS (ưu tiên các domain còn phân phối nội dung hiện tại), người dùng đã truy cập cần xóa cache/local storage và gỡ service worker nếu có, đồng thời đội phát triển phải rà soát manifest/lockfile và build lại từ nguồn sạch. JFrog cho biết nhiều gói đã bị gỡ khỏi npm và thay bằng placeholder tiêu chuẩn.