36 gói npm liên quan đến hệ sinh thái Arweave đã bị cài mã đánh cắp thông tin, nhắm vào khóa SSH, thông tin đăng nhập nhà phát triển và dữ liệu ví Exodus.
Cuộc tấn công này đáng chú ý vì nó lợi dụng chuỗi cung ứng phần mềm: chỉ cần cài một gói npm bị nhiễm là mã độc có thể chạy ngay và mở đường sang nhiều kho mã nguồn khác.
- IronWorm là infostealer viết bằng Rust, kích hoạt khi chạy
npm install. - Mã độc nhắm vào 86 biến môi trường và 20 tệp thông tin xác thực, gồm AWS, Anthropic, OpenAI và ví tiền điện tử.
- Cuộc tấn công bắt nguồn từ một tài khoản maintainer npm bị chiếm quyền, sau đó lan sang các commit và kho mã liên quan.
Mã độc IronWorm ẩn trong gói npm của hệ sinh thái Arweave
IronWorm là một mã đánh cắp thông tin viết bằng Rust, được nhúng vào các gói npm liên quan đến Arweave và WeaveDB. Mã độc này chạy ngay khi nhà phát triển cài gói bằng npm install.
Các gói bị sửa đổi được đăng lại trong thời gian ngắn và mỗi phiên bản mới chứa một tệp Linux 976 KB trong thư mục tools/. Tệp này được thiết lập chạy tự động qua hook preinstall trong package.json.
JFrog cho biết mẫu mã độc còn được đóng gói theo cách làm rối các công cụ giải nén thông thường. Bên trong là chương trình Rust lớn, với từng chuỗi được mã hóa riêng để gây khó khăn cho việc phân tích.
Mã độc nhắm vào khóa SSH, API key và dữ liệu ví
IronWorm là một infostealer nhắm vào thông tin xác thực của nhà phát triển, khóa SSH và dữ liệu ví tiền điện tử. Nó quét máy bị nhiễm để tìm 86 biến môi trường và 20 tệp thông tin xác thực.
Mã độc này tìm đến các token AWS, khóa API của Anthropic và OpenAI, thông tin đăng nhập npm cùng dữ liệu ví crypto. JFrog cũng ghi nhận mục tiêu là các tệp của ví Exodus.
Chuỗi lệnh và tệp cấu hình bị giải mã còn cho thấy các đường dẫn tới tệp credential, endpoint API của GitHub, tài khoản bot giả mạo gắn với ID người dùng thật và mẫu chèn mã độc vào các registry khác.
Chuỗi lây nhiễm bắt đầu từ tài khoản maintainer npm bị chiếm quyền
Cuộc tấn công bắt đầu khi tài khoản npm “asteroiddao” bị xâm nhập. Đây là tài khoản thuộc nhóm GitHub asteroid-dao, nằm trong dự án cơ sở dữ liệu phi tập trung Arweave/WeaveDB.
Sau khi thu thập được thông tin xác thực, IronWorm dùng quyền đó để đẩy commit vào các repository mà nạn nhân có thể truy cập. Những commit này lại cài cùng một binary độc hại vào các gói khác, tạo thành chuỗi lây nhiễm tiếp theo.
JFrog phát hiện 57 commit độc hại bị chỉnh lùi thời gian trên chín tổ chức GitHub. Các commit này dùng tên tác giả “claude” và email [email protected], trong khi dấu thời gian bị làm giả để khớp với commit hợp lệ gần nhất của từng repo.
IronWorm còn dùng rootkit và Tor để che giấu hoạt động
IronWorm không chỉ đánh cắp dữ liệu mà còn triển khai một eBPF kernel rootkit để ẩn mình trên máy bị nhiễm. Việc liên lạc với máy chủ điều khiển được chuyển qua mạng Tor.
Trong quá trình phân tích, JFrog lưu ý rằng mã nguồn rootkit đã bị để lộ ngay trong binary do lỗi từ trình biên dịch Rust, khiến việc điều tra dễ hơn. Một chi tiết khác là kẻ vận hành còn hardcode sẵn cụm khôi phục ví tiền điện tử của chính họ vào mã độc.
JFrog kết luận đây có thể là biện pháp tự bảo vệ để mã đánh cắp không vô tình lấy luôn thông tin của chính kẻ tấn công trong lúc thử nghiệm.
Rủi ro với nhà phát triển và chuỗi cung ứng npm vẫn còn
Cuộc tấn công được phát hiện sớm trước khi lan rộng hơn trên npm. Các phiên bản độc hại đã bị đánh dấu deprecated trong vòng một ngày và phần lớn commit lùi thời gian cũng bị xóa khỏi GitHub không lâu sau đó.
Trước đó, một vụ khác liên quan đến node-ipc đã khai thác tài khoản maintainer không hoạt động bằng cách đăng ký lại tên miền email đã hết hạn. Ngoài ra, Endor Labs và StepSecurity cũng ghi nhận một chiến dịch riêng biệt dùng JavaScript malware binding.gyp với hành vi tương tự trong cùng giai đoạn.
Những ai đã cài các gói WeaveDB bị ảnh hưởng cần xoay vòng toàn bộ thông tin xác thực, kiểm tra lock file để phát hiện thay đổi phiên bản bất thường và bật xác thực hai lớp cho tài khoản npm lẫn GitHub.
Tổng kết
Vụ IronWorm cho thấy các gói npm vẫn là điểm tấn công hiệu quả để đánh cắp khóa truy cập, mở rộng sang repository khác và che giấu hoạt động trên máy phát triển.



