Hơn 400 gói Arch Linux AUR bị chiếm quyền để cài đặt mã độc đánh cắp thông tin Rust

Những kẻ tấn công đã chiếm quyền hơn 400 gói trong Arch User Repository (AUR) tuần này và viết lại các kịch bản xây dựng để cài đặt mã độc đánh cắp thông tin trên bất kỳ máy nào xây dựng chúng. Mã độc này là một tệp nhị phân Rust được xây dựng để thu thập bí mật của các nhà phát triển. Khi có quyền root, nó cũng có thể tải một eBPF rootkit để tự ẩn mình. AUR là bộ sưu tập gói cộng đồng của Arch Linux và nó tách biệt với các kho lưu trữ chính thức của Arch.
Arch Linux AUR Hijack

Những kẻ tấn công đã chiếm quyền kiểm soát hơn 400 gói trong Arch User Repository (AUR) tuần này và viết lại các kịch bản xây dựng (build scripts) của chúng để cài đặt một mã độc đánh cắp thông tin (credential stealer) trên bất kỳ máy nào thực hiện quá trình xây dựng gói.

Mã độc này là một tệp nhị phân Rust được thiết kế để thu thập các bí mật của nhà phát triển. Khi có được quyền root, nó cũng có thể tải một eBPF rootkit để tự ẩn mình. AUR là bộ sưu tập gói cộng đồng của Arch Linux và nó tách biệt với các kho lưu trữ chính thức của Arch (vốn không bị ảnh hưởng).

Nếu bạn đã cài đặt hoặc cập nhật một gói AUR vào hoặc sau ngày June 11, hãy kiểm tra lại danh sách các gói bị ảnh hưởng hiện tại trước khi tin tưởng máy chủ đó. Danh sách tên gói rất lớn, vẫn đang tiếp tục tăng và chưa hoàn thiện.

Cuộc tấn công này nhắm vào mô hình lòng tin chứ không phải là một lỗi phần mềm. Các gói bị xâm nhập vẫn giữ nguyên tên, lịch sử và sự tin tưởng đi kèm với chúng. Chỉ có các hướng dẫn xây dựng là bị thay đổi.

Cái bẫy nằm trong công thức xây dựng, khiến bản thân gói phần mềm trông hoàn toàn giống với phần mềm mà người dùng định cài đặt. Không có exploit, không có Zero-Day và không có dấu hiệu nào cho thấy các hệ thống của Arch bị xâm nhập.

Kẻ tấn công đã tiếp nhận các gói bị bỏ rơi, chỉnh sửa các tệp xây dựng và để người dùng tự chạy payload cho chúng. Sonatype, đơn vị đặt tên cho chiến dịch này là Atomic Arch, phát hiện chúng nhắm vào các dự án mồ côi: những gói mà người duy trì đã rời bỏ, để ngỏ cho bất kỳ ai tiếp quản.

Chúng cũng giả mạo git commit metadata để các thay đổi trông như thể đến từ một người duy trì lâu năm, một tài khoản mà sau đó Trusted User của Arch Linux đã xác nhận là chưa từng bị xâm nhập.

Sau khi một gói được tiếp nhận, kịch bản PKGBUILD hoặc .install của nó sẽ bị chỉnh sửa để chạy npm install atomic-lockfile trong quá trình xây dựng, kéo theo gói npm độc hại cùng với một vài gói hợp lệ khác để ngụy trang. Gói đó, [email protected], chứa một preinstall hook để chạy một tệp ELF Linux có tên là deps. Chỉ cần xây dựng gói, tệp nhị phân sẽ thực thi.

Các ví dụ đã được xác nhận báo cáo trên mailing list của Arch bao gồm gói alvr và premake-git.

Mã độc này làm gì

Nhà nghiên cứu độc lập Whanos đã reverse-engineered payload deps và mô tả một công cụ đánh cắp thông tin viết bằng Rust nhắm vào các máy trạm của nhà phát triển và hệ thống xây dựng. Nó thu thập:

  • Cookies, tokens và local storage từ các trình duyệt dựa trên Chromium (Chrome, Edge, Brave, và nhiều trình duyệt khác)
  • Dữ liệu phiên làm việc từ các ứng dụng Electron, bao gồm Slack, Discord và Microsoft Teams
  • Tokens của GitHub, npm và HashiCorp Vault, cùng với tài liệu OpenAI/ChatGPT và metadata tài khoản
  • SSH keys, known_hosts và shell histories
  • Thông tin đăng nhập Docker, Podman và các cấu hình VPN

Các tệp bị đánh cắp được gửi đi qua HTTP đến temp.sh. Việc điều khiển và kiểm soát (Command and Control) chạy qua một Tor onion service thông qua một local loopback proxy.

Để duy trì sự hiện diện (persistence), nó cài đặt một dịch vụ systemd với Restart=always. Với quyền root, nó tự sao chép vào /var/lib/ và ghi một unit dưới /etc/systemd/system/; với tư cách người dùng bình thường, nó sử dụng thư mục home và một unit theo từng người dùng dưới ~/.config/systemd/user/. Dù bằng cách nào, nó cũng muốn tự khởi động lại.

Các bài viết ban đầu đã nói quá lên về eBPF rootkit. Nó là tùy chọn và chỉ tải khi tệp nhị phân đã có quyền root và các khả năng phù hợp. Nó không được sử dụng để leo thang đặc quyền. Khi được kích hoạt, nó ẩn các tiến trình của mã độc, tên tiến trình và các socket inodes khỏi các công cụ tiêu chuẩn, sử dụng các BPF maps có tên là hidden_pids, hidden_names và hidden_inodes, đồng thời ngăn chặn các nỗ lực gắn trình gỡ lỗi (debugger).

Điều này làm thay đổi lời khuyên về việc dọn dẹp. Gỡ bỏ gói AUR là không đủ một khi payload đã chạy. Trình quản lý gói có thể xóa các tệp mà nó biết, nhưng không thể chứng minh máy tính đã sạch sau khi một payload có khả năng cài rootkit đã được thực thi.

Tệp nhị phân này cũng chuẩn bị một tệp thứ hai liên quan đến monero-wallet-gui mà phân tích đánh dấu là một công cụ đào tiền ảo tiềm năng chưa được phân tích. Một eBPF rootkit đi kèm với một trình đánh cắp thông tin là điều bất thường, và đó là lý do tại sao vụ việc này đáng lo ngại hơn bình thường.

Phạm vi và làn sóng thứ hai

Báo cáo đầu tiên của Sonatype đếm được hơn 20 gói bị chiếm quyền. Trong vòng một ngày, các công cụ theo dõi cộng đồng và luồng thảo luận aur-general của Arch đã liệt kê hơn 400 gói, với một danh sách tổng hợp bằng cách grep trên gương git của AUR, con số lên tới khoảng 408 gói và các danh sách hợp nhất vẫn đang tiếp tục tăng lên.

Bản thân gói npm atomic-lockfile chỉ cho thấy 134 lượt tải xuống hàng tuần trên Socket trước khi bị gỡ bỏ, vì vậy rủi ro thực sự nằm ở quy trình xây dựng AUR hơn là việc cài đặt trực tiếp qua npm.

Làn sóng thứ hai sử dụng bun install js-digest, được đẩy lên từ một nhóm tài khoản riêng biệt mà các nhà theo dõi cộng đồng liên kết với cùng một nhà phát hành npm như atomic-lockfile. Payload của nó là một tệp nhị phân khác, một ELF riêng biệt dựa trên mã hash, cũng đã bị cộng đồng gắn cờ là độc hại.

Mức độ lan rộng của làn sóng này vẫn đang được thống kê. Các phân tích ban đầu liệt kê vài chục gói, trong khi các tìm kiếm sau đó trên bản sao AUR trả về con số cao hơn nhiều. Dù thế nào, đây không chỉ là một phần phụ của làn sóng đầu tiên, vì vậy hãy kiểm tra cả atomic-lockfile và js-digest.

Cần làm gì ngay bây giờ

Những người duy trì Arch đang khôi phục lại các commit độc hại, cấm các tài khoản liên quan và yêu cầu người dùng tiếp tục báo cáo các gói khả nghi trong luồng mailing-list.

Hãy coi danh sách các gói bị ảnh hưởng đã công bố là chưa đầy đủ. Về phía bạn:

  • Kiểm tra bất kỳ gói AUR nào được cài đặt hoặc cập nhật vào hoặc sau ngày June 11 đối chiếu với danh sách gói cộng đồng và các kịch bản phát hiện. Hãy grep lịch sử xây dựng và bộ nhớ đệm gần đây cho npm install atomic-lockfile, bun install js-digest và đường dẫn payload src/hooks/deps.
  • Nếu một gói bị gắn cờ đã thực thi, hãy coi như máy chủ đã bị lộ thông tin đăng nhập. Hãy thay đổi (rotate) mọi thứ mà mã độc này chạm tới: browser sessions, SSH keys, GitHub và npm tokens, Slack, Teams và Discord sessions, Vault tokens, Docker và Podman credentials, cùng bất kỳ cloud keys nào.
  • Săn tìm sự hiện diện lâu dài. Kiểm tra các dịch vụ systemd lạ (cả hệ thống và trong ~/.config/systemd/user/) và các tệp bất thường dưới /var/lib/. Kiểm tra /sys/fs/bpf/ để tìm các maps hidden_pids, hidden_names và hidden_inodes. Xem lại các kết nối ra ngoài tới Tor và các dịch vụ tải lên.
  • Nếu gói đã chạy với quyền root, hãy giả định rootkit đang hiện diện và cài đặt lại hệ điều hành từ nguồn tin cậy. Không có cách nào khác để tin tưởng hệ thống sau đó.
  • Trong tương lai, hãy đọc kỹ PKGBUILD và bất kỳ .install hooks nào trước khi xây dựng, đặc biệt là với các gói mới được tiếp nhận hoặc đột nhiên hoạt động trở lại sau thời gian dài không hoạt động. Nếu bạn không hiểu các hướng dẫn xây dựng, đừng cài đặt gói đó.

Để phát hiện, SHA-256 của payload chính là 6144d433f8a0316869877b5f834c801251bbb936e5f1577c5680878c7443c98b; bộ chỉ số đầy đủ bao gồm cả máy chủ C2 onion nằm trong phân tích của ioctl.fail.

Chiến thuật tiếp quản tương tự đã từng xảy ra với một gói xem PDF bị bỏ rơi vào năm 2018; phiên bản năm 2024 này chỉ là mở rộng quy mô hơn, nằm trong một xu hướng rộng lớn hơn của các cuộc tấn công chuỗi cung ứng nhằm chiếm quyền các dự án mồ côi để kế thừa lòng tin thay vì typosquatting để lừa người dùng. Danh sách bị ảnh hưởng vẫn chưa đầy đủ và chưa có mã CVE nào được chỉ định; Sonatype theo dõi chiến dịch này dưới mã Sonatype-2026-003775 (CVSS 8.7).

Cuộc tấn công thành công vì AUR vẫn tin tưởng vào tên gói và lịch sử hơn là người đang duy trì nó hiện tại. Một gói mới được tiếp nhận, hoặc một gói đột nhiên xuất hiện các install hooks mới, giờ đây đáng bị nghi ngờ tương tự như một gói từ một người lạ.