DEV Community

Cover image for Tấn Công Chuỗi Cung Ứng axios@1.14.1: Cần Làm Gì Ngay?
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

Tấn Công Chuỗi Cung Ứng axios@1.14.1: Cần Làm Gì Ngay?

TÓM TẮT

Vào ngày 30–31 tháng 3 năm 2026, các phiên bản axios 1.14.1 và 0.30.4 trên npm đã bị cài cắm phần phụ thuộc độc hại, cài đặt trojan truy cập từ xa (RAT) lên máy bị nhiễm. Cả hai phiên bản đã bị gỡ bỏ, phiên bản an toàn là 1.14.0. Nếu bạn từng cài axios@1.14.1 hoặc 0.30.4, hãy coi máy của mình đã bị xâm nhập và thay đổi toàn bộ thông tin xác thực ngay lập tức.

Dùng thử Apidog ngay hôm nay

Axios là gì và tại sao điều này lại quan trọng

axios đạt 100 triệu lượt tải mỗi tuần trên npm. Đây là HTTP client phổ biến cho cả frontend framework, backend Node.js và ứng dụng doanh nghiệp. Khi một gói nền tảng như vậy bị xâm phạm, phạm vi ảnh hưởng rất lớn — chỉ cần chạy npm install trong khung thời gian 30–31/3 là đã có thể vô tình cài phần mềm độc hại.

Đây là một rủi ro chuỗi cung ứng thực tế, không phải lý thuyết: trojan đa giai đoạn này cho phép thực thi lệnh tùy ý, đánh cắp dữ liệu hệ thống và duy trì hoạt động trên máy nhiễm. Nếu đội nhóm bạn dùng axios, và bạn dùng Apidog để thiết kế/kiểm thử HTTP client, hãy đọc kỹ hướng dẫn này trước khi deploy tiếp theo.

Dòng thời gian của cuộc tấn công

  • 30/03/2026 — 23:59:12 UTC: Gói độc hại plain-crypto-js@4.2.1 được phát hành lên npm, sử dụng email nrwise@proton.me. Trước đó, bản sạch 4.2.0 đã được đưa lên để ngụy trang.
  • 31/03/2026 — 00:05:41 UTC: Socket (hệ thống phát hiện phần mềm độc hại) gắn cờ plain-crypto-js@4.2.1 là mã độc chỉ sau 6 phút phát hành.
  • 31/03/2026 — ngay sau nửa đêm: axios@1.14.1 được phát hành, kéo theo plain-crypto-js@4.2.1 làm dependency. Bản phát hành này không có trong GitHub tag chính thức.
  • 31/03/2026 — buổi sáng: Issue GitHub #10604 công khai về việc axios bị xâm phạm. Ban đầu maintainer không thể thu hồi quyền của attacker do quyền npm vượt trội.
  • 31/03/2026: Cả axios@1.14.1axios@0.30.4 bị gỡ khỏi npm. Maintainer thu hồi token, siết chặt kiểm soát quyền xuất bản và điều tra quy trình phát hành.

Cách cuộc tấn công diễn ra

Attacker tận dụng lỗ hổng quy trình phát hành: dùng một npm token có thời hạn dài cùng quy trình xuất bản tự động. Sau khi có được thông tin xác thực maintainer, attacker phát hành phiên bản mới ngoài quy trình chính thức, thêm plain-crypto-js@4.2.1 làm dependency. Gói này được ngụy trang như một thư viện mã hóa hợp pháp.

Bên trong plain-crypto-js@4.2.1 là một chuỗi mã độc đa giai đoạn:

  1. Giai đoạn 1 — Thực thi: Gói chạy mã tại thời điểm cài đặt (qua npm lifecycle script) để drop payload thứ cấp.
  2. Giai đoạn 2 — RAT: Payload cài đặt trojan truy cập từ xa, mở backdoor bền vững.
  3. Giai đoạn 3 — Đánh cắp dữ liệu: RAT thực thi lệnh shell từ C2, đọc biến môi trường & file bí mật, gửi dữ liệu ra ngoài.

RAT có thể duy trì hoạt động kể cả sau khi gói npm đã bị gỡ bỏ, trừ khi máy bị quét và làm sạch thủ công.

Tôi có bị ảnh hưởng không?

Bạn có khả năng bị ảnh hưởng nếu:

  • Đã chạy npm install axios hoặc npm install (axios trong package.json) từ 23:59 UTC ngày 30/3 đến trưa UTC ngày 31/3/2026.
  • node_modules/axios/package.json báo version 1.14.1 hoặc 0.30.4.
  • package-lock.json hoặc yarn.lock phân giải axios về các version trên.

Kiểm tra ngay:

# Kiểm tra axios đã cài
npm list axios

# Kiểm tra package-lock
grep '"axios"' package-lock.json | head -5

# Kiểm tra plain-crypto-js
npm list plain-crypto-js
ls node_modules/plain-crypto-js 2>/dev/null && echo "BỊ NHIỄM" || echo "Không tìm thấy"
Enter fullscreen mode Exit fullscreen mode

Nếu plain-crypto-js xuất hiện trong node_modules, máy bạn đã chạy mã độc.

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

1. Cập nhật axios ngay lập tức

npm install axios@1.14.0
# hoặc ghim vào phiên bản an toàn mới nhất
npm install axios@latest
Enter fullscreen mode Exit fullscreen mode

Xác minh lại:

npm list axios
# Phải là 1.14.0 hoặc cao hơn (sau khi có bản sạch mới)
Enter fullscreen mode Exit fullscreen mode

2. Nếu bạn đã cài phiên bản bị xâm phạm

Đây không phải update dependency thông thường — hãy coi máy đã bị xâm nhập:

  • Thay đổi toàn bộ bí mật có thể truy cập từ máy: API key, database credential, SSH key, token cloud, biến .env, v.v.
  • Kiểm tra biến môi trường — RAT nhắm đến các biến môi trường và file bí mật.
  • Kiểm tra outbound network trong khung thời gian nghi ngờ — tìm kết nối tới IP lạ.
  • Quét dấu vết duy trì hoạt động — cron job, script khởi động, service systemd được thêm bất thường.
  • Cài lại OS nếu là CI runner hoặc production server đã cài bản bị xâm phạm. Nếu là laptop dev, thay đổi toàn bộ credential trước khi coi là sạch.

3. Kiểm tra các pipeline CI/CD

Nếu CI/CD đã từng chạy npm install trong khoảng thời gian trên, môi trường CI có thể đã nhiễm mã độc:

# Kiểm tra build log trong thời điểm bị ảnh hưởng
# Tìm axios@1.14.1 trong output cài đặt

# Xác minh lại node_modules của CI
npm list axios plain-crypto-js
Enter fullscreen mode Exit fullscreen mode

Thay đổi tất cả bí mật mà pipeline CI có quyền truy cập: deployment key, cloud credential, registry token.

4. Xác minh tệp khóa

Hãy chắc chắn package-lock.json/yarn.lock không còn reference tới 1.14.1/0.30.4. Nếu có, tạo lại file khóa:

rm package-lock.json
npm install
Enter fullscreen mode Exit fullscreen mode

Kiểm tra file khóa mới phải phân giải axios về bản an toàn trước khi commit.

Sử dụng Apidog để kiểm tra các cuộc gọi API của axios của bạn

Nếu bạn dùng axios làm HTTP client, Apidog giúp xác minh tích hợp API vẫn hoạt động đúng sau khi cập nhật dependency.

Sau khi lên axios@1.14.0, nhập các endpoint API hiện có vào Apidog và chạy kiểm thử hồi quy để đảm bảo không xảy ra sai lệch request/response. Đặc biệt, nếu lo rằng bản mã độc đã tiêm thêm dữ liệu, hãy bổ sung assert kiểm tra:

// Khẳng định phản hồi của Apidog
pm.test("Phản hồi sạch — không có trường nào bị tiêm vào", () => {
    const body = pm.response.json();
    pm.expect(body).to.not.have.property('__injected');
    pm.expect(pm.response.headers.get('X-Injected-Header')).to.be.null;
});
Enter fullscreen mode Exit fullscreen mode

Chạy toàn bộ test suite với axios đã nâng cấp trong Apidog sẽ cho bạn baseline sạch trước khi đẩy lên production.

Dùng thử Apidog miễn phí để thiết lập kiểm thử hồi quy HTTP client.

Tại sao các cuộc tấn công chuỗi cung ứng trên npm lại khó ngăn chặn

Đây là mô hình phổ biến, không phải ngoại lệ:

  • event-stream (2018): Maintainer độc hại thêm mã độc nhắm tới ví bitcoin.
  • ua-parser-js (2021): Bị xâm phạm để cài cryptominer và password stealer.
  • node-ipc (2022): Maintainer cố ý thêm mã phá hoại nhắm tới IP nhất định.
  • xz utils (2024): Chiến dịch kéo dài 2 năm để cài backdoor vào thư viện nén Linux.
  • axios (2026): Credential maintainer bị xâm phạm, RAT được phát hành qua dependency độc hại.

Điểm chung: quyền xuất bản thuộc về tài khoản, không phải mã nguồn. Nếu credential maintainer bị rò rỉ, attacker sẽ thừa hưởng toàn bộ trust chain.

Các biện pháp thực tiễn:

Biện pháp Tác dụng
Tệp khóa (package-lock.json) Ghim version, ngăn update âm thầm
npm audit trong CI Cảnh báo lỗ hổng đã biết trước khi deploy
Socket.dev / Snyk Phân tích hành vi, cảnh báo gói đáng ngờ trước khi có CVE
Xác thực hai yếu tố trên npm Khó xâm phạm credential hơn
npm publish với short-lived token Hạn chế thời gian lộ nếu token bị leak
Đọc diff tệp khóa trong PR Phát hiện thay đổi dependency bất thường khi duyệt code

Nhóm axios hiện đã chuyển sang kiểm soát xuất bản chặt chẽ, loại bỏ dần token dài hạn. Nhưng giải pháp cần đến từ cả hệ sinh thái, không chỉ từng gói riêng lẻ.

Chỉ số về sự thỏa hiệp (IOCs)

Theo Socket:

  • Gói độc hại: plain-crypto-js@4.2.1, axios@1.14.1, axios@0.30.4
  • Email phát hành: nrwise@proton.me
  • Hành vi: Kết nối mạng khi cài npm, RAT duy trì hoạt động, đánh cắp biến môi trường
  • Phiên bản axios an toàn: 1.14.0 trở xuống (trừ 0.30.4), 1.13.x, 1.12.x

Nếu nghi ngờ bị lây nhiễm, báo cáo về security@npmjs.com và lưu toàn bộ log.

Kết luận

Sự kiện axios 1.14.1 bị xâm phạm nhấn mạnh rằng bảo mật dependency là quy trình liên tục, không phải kiểm tra một lần. Hãy luôn khóa version, tích hợp phân tích hành vi như Socket vào CI, thay đổi credential khi nghi ngờ bất thường, và duyệt lại file khóa thường xuyên.

Nếu cần xác thực lại tích hợp API sau khi cập nhật axios, Apidog cung cấp đầy đủ test case, assertion và mock để đảm bảo hành vi HTTP client ổn định trước khi deploy.

Câu hỏi thường gặp

Các phiên bản axios nào đã bị xâm phạm?

axios@1.14.1axios@0.30.4. Đã bị gỡ khỏi npm. An toàn: 1.14.0 hoặc các bản 1.13.x, 1.12.x.

Gói độc hại của axios làm gì?

Kéo theo plain-crypto-js@4.2.1, triển khai RAT đa giai đoạn: thực thi lệnh từ xa, đánh cắp biến môi trường, duy trì hoạt động cả sau reboot.

Làm sao biết mình đã cài bản dính mã độc?

Chạy npm list axios — nếu ra 1.14.1/0.30.4 thì đã bị ảnh hưởng. Kiểm tra thêm npm list plain-crypto-js — có là mã độc đã chạy.

Chỉ cần update axios là đủ?

Không. Update chỉ ngăn future install, nhưng RAT có thể đã được cài và hoạt động. Nếu đã từng cài bản bị xâm phạm, phải đổi toàn bộ credential + kiểm tra máy kỹ càng.

Kẻ tấn công phát hành lên npm bằng cách nào?

Khả năng cao đã lấy được credential maintainer và dùng token npm dài hạn có quyền publish. Nhóm axios đang điều tra và đã siết lại quy trình.

Khác biệt giữa vụ này và lỗ hổng phần mềm bình thường?

Lỗ hổng là bug trong mã hợp pháp. Chuỗi cung ứng là mã độc được phát hành qua kênh chính thống. Mã độc không bao giờ có trong GitHub axios — chỉ bị tiêm vào npm.

Bảo vệ dự án khỏi tấn công chuỗi cung ứng thế nào?

Dùng tệp khóa, chạy npm audit trong CI, thêm Socket.dev để phân tích hành vi, bật 2FA tài khoản npm, dùng short-lived token khi publish, kiểm tra diff của file lock khi duyệt PR.

Top comments (0)