Một cuộc tấn công chuỗi cung ứng lớn đã nhắm mục tiêu vào hệ sinh thái Rust, trong đó hai gói được sử dụng rộng rãi là arrayref và append-only-vec đã bị chiếm quyền điều khiển để âm thầm phân phối mã độc ngay khi các nhà phát triển biên dịch dự án của họ.
Hai gói này cùng nhau chiếm hàng trăm triệu lượt tải xuống, khiến đây trở thành một trong những vụ xâm phạm gói Rust lớn nhất từng được ghi nhận về khối lượng tải xuống.
Phát hiện và Xâm nhập
Khai thác Tên Gói Giống Nhau (Typosquatting)
Các nhà nghiên cứu tại Aikido Security đã phát hiện một gói mới có tên đáng ngờ là proc-macro1, gói này thực hiện việc tải xuống và thực thi một tệp từ xa trong quá trình biên dịch.
Tên của gói này là một hình thức typosquatting cố ý nhằm vào proc-macro2, một trong những gói được tin cậy nhất trong thế giới Rust. Nó đã sao chép mô tả và tài liệu của gói hợp pháp để tạo vẻ ngoài đáng tin cậy.
Biến Cố Chuỗi Cung Ứng Toàn Diện
Trong vòng một giờ, arrayref và append-only-vec, cả hai đều do cùng một nhà phát triển duy trì, bất ngờ thêm proc-macro1 làm phụ thuộc. Sự thay đổi này đã biến một vụ typosquatting ban đầu thành một sự cố chuỗi cung ứng toàn diện.
Bản thân vụ xâm phạm được che giấu trong một dòng duy nhất được chèn vào tệp manifest của mỗi gói, trỏ đến proc-macro1 phiên bản 1.0.107.
Điều quan trọng là mã nguồn hiển thị của arrayref và append-only-vec vẫn không bị thay đổi và hợp pháp, do đó, một đánh giá mã thủ công sẽ không làm dấy lên báo động.
Cơ chế Phân phối Mã Độc
Lợi dụng Tệp Build Script
Mối nguy hiểm thực sự nằm ẩn sâu bên trong tệp build.rs của proc-macro1. Đây là một tệp mà Cargo tự động biên dịch và chạy trong mỗi lần xây dựng. Điều này có nghĩa là các nhà phát triển không cần phải gọi bất kỳ hàm nào từ các gói bị xâm phạm để bị lây nhiễm.
Kỹ thuật này cho thấy cách các tác nhân đe dọa khai thác cấu hình biên dịch, phản ánh các rủi ro đã thấy trong các công cụ dành cho nhà phát triển bị xâm phạm trên các hệ sinh thái mã nguồn mở.
Phân phối Mã Độc Đa Nền Tảng
Khi được kích hoạt, tệp build script sẽ tải xuống một tệp nhị phân dành riêng cho từng nền tảng (Linux, Windows hoặc macOS) từ một máy chủ từ xa được xác định bằng địa chỉ IP trần. Nó che giấu đích đến bằng cách sử dụng các phân đoạn được mã hóa base64 để tránh các trình quét dựa trên chuỗi ký tự.
Trên các hệ thống Unix và macOS, mã độc ghi payload vào đĩa, đánh dấu nó là có thể thực thi và khởi chạy nó dưới dạng một tiến trình nền được tách rời. Điều này đảm bảo mã độc tiếp tục chạy ngay cả sau khi quá trình xây dựng kết thúc, theo báo cáo của Aikido Security.
Chức năng và Lây nhiễm
Đánh cắp Thông tin Đăng nhập
Phân tích các tệp nhị phân thu hồi được đã tiết lộ một infostealer có khả năng thu thập thông tin đăng nhập đã lưu từ các trình duyệt dựa trên Chromium như Chrome, Brave và Edge. Nó cũng lấy dữ liệu từ bộ lưu trữ tiện ích mở rộng của trình duyệt, một vị trí thường được sử dụng bởi các tiện ích ví tiền điện tử.
Chức năng chồng chéo này tương tự với khả năng của các phần mềm độc hại đánh cắp thông tin đăng nhập chuyên dụng được thiết kế để kiểm kê máy chủ nhanh chóng.
Duy trì Sự hiện diện và Điều khiển
Mã độc cũng thiết lập sự hiện diện bền vững trên macOS thông qua một LaunchAgent được cấu hình để tự khởi chạy lại sau mỗi lần đăng nhập. Nó duy trì kết nối với một máy chủ chỉ huy và kiểm soát (C2) có khả năng đưa ra các lệnh shell từ xa.
Sự tinh vi của hoạt động bắt nguồn từ việc lạm dụng quy trình tự động hóa xây dựng gói tiêu chuẩn thay vì sửa đổi logic ứng dụng hiển thị.
Khắc phục và Phòng ngừa
Phản ứng của Cộng đồng Rust
Nhóm Ứng phó An ninh Rust đã xác nhận tệp build script độc hại sau khi nhận được thông tin từ các nhà nghiên cứu tại Nextron Systems. Họ đã tiến hành xóa proc-macro1 cùng với các gói tương tự khác bao gồm proc-macro-en, aovine, arone, aronenao và tinymember.
Nhóm cũng đã gỡ bỏ các phiên bản bị nhiễm là arrayref 0.3.10, append-only-vec 0.1.9 và internment 0.8.7. Họ đã khóa tài khoản của người bảo trì bị xâm phạm như một biện pháp phòng ngừa, ghi nhận rằng chủ tài khoản dường như là nạn nhân của việc đánh cắp thông tin đăng nhập chứ không phải là một phần tử nội bộ độc hại.
Người bảo trì bị ảnh hưởng là Andrew Gallant, được cộng đồng biết đến với tên BurntSushi và là người tạo ra công cụ ripgrep phổ biến. Các báo cáo cho thấy toàn bộ chiến dịch độc hại, từ lần xuất bản bị nhiễm độc đầu tiên đến việc khắc phục, đã diễn ra trong khoảng thời gian hai giờ vào ngày 20 tháng 8 năm 2026.
Khuyến nghị Bảo mật
Các nhóm đã xây dựng các dự án Rust trong khoảng thời gian xảy ra sự cố nên xem các đường ống CI và bộ nhớ đệm bản địa của họ là có khả năng bị xâm phạm. Đồng thời, họ cần kiểm tra bộ nhớ đệm của đăng ký Cargo để tìm các tệp gói độc hại.
Các bước khắc phục tức thời được khuyến nghị bao gồm việc ghim arrayref dưới phiên bản 0.3.10, kiểm toán các tệp nhật ký bản dựng gần đây và bật xác thực hai yếu tố trên các tài khoản xuất bản trên crates.io.
Việc duy trì quản lý bản vá nghiêm ngặt trên tất cả các môi trường xây dựng đảm bảo các quy trình tự động vẫn được bảo vệ chống lại các phụ thuộc độc hại. Quản lý bản vá là một yếu tố quan trọng trong việc duy trì an ninh mạng.
Sự cố này nhấn mạnh một điểm yếu dai dẳng trong các hệ sinh thái gói phần mềm: các tệp script thời gian xây dựng có thể thực thi mã tùy ý với toàn quyền người dùng trước khi bất kỳ logic ứng dụng nào chạy. Điều này làm cho việc xác minh độ tin cậy của các phụ thuộc trở nên quan trọng ngang bằng với việc xem xét mã nguồn.










