TÓM TẮT
Vào ngày 31 tháng 3 năm 2026, những kẻ tấn công đã xâm nhập tài khoản npm của người duy trì chính cho Axios, thư viện HTTP client JavaScript phổ biến nhất với 83 triệu lượt tải xuống hàng tuần. Chúng đã phát hành các phiên bản độc hại (1.14.1 và 0.30.4) chứa một RAT (Remote Access Trojan) đa nền tảng có khả năng đánh cắp thông tin xác thực, khóa SSH và mã thông báo đám mây từ máy tính của nhà phát triển. Hạ cấp xuống Axios 1.14.0 ngay lập tức, xoay vòng tất cả các bí mật và quét tìm dấu hiệu xâm nhập trên hệ thống của bạn.
Giới thiệu
Axios xử lý nhiều yêu cầu HTTP hơn bất kỳ thư viện JavaScript nào khác. Nếu bạn từng xây dựng API client, kiểm thử endpoint hoặc kết nối frontend với backend trong 5 năm qua, khả năng cao bạn đã dùng tới nó.
Vào ngày 31/3/2026 lúc 00:21 UTC, một tác nhân đe dọa đã phát hành Axios 1.14.1 thông qua tài khoản duy trì bị chiếm quyền. Gói này gần như giống hệt bản hợp pháp, chỉ thay đổi file package.json, tiêm phụ thuộc độc hại "plain-crypto-js" để thực thi Trojan truy cập từ xa trên mọi máy chạy npm install.
Các phiên bản độc hại tồn tại khoảng 2-3 giờ trước khi npm gỡ bỏ, trong bối cảnh có 83 triệu lượt tải mỗi tuần.
💡 Nếu bạn đang xây dựng hoặc kiểm thử API, đây là mối nguy nhắm thẳng vào bộ công cụ của bạn. HTTP client tích hợp của Apidog loại bỏ hoàn toàn sự phụ thuộc vào HTTP client bên thứ ba trong kiểm thử API, giảm bề mặt tấn công này. Tải Apidog miễn phí và thực hiện các bước kiểm tra bảo mật bên dưới.
Bài viết này phân tích cách thức tấn công, hướng dẫn phát hiện và các thay đổi bạn nên áp dụng trong quản lý phụ thuộc.
Cách thức cuộc tấn công chuỗi cung ứng Axios diễn ra
Dòng thời gian
Chiến dịch này gồm các bước chính xác trong 18 giờ:
-
30/3, 05:57 UTC: Phát hành "mồi nhử"
plain-crypto-js@4.2.0(sạch) lên npm để tạo lịch sử. -
30/3, 23:59 UTC: Phát hành bản độc hại
plain-crypto-js@4.2.1có hookpostinstallchứa dropper. -
31/3, 00:21 UTC: Phát hành
axios@1.14.1qua tài khoảnjasonsaaymanbị chiếm quyền. -
31/3, 01:00 UTC: Phát hành tiếp
axios@0.30.4cho các dự án dùng nhánh 0.x. - 31/3, ~03:15 UTC: npm gỡ bỏ cả hai phiên bản Axios độc hại.
-
31/3, 04:26 UTC: npm phát hành security-holder cho
plain-crypto-jsđể ngăn tái phát hành.
Tài khoản bị xâm nhập như thế nào
Kẻ tấn công chiếm quyền tài khoản npm jasonsaayman, đổi email sang ifstap@proton.me. Dấu hiệu nhận biết:
- Bản hợp pháp dùng GitHub Actions và OIDC Trusted Publisher của npm; bản độc hại thiếu hoàn toàn liên kết này.
- Không có trường
gitHeadtrong bản bị xâm nhập (không có commit GitHub tương ứng). - Sử dụng token truy cập npm dài hạn, phát hành thủ công thay vì qua CI/CD.
Nếu tổ chức bạn phát hành package npm, hãy luôn kiểm tra tự động liên kết OIDC và nguồn gốc CI/CD cho mọi bản phát hành.
Kỹ thuật tiêm phụ thuộc
Kẻ tấn công chỉ thay đổi 1 dòng trong package.json để thêm plain-crypto-js@^4.2.1 làm phụ thuộc runtime. Gói này không import vào codebase, chỉ tồn tại để thực thi hook postinstall khi cài đặt.
Phân tích binary xác nhận: chỉ package.json thay đổi giữa bản 1.14.0 sạch và 1.14.1 bị xâm nhập.
Payload độc hại làm gì
Cơ chế dropper
Hook postinstall trong plain-crypto-js thực thi file ẩn setup.js (4.2 KB), dùng hai lớp che giấu:
- Mã hóa XOR với chuỗi
"OrDeR_7077". - Mã hóa Base64, đảo ngược ký tự.
Sau giải mã, dropper xác định OS rồi thực thi payload theo nền tảng.
Các đường tấn công theo nền tảng
macOS:
Ghi AppleScript vào /tmp/6202033
Thực thi qua osascript
Tải payload xuống /Library/Caches/com.apple.act.mond
Windows:
Sao chép PowerShell vào %PROGRAMDATA%\wt.exe
Thực thi dropper VBScript qua cscript
Linux:
Tải Python RAT xuống /tmp/ld.py
Thực thi qua nohup python3
Các payload đều liên hệ máy chủ command-and-control (C2) với POST body riêng cho từng nền tảng:
- macOS:
packages.npm.org/product0 - Windows:
packages.npm.org/product1 - Linux:
packages.npm.org/product2
Khả năng của RAT
RAT này cho phép:
- Thực thi lệnh shell tùy ý
- Liệt kê/trích xuất file hệ thống
- Liệt kê/tiêm tiến trình
- Tiêm nhị phân vào memory (fileless)
- Ping C2 mỗi 60 giây
Kẻ tấn công kiểm soát hoàn toàn máy của bạn, có thể đọc file .env, lấy API key, SSH key, cloud token, ...
Payload tự dọn dẹp
Sau khi thực thi, dropper:
- Xóa file
setup.js - Xóa
package.jsonđộc hại - Đổi tên
package.md(giả dạng 4.2.0) thànhpackage.json
Kết quả: npm list báo bản 4.2.0 dù đã từng thực thi 4.2.1 độc hại. Khó nhận biết nếu chỉ kiểm tra dependencies sau khi bị tấn công.
Ai đứng sau cuộc tấn công
Google Threat Intelligence quy kết cho UNC1069 (Triều Tiên), với phần mềm độc hại macOS trùng với WAVESHAPER (backdoor C++ do Mandiant theo dõi tháng 2/2026). Nhóm này có lịch sử xâm nhập chuỗi cung ứng để đánh cắp thông tin xác thực, crypto và hạ tầng cloud của hàng nghìn tổ chức.
Cách kiểm tra xem bạn có bị ảnh hưởng không
Bước 1: Kiểm tra phiên bản Axios
Chạy lệnh sau ở mọi dự án dùng Axios:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Nếu có kết quả, dự án đã cài bản bị xâm nhập.
Bước 2: Kiểm tra phụ thuộc độc hại
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"
Nếu thư mục tồn tại, payload đã từng được thực thi.
Bước 3: Kiểm tra dấu vết RAT trên hệ thống
macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Linux:
ls -la /tmp/ld.py 2>/dev/null
Windows (PowerShell):
Test-Path "$env:PROGRAMDATA\wt.exe"
Bước 4: Kiểm tra chỉ số mạng
Chặn và quét các kết nối đến:
-
Tên miền C2:
sfrclak.com -
IP C2:
142.11.206.73 -
URL C2:
http://sfrclak.com:8000/6202033
Bước 5: Kiểm tra nhật ký CI/CD
Kiểm tra mọi pipeline CI/CD từ 00:21 đến 03:15 UTC ngày 31/3. Nếu có npm install hoặc npm ci giải quyết Axios, môi trường build có thể đã thực thi dropper.
Các bước khắc phục ngay lập tức
Nếu phát hiện dấu hiệu xâm nhập, coi toàn bộ hệ thống bị compromise. Thực hiện các bước sau:
1. Hạ cấp Axios ngay lập tức
npm install axios@1.14.0
# hoặc cho nhánh 0.x:
npm install axios@0.30.3
2. Thêm override phiên bản trong package.json
Ngăn npm/yarn tự động nâng lên bản xấu:
{
"overrides": {
"axios": "1.14.0"
}
}
Yarn:
{
"resolutions": {
"axios": "1.14.0"
}
}
3. Xóa gói độc hại
rm -rf node_modules/plain-crypto-js
4. Xoay vòng tất cả thông tin xác thực
Giả định các secrets sau đã bị lấy:
- npm token
- AWS/GCP/Azure credential
- SSH key
- GitHub token
- API key trong
.env - Database credential
- Bất kỳ secret nào trong biến môi trường
Xoay vòng toàn bộ.
5. Chặn C2 ở cấp mạng
Thêm vào /etc/hosts hoặc firewall:
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. Nếu có dấu vết, xây dựng lại máy
Nếu tìm thấy dấu vết ở Bước 3, không nên tin tưởng hệ thống nữa. Khôi phục từ bản backup sạch.
Các biện pháp phòng thủ dài hạn cho nhóm phát triển API
Sử dụng lockfile và ghim phiên bản chính xác
Tấn công khai thác semver ^. Hãy ghi rõ phiên bản:
{
"dependencies": {
"axios": "1.14.0"
}
}
Luôn commit package-lock.json hoặc yarn.lock. Dùng npm ci thay cho npm install trong CI/CD.
Tắt script postinstall trong CI/CD
Toàn bộ tấn công phụ thuộc vào hook postinstall. Tắt nó bằng:
npm ci --ignore-scripts
Nếu cần build native, dùng .npmrc:
ignore-scripts=true
Kiểm tra phụ thuộc thường xuyên
npm audit
npx socket-security/cli audit
Chạy trong pipeline CI/CD, block nếu có lỗ hổng nghiêm trọng.
Giảm bề mặt phụ thuộc HTTP client
Đặt câu hỏi: Bạn có cần HTTP client bên thứ ba cho kiểm thử API?
Apidog cung cấp HTTP client tích hợp cho kiểm thử, debug, tạo tài liệu API — không cần Axios, node-fetch hay got. Loại bỏ hoàn toàn nguy cơ npm dependency bị xâm nhập.
Cụ thể, chuyển kiểm thử API sang Apidog giúp:
- Kiểm thử API: Dùng visual test builder thay vì script Axios
- Debug API: Dùng request inspector tích hợp
- Mock server: Tận dụng tính năng mock của Apidog thay vì tự build với Express + Axios
- CI/CD: Dùng Apidog CLI cho automation mà không cần HTTP npm client
Trải nghiệm Apidog miễn phí để giảm rủi ro chuỗi cung ứng.
Xác minh nguồn gốc gói
npm hỗ trợ Sigstore để xác minh nguồn gốc:
npm audit signatures
Bản Axios độc hại thiếu OIDC proof. Hãy kiểm tra mọi bản phát hành mới, nếu không có xác minh nguồn gốc, coi là đáng ngờ.
Ý nghĩa đối với hệ sinh thái JavaScript
Mô hình tin cậy đã bị phá vỡ
npm phụ thuộc vào bảo mật tài khoản maintainer. Một credential bị lộ = 83 triệu dự án có nguy cơ. 2FA giúp nhưng token dài hạn vẫn có thể bị đánh cắp.
Cộng đồng đã đề xuất:
- Bắt buộc OIDC publish: Tất cả package lớn cần CI/CD + OIDC
- Phê duyệt hai người: Phải có maintainer thứ hai approve bản phát hành quan trọng
-
Giới hạn quyền runtime: Hạn chế hook
postinstall(giống Deno)
Tấn công chuỗi cung ứng không dừng lại
Chỉ vài ngày sau sự cố fracture RubyGems, PyPI cũng liên tục bị tấn công. Dev API phải coi dependency tree là bề mặt tấn công, không chỉ là tiện ích.
Như Reddit bình luận: "NPM là điểm yếu lớn nhất của Internet hiện nay." Dù cường điệu hay không, tấn công Axios cho thấy hậu quả là thật.
So sánh: Các phương pháp phụ thuộc HTTP client
| Phương pháp | Rủi ro chuỗi cung ứng | Gánh nặng bảo trì | Khả năng kiểm thử |
|---|---|---|---|
| Axios + script tùy chỉnh | Cao (phụ thuộc bên thứ ba) | Cao (quản lý phiên bản) | Yêu cầu thiết lập thủ công |
| Node.js native fetch | Thấp (tích hợp sẵn trong runtime) | Thấp | Tính năng kiểm thử hạn chế |
| Client tích hợp sẵn của Apidog | Không (không có phụ thuộc npm) | Không (được nền tảng quản lý) | Kiểm thử, giả lập, tài liệu đầy đủ |
| script curl/httpie | Thấp (công cụ cấp hệ thống) | Trung bình | Tự động hóa hạn chế |
Câu hỏi thường gặp
Axios có an toàn để sử dụng bây giờ không?
Có. Phiên bản 1.14.0 và 0.30.3 là sạch. Các bản bị xâm nhập (1.14.1, 0.30.4) bị gỡ bỏ sau ~3 giờ. Xác minh bằng:
npm list axios
và kiểm tra lockfile đảm bảo đúng phiên bản.
Làm sao biết RAT có chạy trên máy không?
Kiểm tra dấu vết theo nền tảng:
- macOS:
/Library/Caches/com.apple.act.mond - Linux:
/tmp/ld.py - Windows:
%PROGRAMDATA%\wt.exe - Kiểm tra thư mục
node_modules/plain-crypto-jstrong dự án.
Dropper tự dọn dẹp, nên không phát hiện dấu vết không đảm bảo bạn an toàn.
Có nên ngừng dùng Axios hoàn toàn không?
Không nhất thiết. Axios vẫn là library tốt. Nhưng bạn nên đánh giá lại nhu cầu dùng HTTP client bên thứ ba. Node.js 18+ có fetch gốc. Nếu kiểm thử API, ưu tiên dùng nền tảng như Apidog với HTTP client tích hợp sẵn.
Làm sao ngăn chặn các cuộc tấn công chuỗi cung ứng?
- Ghim phiên bản phụ thuộc chính xác
- Commit lockfile
- Chạy
npm ci --ignore-scriptstrong CI/CD - Kiểm tra dependency thường xuyên
- Xác minh nguồn gốc gói bằng
npm audit signatures - Tối thiểu hóa dependency tree
- Ưu tiên kiểm thử API trên nền tảng không dùng HTTP npm client
Cuộc tấn công này có liên quan đến vụ rò rỉ mã nguồn Claude Code không?
Không liên quan. Cùng ngày nhưng khác bản chất: Axios là xâm nhập chuỗi cung ứng, Claude Code là lỗi build Bun làm rò rỉ source map.
Ai đứng sau cuộc tấn công Axios?
Google Threat Intelligence quy kết cho UNC1069 (Triều Tiên), phần mềm độc hại trùng với backdoor WAVESHAPER.
Có bao nhiêu nhà phát triển bị ảnh hưởng?
Các phiên bản độc hại tồn tại ~2-3 giờ, với 83 triệu lượt tải/tuần. Chưa có số liệu chính thức từ npm. StepSecurity xác nhận dropper liên hệ C2 chỉ sau 1.1 giây từ khi npm install bắt đầu.
Apidog hỗ trợ ngăn chặn tấn công chuỗi cung ứng như thế nào?
Apidog loại bỏ vector tấn công HTTP client bằng cách cung cấp HTTP client tích hợp cho kiểm thử, debug, tài liệu API — không cần cài đặt Axios, node-fetch hoặc bất kỳ HTTP library npm nào.
Những điểm chính
- Tấn công chuỗi cung ứng Axios ảnh hưởng >83 triệu lượt tải/tuần qua duy nhất 1 tài khoản maintainer bị đánh cắp
- RAT nhắm mọi nền tảng, đánh cắp credential, SSH key, cloud token
- Kiểm tra hệ thống ngay bằng các bước phát hiện trên
- Ghim phiên bản phụ thuộc và tắt script postinstall trong CI/CD
- Giảm bề mặt HTTP client dependency bằng các công cụ tích hợp như Apidog
- Bảo mật registry package là vấn đề hệ thống, không chỉ npm
Cuộc tấn công Axios là hồi chuông cảnh tỉnh. Mỗi phụ thuộc trong node_modules là một quyết định tin cậy. Hãy chủ động kiểm soát, đừng mặc định.
nút
Top comments (0)