Kẻ tấn công đang khai thác một lỗ hổng nghiêm trọng cho phép chúng truy cập vào kho mã nguồn NPM với hơn 100 gói phần mềm đánh cắp thông tin đăng nhập kể từ tháng 8, hầu hết đều không bị phát hiện.
Phát hiện này, được công bố hôm thứ Tư bởi công ty bảo mật Koi, đã thu hút sự chú ý đến một thủ thuật của NPM cho phép các gói đã cài đặt tự động tải xuống và chạy các gói chưa được kiểm duyệt từ các miền không đáng tin cậy. Koi cho biết một chiến dịch mà họ theo dõi với tên gọi PhantomRaven đã khai thác việc NPM sử dụng "Các phụ thuộc động từ xa" để làm ngập NPM bằng 126 gói độc hại đã được tải xuống hơn 86.000 lần. Koi cho biết, tính đến sáng thứ Tư, khoảng 80 gói trong số đó vẫn còn khả dụng.
Một điểm mù
“PhantomRaven chứng minh rằng những kẻ tấn công tinh vi đang ngày càng giỏi hơn trong việc khai thác các điểm mù trong các công cụ bảo mật truyền thống,” Oren Yomtov của Koi viết. “Các phụ thuộc động từ xa không thể phát hiện được bằng phân tích tĩnh.”
Các phụ thuộc động từ xa (Remote Dynamic Dependencies - RDP) cung cấp tính linh hoạt cao hơn trong việc truy cập các phụ thuộc—các thư viện mã nguồn bắt buộc để nhiều gói khác hoạt động. Thông thường, các phụ thuộc này hiển thị cho nhà phát triển cài đặt gói. Chúng thường được tải xuống từ cơ sở hạ tầng đáng tin cậy của NPM.
RDD hoạt động khác biệt. Nó cho phép một gói tải xuống các phụ thuộc từ các trang web không đáng tin cậy, thậm chí cả những trang web kết nối qua HTTP, vốn không được mã hóa. Những kẻ tấn công PhantomRaven đã khai thác lỗ hổng này bằng cách đưa mã vào 126 gói được tải lên NPM. Mã này tải xuống các phụ thuộc độc hại từ các URL, bao gồm http://packages.storeartifact.com/npm/unused-imports. Koi cho biết các phụ thuộc này "vô hình" đối với các nhà phát triển và nhiều phần mềm quét bảo mật. Thay vào đó, chúng hiển thị gói chứa "0 phụ thuộc". Một tính năng của NPM khiến các bản tải xuống vô hình này được cài đặt tự động.
Điểm yếu này càng trầm trọng hơn khi các phần phụ thuộc được tải xuống "mới" từ máy chủ của kẻ tấn công mỗi khi một gói được cài đặt, thay vì được lưu vào bộ nhớ đệm, quản lý phiên bản hoặc lưu trữ tĩnh, như Koi đã giải thích:
