Axios bị tấn công supply chain: tài khoản maintainer bị chiếm, RAT được cài vào máy dev — hoatq.dev

cat blog/.md

Axios bị tấn công supply chain: tài khoản maintainer bị chiếm, RAT được cài vào máy dev

date: tags: security, npm, supply-chain

Ngày 30/3/2026, tài khoản npm của maintainer chính của Axios bị chiếm quyền. Kẻ tấn công đã publish 2 phiên bản chứa mã độc, cài trojan (RAT) vào máy của hàng triệu developer. Với khoảng 100 triệu lượt tải mỗi tuần, đây được xem là một trong những vụ tấn công supply chain nghiêm trọng nhất lịch sử npm.

Chuyện gì đã xảy ra?

Kẻ tấn công chiếm quyền tài khoản npm jasonsaayman — maintainer chính của Axios — và đổi email sang ifstap@proton.me. Sau đó, chúng publish 2 phiên bản độc hại:

  • axios@1.14.1 — publish lúc 00:21 UTC ngày 31/3
  • axios@0.30.4 — publish lúc 01:00 UTC ngày 31/3

Toàn bộ quá trình diễn ra trong 39 phút. Cả hai phiên bản đều không có commit, tag hay release tương ứng trên GitHub — chúng được publish thủ công bằng token npm bị đánh cắp, thay vì qua GitHub Actions như quy trình bình thường.

Cách thức tấn công

Bước 1: Chuẩn bị package giả

Trước đó khoảng 18 tiếng, kẻ tấn công tạo tài khoản nrwise và publish package plain-crypto-js@4.2.0 — một phiên bản sạch, không chứa mã độc. Đây là bước “dọn đường” để phiên bản 4.2.1 (chứa mã độc) không bị flag bất thường.

Bước 2: Inject dependency

Thay đổi duy nhất trong source code Axios là thêm plain-crypto-js@^4.2.1 vào dependencies. Package này không được import ở bất kỳ đâu trong code Axios — mục đích duy nhất là chạy postinstall script.

Bước 3: Cài RAT

File setup.js trong plain-crypto-js kết nối đến C2 server (sfrclak[.]com:8000) và tải payload tương ứng:

macOS  → /Library/Caches/com.apple.act.mond   (giả daemon Apple)
Windows → %PROGRAMDATA%\wt.exe                (PowerShell ẩn qua VBScript)
Linux  → /tmp/ld.py                           (Python script)

Sau khi thực thi, dropper tự xóa chính nó và thay package.json bằng bản sạch để xóa dấu vết. Nghĩa là nếu bạn check node_modules sau đó, sẽ không thấy gì bất thường.

Bạn có bị ảnh hưởng không?

Chỉ 2 phiên bản bị ảnh hưởng: 1.14.10.30.4. Kiểm tra nhanh:

# Check version đang dùng
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"

# Check trong lock file
grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"

# Check dropper package
ls node_modules/plain-crypto-js 2>/dev/null && echo "CÓ THỂ BỊ ẢNH HƯỞNG"

Kiểm tra file RAT trên máy:

# macOS
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null

# Linux
ls -la /tmp/ld.py 2>/dev/null

# Windows
dir "%PROGRAMDATA%\wt.exe" 2>nul

Cần làm gì nếu bị ảnh hưởng?

1. Pin version an toàn ngay:

{
  "axios": "1.14.0"
}

2. Xóa plain-crypto-js và reinstall:

npm install --ignore-scripts

3. Nếu phát hiện file RAT: Không cố clean thủ công — rebuild hệ thống từ đầu từ backup sạch.

4. Rotate tất cả credentials: npm tokens, SSH keys, AWS keys, CI/CD secrets — bất kỳ thứ gì mà máy bị ảnh hưởng có quyền truy cập.

5. Audit CI/CD: Kiểm tra logs các pipeline đã chạy với version bị ảnh hưởng, rotate secrets đã inject.

Indicators of Compromise (IOCs)

Packages:
  axios@1.14.1   (sha: 2553649f2322049666871cea80a5d0d6adc700ca)
  axios@0.30.4   (sha: d6f3f62fd3b9f5432f5782b62d8cfd5247d5ee71)
  plain-crypto-js@4.2.1

Network:
  C2: sfrclak[.]com / 142.11.206[.]73 :8000

Files:
  macOS:   /Library/Caches/com.apple.act.mond
  Windows: %PROGRAMDATA%\wt.exe
  Linux:   /tmp/ld.py

Bài học rút ra

1. Lock file là bắt buộc

Luôn commit package-lock.json / yarn.lock / pnpm-lock.yaml. Dùng npm ci thay vì npm install trong CI/CD để đảm bảo install đúng version đã lock.

2. --ignore-scripts trong CI/CD

Postinstall script là vector tấn công phổ biến nhất. Chạy:

npm ci --ignore-scripts

Sau đó chỉ chạy scripts của packages bạn tin tưởng.

3. Không tin tưởng mù quáng vào package phổ biến

100 triệu downloads/tuần không có nghĩa là an toàn. Axios bị compromise không phải vì code có lỗi — mà vì tài khoản maintainer bị chiếm. Bất kỳ package nào cũng có thể là nạn nhân.

4. Monitor dependencies

Dùng tool như npm audit, Snyk, hoặc Aikido Safe Chain để phát hiện sớm. Cấu hình alert khi dependency thay đổi version bất thường.

5. Kiểm tra thói quen release

Nếu một package thường release qua GitHub Actions nhưng đột nhiên có phiên bản publish thủ công — đó là red flag.


Vụ này là lời nhắc nhở rằng supply chain security không phải chuyện của ai khác — nó ảnh hưởng trực tiếp đến mỗi developer chúng ta. Hãy kiểm tra project của bạn ngay hôm nay.

Nguồn: Aikido Security

// reactions



hoatq@dev : ~/blog $