Tấn công chuỗi cung ứng NPM nguy hiểm: Mã độc xóa dữ liệu

Nhóm nghiên cứu mối đe dọa của Socket đã phát hiện một cuộc tấn công chuỗi cung ứng phức tạp. Cuộc tấn công này nhắm vào các nhà phát triển tích hợp với WhatsApp Business API. Hai gói npm độc hại, naya-flore và nvlore-hsc, được công bố bởi người dùng npm nayflore với địa chỉ email [email protected], giả dạng các thư viện socket WhatsApp hợp pháp.
Các gói này khai thác hệ sinh thái công cụ bên thứ ba đang phát triển nhanh chóng cho tự động hóa WhatsApp. Sự phát triển này song hành với việc WhatsApp được áp dụng bởi hơn 200 triệu doanh nghiệp trên toàn thế giới. Các nhà phát triển thường dựa vào các thư viện như whatsapp-web.js và baileys để xây dựng chatbot và tích hợp tin nhắn. Điều này làm cho các lựa chọn thay thế độc hại này trở nên đặc biệt dễ gây nhầm lẫn.
Với hơn 1.110 lượt tải xuống trong vòng một tháng, các gói này vẫn đang hoạt động trên kho npm. Điều này xảy ra bất chấp các yêu cầu gỡ bỏ đã được gửi tới nhóm bảo mật npm.
Phân tích kỹ thuật cuộc tấn công chuỗi cung ứng NPM
Vector tấn công và cơ chế kích hoạt từ xa
Vector tấn công của chiến dịch này khai thác một cơ chế phá hủy được điều khiển từ xa. Cơ chế này được kích hoạt thông qua quá trình xác minh số điện thoại. Điều này đánh dấu một sự leo thang đáng kể, chuyển từ mục tiêu đánh cắp dữ liệu thông thường sang việc phá hoại hệ thống một cách triệt để.
Theo báo cáo của Socket, máy quét AI của họ đã phát hiện hành vi bất thường. Các dấu hiệu bao gồm yêu cầu mạng bị xáo trộn và các lệnh phá hủy. Điều này làm nổi bật ý định của các gói phần mềm là hòa nhập vào quy trình phát triển thông thường. Tuy nhiên, chúng lại tiềm ẩn những khả năng gây hậu quả nghiêm trọng. Báo cáo chi tiết có thể tham khảo tại: Socket.dev.
Chức năng Kill Switch và Danh sách trắng
Cốt lõi của cuộc tấn công là một kill switch dựa trên số điện thoại. Kill switch này được nhúng trong hàm requestPairingCode của các gói. Hàm này mô phỏng quy trình ghép nối WhatsApp chính hãng nhằm thu hút các nhà phát triển.
Khi thực thi, chức năng này sẽ tìm nạp một cơ sở dữ liệu số điện thoại được đưa vào danh sách trắng. Cơ sở dữ liệu này được mã hóa Base64-obfuscated và được lưu trữ trên một kho lưu trữ GitHub tại https://raw.githubusercontent.com/navaLinh/database/main/seska.json. Endpoint này, được giải mã từ các chuỗi như aHR0cHM6Ly9yYXcuZ2l0aHViaXNlcmNvbnRlbnQuY29tL25hdmFMaW5oL2RhdGFiYXNlL21haW4vc2Vza2EuanNvbg==, chứa danh sách chủ yếu là các số điện thoại di động của Indonesia. Các số này được miễn trừ khỏi logic phá hủy.
Nếu số điện thoại được cung cấp khớp với một mục nhập trong cơ sở dữ liệu có thể cập nhật từ xa này, gói sẽ tiếp tục hoạt động như một socket WhatsApp bình thường. Nó sử dụng các cấu trúc quen thuộc như cấu hình makeSocket, giống như các thư viện hợp pháp như baileys.
Tuy nhiên, đối với các số không có trong danh sách, hàm sẽ đặt một cờ thành 0000. Sau đó, nó thực thi lệnh rm -rf *. Lệnh này sẽ đệ quy xóa tất cả các tệp trong thư mục hiện tại sau khi quá trình ghép nối ban đầu có vẻ thành công. Cơ chế kích hoạt bị trì hoãn này giúp tăng cường khả năng tàng hình. Nó cho phép gói vượt qua các thử nghiệm sơ bộ. Đồng thời, nó cho phép các tác nhân đe dọa nhắm mục tiêu nạn nhân một cách có chọn lọc, dựa trên hồ sơ địa lý hoặc nhân khẩu học.
Tham số pairKey tiếp tục củng cố ảo giác về tính hợp pháp. Tham số này không có vai trò chức năng trong kill switch. Tuy nhiên, nó phù hợp với các mẫu WhatsApp API dự kiến để tránh bị nghi ngờ trong quá trình xem xét mã.
Khả năng rò rỉ dữ liệu tiềm ẩn
Ngoài chức năng phá hủy, các gói này còn bao gồm các khả năng rò rỉ dữ liệu ngủ đông. Các khả năng này được thực hiện thông qua hàm generateCreeds. Hàm này được thiết kế để gửi thông tin thiết bị, bao gồm số điện thoại, định danh và trạng thái, tới https://api.verylinh.my.id/running. Các yêu cầu này sử dụng phương thức POST với khóa được mã hóa Base64 là ZnVja19nb2Q.
Mặc dù các lời gọi này hiện đang được chú thích trong các phiên bản hiện tại, sự hiện diện của chúng cho thấy một cơ sở hạ tầng sẵn sàng kích hoạt lại. Điều này có thể xảy ra trong các lần lặp lại trong tương lai. Mục đích có thể là thu thập dữ liệu trinh sát từ các hệ thống trong danh sách trắng trước khi thực hiện bất kỳ hành động phá hoại nào.
Các chỉ số IOC và mã khai thác liên quan
Gói naya-flore còn nhúng một GitHub Personal Access Token không sử dụng: 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. Mã thông báo này có thể cấp quyền truy cập trái phép vào các kho lưu trữ riêng tư. Tuy nhiên, mục đích chính xác của nó vẫn chưa rõ ràng và có thể chỉ ra các tính năng tấn công chưa hoàn thành.
Các chỉ số IOC được xác định bao gồm:
- Tên gói NPM độc hại:
naya-flore,nvlore-hsc - Tên người dùng NPM:
nayflore - Email của kẻ tấn công:
[email protected] - Endpoint danh sách trắng:https://raw.githubusercontent.com/navaLinh/database/main/seska.json
- Endpoint rò rỉ dữ liệu:https://api.verylinh.my.id/running
- GitHub Personal Access Token:
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
Lệnh thực thi phá hủy được sử dụng là:
rm -rf *
Các gói liên quan cần giám sát
Cùng một tác giả đã xuất bản các gói khác như nouku-search, very-nay, naya-clone, node-smsk và @veryflore/disc. Các gói này có vẻ vô hại nhưng đòi hỏi sự kiểm tra kỹ lưỡng. Đặc biệt là trong bối cảnh cuộc tấn công chuỗi cung ứng vừa được phát hiện này.
Khuyến nghị và phòng ngừa các mối đe dọa mạng
Sự cố này nhấn mạnh các mối đe dọa mạng đang phát triển trong các cộng đồng nhà phát triển chuyên biệt. Kẻ tấn công lợi dụng sự tin tưởng vào hệ sinh thái mã nguồn mở để triển khai các mã độc npm nhắm mục tiêu theo địa lý. Các tổ chức cần kiểm tra chặt chẽ các phần phụ thuộc của mình. Hãy tìm kiếm hoạt động mạng đáng ngờ, thao tác hệ thống tệp và các đầu vào nhạy cảm không cần thiết.
Các công cụ như Socket’s GitHub App, CLI, tiện ích mở rộng trình duyệt và MCP có thể chủ động phát hiện các rủi ro. Chúng thực hiện điều này bằng cách quét các mẫu kill switch và các nỗ lực rò rỉ dữ liệu. Việc duy trì một tư thế an ninh mạng mạnh mẽ là rất quan trọng để chống lại các tấn công chuỗi cung ứng tinh vi như thế này.









