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

Ashley Innocent

Ashley Innocent

2 tháng 4 2026

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 đã bị xâm phạm trên npm với một phần phụ thuộc độc hại cài đặt một trojan truy cập từ xa (RAT) vào các máy bị lây nhiễm. Cả hai phiên bản này đã bị gỡ bỏ. Phiên bản an toàn là 1.14.0. Nếu bạn đã cài đặt axios@1.14.1 hoặc 0.30.4, hãy coi máy của bạn đã bị xâm nhập và thay đổi tất cả thông tin xác thực ngay lập tức.

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

axios có 100 triệu lượt tải xuống hàng tuần trên npm. Đây là một HTTP client được sử dụng trong vô số framework frontend, dịch vụ Node.js backend và ứng dụng doanh nghiệp. Khi một gói phần mềm nền tảng như vậy bị xâm phạm, phạm vi ảnh hưởng là rất lớn — các nhà phát triển đã chạy npm install trong một khoảng thời gian ngắn vào ngày 30–31 tháng 3 đã vô tình kéo phần mềm độc hại vào máy của họ.

Đây không phải là một rủi ro chuỗi cung ứng giả định. Nó đã xảy ra, đã được xác nhận, và gói dữ liệu độc hại rất nghiêm trọng: một trojan truy cập từ xa đa giai đoạn có khả năng thực thi các lệnh tùy ý, đánh cắp dữ liệu hệ thống và duy trì hoạt động trên các máy bị lây nhiễm.

Nếu nhóm của bạn sử dụng axios, và bạn dùng Apidog để thiết kế và kiểm thử các tích hợp HTTP client của mình, hãy đọc bài viết này trước lần triển khai tiếp theo.

Tải ứng dụng

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

Ngày 30 tháng 3 năm 2026 — 23:59:12 UTC: Một gói độc hại có tên plain-crypto-js@4.2.1 được xuất bản lên npm bởi một tài khoản sử dụng nrwise@proton.me. Một phiên bản sạch trước đó (4.2.0) đã được xuất bản 18 giờ trước đó dưới dạng một bản typosquat thuyết phục của thư viện crypto-js hợp pháp.

Ngày 31 tháng 3 năm 2026 — 00:05:41 UTC: Hệ thống phát hiện phần mềm độc hại tự động của Socket đã gắn cờ plain-crypto-js@4.2.1 là độc hại — sáu phút sau khi nó được xuất bản.

Ngày 31 tháng 3 năm 2026 — ngay sau nửa đêm: axios@1.14.1 được xuất bản lên npm, kéo theo plain-crypto-js@4.2.1 làm phần phụ thuộc. Bản phát hành này không xuất hiện trong các thẻ chính thức của kho lưu trữ GitHub của axios. Thẻ hợp lệ gần đây nhất vẫn là v1.14.0.

Ngày 31 tháng 3 năm 2026 — buổi sáng: Vấn đề GitHub #10604 được công khai, báo cáo cả axios@1.14.1axios@0.30.4 đã bị xâm phạm. Các nhà duy trì Axios xác nhận rằng ban đầu họ không thể thu hồi quyền truy cập của kẻ tấn công — tài khoản bị xâm phạm có quyền npm cao hơn so với các nhà duy trì hợp pháp.

Ngày 31 tháng 3 năm 2026: Cả axios@1.14.1axios@0.30.4 đều bị gỡ bỏ khỏi npm. Các nhà duy trì Axios bắt đầu thu hồi token, thắt chặt quyền kiểm soát xuất bản và điều tra cách một token npm có thời hạn dài đã bị lợi dụng để có được quyền xuất bản trái phép.

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

Cuộc tấn công đã khai thác một lỗ hổng trong quy trình xuất bản của axios: một token npm có thời hạn dài đã được sử dụng cùng với quy trình xuất bản đáng tin cậy. Kẻ tấn công — có thể sau khi đánh cắp thông tin xác thực của một nhà duy trì — đã sử dụng token này để xuất bản một phiên bản mới bên ngoài quy trình phát hành thông thường.

Phiên bản mới đã đưa plain-crypto-js@4.2.1 vào làm phần phụ thuộc. Tên gói được thiết kế để trông giống như một tiện ích mật mã hợp pháp; phiên bản 4.2.0 sạch trước đó đã tạo ra một lịch sử ngắn để giảm sự nghi ngờ.

Bên trong plain-crypto-js@4.2.1, phân tích của Socket đã phát hiện một gói dữ liệu độc hại đa giai đoạn:

  1. Giai đoạn 1 — Thực thi: Gói phần mềm chạy mã tại thời điểm cài đặt (thông qua các script vòng đời của npm) để thả một gói dữ liệu độc hại thứ cấp.
  2. Giai đoạn 2 — Triển khai RAT: Gói dữ liệu độc hại cài đặt một trojan truy cập từ xa mở một cửa hậu bền vững.
  3. Giai đoạn 3 — Đánh cắp dữ liệu: RAT có khả năng thực thi các lệnh shell tùy ý được gửi từ máy chủ C2, đọc các biến môi trường và bí mật từ hệ thống tệp, và gửi dữ liệu hệ thống ra ngoài qua mạng.

RAT duy trì hoạt động qua các lần khởi động lại, nghĩa là các máy đã cài đặt phiên bản bị xâm phạm vẫn gặp rủi ro ngay cả sau khi gói npm bị gỡ bỏ, trừ khi RAT được tìm kiếm và loại bỏ một cách rõ ràng.

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

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

Kiểm tra ngay lập tức:

# Kiểm tra phiên bản đã cài đặt
npm list axios

# Kiểm tra tệp khóa
grep '"axios"' package-lock.json | head -5

# Kiểm tra sự hiện diện của 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"

Nếu plain-crypto-js có mặt trong node_modules của bạn, bạn đã chạy phiên bản độc hại.

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

Xác minh:

npm list axios
# Nên hiển thị 1.14.0 hoặc cao hơn (sau khi một bản 1.14.x sạch được xuất bản)

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

Đừng coi đây là một bản cập nhật phần phụ thuộc thông thường. Hãy coi máy của bạn đã bị xâm phạm:

3. Kiểm tra các pipeline CI/CD của bạn

Nếu pipeline xây dựng của bạn đã chạy npm install trong khoảng thời gian đó, môi trường CI của bạn có thể đã bị xâm phạm. Kiểm tra:

# Kiểm tra nhật ký xây dựng trong khoảng thời gian bị ảnh hưởng
# Tìm axios@1.14.1 trong bất kỳ đầu ra cài đặt nào

# Xác minh node_modules hiện tại của CI đã sạch
npm list axios plain-crypto-js

Thay đổi bất kỳ bí mật nào mà pipeline CI của bạn có quyền truy cập: khóa triển khai, thông tin xác thực nhà cung cấp đám mây, token registry.

4. Xác minh tệp khóa của bạn

Các tệp khóa (package-lock.json, yarn.lock) nên ghim các phiên bản chính xác. Nếu tệp khóa của bạn có 1.14.1, hãy tạo lại nó:

# Xóa và tạo lại
rm package-lock.json
npm install

Kiểm tra tệp khóa mới phân giải axios thành một phiên 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 sử dụng axios làm HTTP client để gọi API, Apidog có thể giúp bạn xác minh rằng tích hợp của bạn vẫn gửi đúng yêu cầu sau khi cập nhật phần phụ thuộc.

Sau khi cập nhật lên axios@1.14.0, hãy nhập các điểm cuối API hiện có của bạn vào Apidog và chạy kiểm tra hồi quy nhanh để xác nhận hành vi không thay đổi. Điều này đặc biệt hữu ích nếu bạn lo lắng rằng phiên bản độc hại có thể đã can thiệp vào các gói dữ liệu yêu cầu hoặc phản hồi — các khẳng định phản hồi của Apidog cho phép bạn xác thực các giá trị trường, tiêu đề và mã trạng thái chính xác:

// Khẳng định sau 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;
});

Chạy bộ kiểm thử đầy đủ của bạn với phiên bản axios đã cập nhật trong Apidog cung cấp cho bạn một đường cơ sở sạch đã được ghi lại trước khi bạn đẩy lên sản xuất.

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

Cuộc tấn công axios không phải là một bất thường. Đó là một mô hình:

Điểm chung: tin tưởng vào tài khoản xuất bản, không phải vào mã nguồn. Mô hình của npm cấp quyền xuất bản cho các nhà duy trì, và nếu thông tin xác thực của một nhà duy trì bị xâm phạm, kẻ tấn công sẽ thừa hưởng sự tin tưởng đó.

Các biện pháp giảm thiểu thực sự hữu ích:

Biện pháp Tác dụng
Tệp khóa (package-lock.json) Ghim phiên bản chính xác, ngăn chặn nâng cấp âm thầm
npm audit trong CI Gắn cờ các lỗ hổng đã biết trước khi triển khai
Socket.dev / Snyk Phân tích hành vi — gắn cờ các gói đáng ngờ ngay cả trước khi có CVE
Xác thực hai yếu tố trên npm Khiến việc xâm phạm thông tin xác thực trở nên khó khăn hơn
npm publish với token có thời hạn ngắn Hạn chế thời gian phơi nhiễm nếu một token bị rò rỉ
Đọc tệp khóa trong PR Phát hiện những thay đổi phụ thuộc không mong muốn trong quá trình duyệt mã

Nhóm axios kể từ đó đã thừa nhận rằng các token npm có thời hạn dài là một phần của vấn đề và đang chuyển sang các biện pháp kiểm soát xuất bản chặt chẽ hơn. Nhưng giải pháp cần đến từ hệ sinh thái, không chỉ từ các gói riêng lẻ.

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

Theo phân tích của Socket:

Nếu bạn nghi ngờ bị lây nhiễm, hãy gửi báo cáo cho nhóm bảo mật npm tại security@npmjs.com và giữ lại nhật ký.

Kết luận

Việc axios 1.14.1 bị xâm phạm là một lời nhắc nhở rằng bảo mật phụ thuộc không phải là một cuộc kiểm tra một lần — đó là một quy trình liên tục. Hãy khóa phiên bản của bạn, chạy các công cụ phân tích hành vi như Socket trong CI của bạn, thay đổi thông tin xác thực khi có bất kỳ điều gì bất thường, và thường xuyên xem xét các tệp khóa của bạn trong quá trình duyệt mã.

Nếu bạn cần xây dựng lại niềm tin vào tích hợp API của mình sau khi cập nhật axios, Apidog cung cấp cho bạn các kịch bản kiểm thử, khẳng định và công cụ giả lập để xác minh hành vi HTTP client của bạn trước khi triển khai.

Tải ứng dụng

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. Cả hai đã bị gỡ bỏ khỏi npm. Phiên bản an toàn là 1.14.0 (hoặc bất kỳ phiên bản nào trong các dòng 1.13.x, 1.12.x).

Gói dữ liệu độc hại của axios làm gì?Nó kéo theo plain-crypto-js@4.2.1, triển khai một gói dữ liệu độc hại đa giai đoạn bao gồm một trojan truy cập từ xa (RAT). RAT có thể thực thi các lệnh tùy ý từ một máy chủ C2 từ xa, đánh cắp các biến môi trường và bí mật, và duy trì hoạt động qua các lần khởi động lại.

Làm cách nào để biết liệu tôi có đã cài đặt phiên bản bị xâm phạm không?Chạy npm list axios — nếu nó hiển thị 1.14.1 hoặc 0.30.4, bạn bị ảnh hưởng. Cũng kiểm tra npm list plain-crypto-js — nếu gói đó có mặt, mã độc hại đã chạy trên máy của bạn.

Chỉ cập nhật axios có đủ không?Không. Cập nhật sẽ loại bỏ phần phụ thuộc độc hại trong tương lai, nhưng RAT có thể đã được cài đặt và duy trì hoạt động trên máy. Nếu bạn đã cài đặt phiên bản bị xâm phạm, hãy thay đổi tất cả bí mật và kiểm tra máy để tìm các cơ chế duy trì hoạt động.

Làm thế nào kẻ tấn công có thể xuất bản lên npm mà không phải là một nhà duy trì?Kẻ tấn công có khả năng đã xâm phạm thông tin xác thực của một nhà duy trì và lợi dụng một token npm có thời hạn dài có quyền xuất bản. Nhóm axios đang điều tra và thắt chặt các biện pháp kiểm soát xuất bản.

Sự khác biệt giữa vụ việc này và một lỗ hổng thông thường là gì?Lỗ hổng là một khiếm khuyết trong mã hợp pháp. Một cuộc tấn công chuỗi cung ứng đưa mã độc hại thông qua một kênh xuất bản đáng tin cậy. Mã bị xâm phạm chưa bao giờ nằm trong kho lưu trữ GitHub của axios — nó đã được tiêm trực tiếp vào quá trình xuất bản của npm.

Làm thế nào tôi có thể bảo vệ các dự án của mình khỏi các cuộc tấn công chuỗi cung ứng trong tương lai?Sử dụng các tệp khóa, chạy npm audit trong CI, thêm một công cụ như Socket.dev để phân tích hành vi, bật xác thực 2 yếu tố trên tài khoản npm, sử dụng token xuất bản có thời hạn ngắn, và kiểm tra sự khác biệt của tệp khóa trong quá trình duyệt mã.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API