Cách thức tấn công chuỗi cung ứng NPM Axios (Và cách bảo vệ các dự án API của bạn)

Ashley Innocent

Ashley Innocent

1 tháng 4 2026

Cách thức tấn công chuỗi cung ứng NPM Axios (Và cách bảo vệ các dự án API của bạn)

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 đã xây dựng một API client, kiểm tra các điểm cuối hoặc kết nối giao diện người dùng với phần phụ trợ trong năm năm qua, bạn có thể đã sử dụng nó.

Vào ngày 31 tháng 3 năm 2026, lúc 00:21 UTC, một tác nhân đe dọa đã phát hành Axios phiên bản 1.14.1 thông qua một tài khoản duy trì bị chiếm quyền điều khiển. Gói này trông giống hệt bản phát hành hợp pháp. Sự khác biệt rất tinh vi: chỉ có package.json thay đổi trên 86 tệp. Nhưng tệp duy nhất đó đã tiêm một phần phụ thuộc "ma" có tên plain-crypto-js, triển khai một Trojan truy cập từ xa vào mọi máy tính chạy npm install.

Các phiên bản độc hại này tồn tại khoảng hai đến ba giờ trước khi npm gỡ bỏ chúng. Hai đến ba giờ trên tổng số 83 triệu lượt tải xuống hàng tuần.

💡
Nếu bạn đang xây dựng hoặc kiểm thử API, cuộc tấn công này đã nhắm trực tiếp vào bộ công cụ của bạn. HTTP client tích hợp sẵn của Apidog loại bỏ nhu cầu về các thư viện HTTP của bên thứ ba trong quy trình kiểm thử API của bạn, loại bỏ toàn bộ bề mặt tấn công này. Tải xuống Apidog miễn phí để thực hiện theo các bước kiểm tra bảo mật dưới đây.
nút

Bài viết này phân tích cách cuộc tấn công hoạt động, cách phát hiện xem hệ thống của bạn có bị xâm nhập hay không và những gì các nhóm API nên thay đổi trong quản lý phụ thuộc của họ trong tương lai.

Cách thức cuộc tấn công chuỗi cung ứng Axios diễn ra

Dòng thời gian

Kẻ tấn công đã thực hiện chiến dịch này một cách chính xác trong khung thời gian 18 giờ:

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, người duy trì chính của Axios. Chúng đã thay đổi email đăng ký thành ifstap@proton.me. Các bằng chứng pháp y quan trọng:

Sự khác biệt này rất quan trọng. Nếu tổ chức của bạn phát hành các gói npm, việc thiếu liên kết OIDC và bằng chứng nguồn gốc CI/CD trên một bản phát hành là một dấu hiệu đáng ngờ đáng để tự động kiểm tra.

Kỹ thuật tiêm phụ thuộc

Đây là điều làm cho cuộc tấn công này trở nên tinh vi. Kẻ tấn công không sửa đổi mã nguồn Axios. Chúng chỉ thay đổi một dòng trong package.json để thêm plain-crypto-js@^4.2.1 làm một phụ thuộc runtime. Gói này không bao giờ được nhập vào bất kỳ đâu trong codebase của Axios. Nó chỉ tồn tại để kích hoạt hook postinstall của nó trong quá trình npm install.

Phân tích nhị phân đã xác nhận độ chính xác của cuộc tấn công: chỉ có package.json khác biệt giữa bản phát hành 1.14.0 sạch và bản 1.14.1 bị xâm nhập trên tất cả 86 tệp trong gói.

Payload độc hại làm gì

Cơ chế dropper

Hook postinstall trong plain-crypto-js đã thực thi một tệp bị che giấu 4.2 KB có tên setup.js. Nó sử dụng hai lớp che giấu:

  1. Lớp 1: Mã hóa XOR sử dụng khóa được tạo từ chuỗi "OrDeR_7077"
  2. Lớp 2: Mã hóa Base64 với đảo ngược ký tự

Sau khi giải mã, dropper đã xác định hệ điều hành máy chủ và thực thi các payload dành riêng cho từng nền tảng.

Các đường tấn công dành riêng cho 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 (hiện vật duy trì)
Thực thi dropper VBScript qua cscript

Linux:

Tải Python RAT xuống /tmp/ld.py
Thực thi qua nohup python3

Cả ba nhánh đều liên hệ với máy chủ command-and-control với các POST body dành riêng cho từng nền tảng:

Khả năng của RAT

Trojan truy cập từ xa đã triển khai hỗ trợ:

Nói một cách đơn giản: kẻ tấn công có toàn quyền kiểm soát từ xa máy phát triển của bạn. Chúng có thể đọc các tệp .env của bạn, đánh cắp khóa API, sao chép khóa SSH và thu thập mã thông báo nhà cung cấp đám mây.

Chống pháp y: Payload tự dọn dẹp

Sau khi thực thi, dropper đã thực hiện ba bước dọn dẹp:

  1. Xóa setup.js
  2. Xóa package.json độc hại
  3. Đổi tên tệp package.md đã được chuẩn bị trước (báo cáo phiên bản 4.2.0) thành package.json

Điều này tạo ra một lớp đánh lừa, trong đó npm list sẽ báo cáo phiên bản 4.2.0 thay vì 4.2.1 đã thực thi payload. Một nhà phát triển kiểm tra các phụ thuộc của họ sau đó sẽ không thấy điều gì bất thường.

Ai đứng đằng sau cuộc tấn công này

Nhóm Tình báo Đe dọa của Google đã quy kết cuộc tấn công Axios cho UNC1069, một tác nhân đe dọa bị nghi ngờ là của Triều Tiên. Phần mềm độc hại macOS cho thấy "sự trùng lặp đáng kể" với WAVESHAPER, một backdoor C++ mà Mandiant đã theo dõi vào tháng 2 năm 2026.

Các nhóm được nhà nước Triều Tiên bảo trợ có kinh nghiệm sâu rộng với các cuộc tấn công chuỗi cung ứng. Trong lịch sử, chúng đã sử dụng các công cụ phát triển bị xâm nhập để đánh cắp tiền điện tử, và chiến dịch này tuân theo cùng một chiến lược: xâm nhập một công cụ phát triển được sử dụng rộng rãi để có quyền truy cập vào thông tin xác thực và cơ sở hạ tầng đám mây trên hàng nghìn tổ chức.

Mức độ tinh vi đáng chú ý. Việc tiêm phụ thuộc hai giai đoạn, triển khai RAT đa nền tảng và dọn dẹp chống pháp y đều cho thấy một chiến dịch được đầu tư tốt. Đây không phải là một "script kiddie" thả một cryptominer. Đây là một chiến dịch tình báo nhắm vào các máy trạm của nhà phát triển.

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 của bạn

Chạy lệnh này trong mọi dự án sử dụng Axios:

npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"

Nếu lệnh này trả về kết quả, dự án của bạn đã cài đặt một phiên bản bị xâm nhập.

Bước 2: Kiểm tra sự tồn tại của phụ thuộc độc hại

ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"

Ngay cả khi dropper đã tự dọn dẹp, sự tồn tại của thư mục này vẫn xác nhận payload đã được thực thi.

Bước 3: Kiểm tra các dấu vết RAT trên hệ thống của bạn

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 các chỉ số mạng

Chặn và quét các kết nối đến:

Bước 5: Kiểm tra nhật ký bản dựng CI/CD

Kiểm tra bất kỳ luồng CI/CD nào chạy trong khoảng thời gian từ 00:21 UTC ngày 31 tháng 3 đến 03:15 UTC. Bất kỳ lệnh npm install hoặc npm ci nào chạy trong khoảng thời gian này mà đã phân giải Axios đều có thể đã thực thi dropper trong môi trường xây dựng của bạn.

Các bước khắc phục ngay lập tức

Nếu bạn tìm thấy bất kỳ dấu hiệu xâm nhập nào, hãy coi hệ thống bị ảnh hưởng là đã bị xâm nhập hoàn toàn. Dưới đây là danh sách ưu tiên:

1. Hạ cấp Axios ngay lập tức

npm install axios@1.14.0

Hoặc đối với nhánh 0.x:

npm install axios@0.30.3

2. Thêm ghi đè phiên bản vào package.json của bạn

Ngăn chặn việc phân giải chuyển tiếp sang các phiên bản độc hại:

{
  "overrides": {
    "axios": "1.14.0"
  }
}

Đối với 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

Nếu dropper đã được thực thi trên máy của bạn, hãy giả định rằng những thông tin sau đã bị xâm nhập:

Xoay vòng mọi thứ. Không có cách nào để biết RAT đã trích xuất những gì trong thời gian hoạt động của nó.

5. Chặn C2 ở cấp độ mạng

Thêm vào tệp hosts hoặc quy tắc tường lửa của bạn:

echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts

6. Nếu tìm thấy dấu vết, hãy xây dựng lại máy

Một RAT có khả năng thực thi shell và truy cập hệ thống tệp có thể sửa đổi bất cứ điều gì. Nếu bạn tìm thấy dấu vết từ Bước 3, đừng tin tưởng hệ thống đó. Hãy xây dựng lại từ một trạng thái tốt đã biết.

Các biện pháp phòng thủ dài hạn cho các nhóm phát triển API

Sử dụng lockfile và ghim phiên bản chính xác

Cuộc tấn công Axios đã khai thác các phạm vi semver ^. Nếu package.json của bạn ghi "axios": "^1.14.0", npm sẽ phân giải phiên bản tương thích mới nhất, đó là 1.14.1 trong thời gian cuộc tấn công diễn ra.

{
  "dependencies": {
    "axios": "1.14.0"
  }
}

Ghim các phiên bản chính xác. Luôn commit tệp package-lock.json hoặc yarn.lock của bạn. Chạy npm ci thay vì npm install trong CI/CD để thực thi phân giải lockfile.

Tắt các script postinstall trong CI/CD

Toàn bộ cuộc tấn công phụ thuộc vào việc các hook postinstall được thực thi trong quá trình npm install. Bạn có thể tắt tính năng này:

npm ci --ignore-scripts

Điều này làm hỏng một số gói cần biên dịch gốc. Hãy kiểm tra các bản dựng của bạn trước, sau đó cho phép các script một cách có chọn lọc cho các gói cần chúng bằng cách sử 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 các lệnh này trong CI/CD như một cổng kiểm soát. Bất kỳ lỗ hổng nghiêm trọng hoặc cao nào cũng nên chặn bản dựng.

Giảm bề mặt phụ thuộc của HTTP client của bạn

Đây là câu hỏi sâu hơn mà cuộc tấn công này đặt ra: tại sao quy trình kiểm thử API của bạn lại phụ thuộc vào một thư viện HTTP của bên thứ ba có thể bị xâm nhập?

Apidog cung cấp một HTTP client tích hợp sẵn để kiểm thử, gỡ lỗi và lập tài liệu API. Bạn không cần Axios, node-fetch hoặc got trong bộ công cụ kiểm thử của mình. HTTP client là một phần của nền tảng, không có phụ thuộc của bên thứ ba nào có thể bị xâm nhập.

Cụ thể đối với kiểm thử API, việc chuyển các yêu cầu HTTP của bạn vào Apidog sẽ loại bỏ toàn bộ bề mặt tấn công:

Dùng thử Apidog miễn phí để xem việc loại bỏ các phụ thuộc thư viện HTTP khỏi quy trình làm việc API của bạn giúp giảm rủi ro chuỗi cung ứng như thế nào.

Xác minh nguồn gốc gói

npm hiện hỗ trợ xác minh nguồn gốc gói thông qua Sigstore. Kiểm tra xem các gói bạn phụ thuộc có sử dụng tính năng này không:

npm audit signatures

Các phiên bản Axios độc hại thiếu bằng chứng nguồn gốc OIDC. Các bản phát hành hợp pháp từ các luồng CI/CD bao gồm chứng thực mật mã về nguồn gốc bản dựng của chúng. Nếu một phiên bản mới xuất hiện mà không có bằng chứng nguồn gốc, hãy coi đó là đáng ngờ.

Ý nghĩa của điều này đối với hệ sinh thái JavaScript

Mô hình tin cậy đã bị phá vỡ

Mô hình tin cậy của npm phụ thuộc vào bảo mật tài khoản người duy trì. Một thông tin xác thực bị xâm nhập duy nhất trao cho kẻ tấn công quyền kiểm soát một gói mà 83 triệu dự án cài đặt mỗi tuần. Xác thực hai yếu tố có thể giúp ích, nhưng các mã thông báo truy cập có thời hạn dài vẫn có thể bị đánh cắp từ các môi trường phát triển bị xâm nhập.

Cộng đồng đang thảo luận về một số thay đổi cấu trúc:

Các cuộc tấn công chuỗi cung ứng không hề chậm lại

Cuộc tấn công này xảy ra chỉ vài ngày sau sự cố RubyGems fracture và các mối lo ngại về phụ thuộc PyPI đang diễn ra. Các registry gói trên mọi hệ sinh thái ngôn ngữ đang bị tấn công liên tục. Các nhà phát triển API cần xem cây phụ thuộc của họ như một bề mặt tấn công, chứ không phải là một sự tiện lợi.

Cuộc thảo luận trên Reddit đã nắm bắt được tâm trạng: “NPM là điểm yếu lớn nhất của internet ngày nay và nó vẫn sẽ gây ra một thảm họa khổng lồ.” Cho dù bạn có đồng ý với sự cường điệu này hay không, cuộc tấn công Axios chứng tỏ phạm vi tác động là có thật.

So sánh: Các phương pháp tiếp cận 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ó. Các phiên bản 1.14.0 và 0.30.3 là sạch. Các phiên bản bị xâm nhập (1.14.1 và 0.30.4) đã bị gỡ bỏ trong khoảng ba giờ. Xác minh phiên bản đã cài đặt của bạn bằng npm list axios và kiểm tra lockfile của bạn để xác nhận bạn đang sử dụng một phiên bản an toàn.

Làm sao để biết RAT có chạy trên máy của tôi không?

Kiểm tra các dấu vết dành riêng cho nền tảng: /Library/Caches/com.apple.act.mond trên macOS, /tmp/ld.py trên Linux, hoặc %PROGRAMDATA%\wt.exe trên Windows. Đồng thời kiểm tra xem node_modules/plain-crypto-js có tồn tại trong bất kỳ dự án nào của bạn không. Dropper tự dọn dẹp sau khi thực thi, vì vậy việc không có dấu vết không đảm bảo bạn an toàn nếu bạn đã cài đặt phiên bản bị xâm nhập.

Tôi có nên ngừng sử dụng Axios hoàn toàn không?

Không nhất thiết. Axios vẫn là một thư viện được duy trì tốt với hồ sơ mạnh mẽ. Nhưng cuộc tấn công này nên thúc đẩy bạn đánh giá xem bạn có thực sự cần một HTTP client của bên thứ ba hay không. Node.js 18+ bao gồm fetch gốc. Đối với kiểm thử API, các nền tảng như Apidog cung cấp các HTTP client tích hợp sẵn giúp loại bỏ sự phụ thuộc này.

Làm cách nào để ngăn chặn các cuộc tấn công chuỗi cung ứng trong các dự án của tôi?

Ghim các phiên bản phụ thuộc chính xác, commit lockfile, chạy npm ci --ignore-scripts trong CI/CD, kiểm tra các phụ thuộc thường xuyên, xác minh nguồn gốc gói bằng npm audit signatures, và tối thiểu hóa cây phụ thuộc của bạn. Cân nhắc chuyển các quy trình kiểm thử API sang các nền tảng tích hợp không dựa vào các gói npm để giao tiếp HTTP.

Cuộc tấn công này có liên quan đến vụ rò rỉ mã nguồn Claude Code không?

Cả hai sự kiện đều xảy ra vào cùng ngày (31 tháng 3 năm 2026), nhưng chúng không liên quan. Cuộc tấn công Axios là một sự xâm nhập chuỗi cung ứng có chủ đích của một tác nhân đe dọa được nhà nước bảo trợ. Vụ rò rỉ mã Claude Code là kết quả của một lỗi công cụ xây dựng Bun đã gửi mã nguồn bản đồ trong sản xuất. Sự trùng hợp về thời gian đã thúc đẩy cuộc thảo luận về bảo mật registry npm nói chung.

Ai đứng sau cuộc tấn công Axios?

Nhóm Tình báo Đe dọa của Google đã quy kết cuộc tấn công cho UNC1069, một tác nhân đe dọa bị nghi ngờ là của Triều Tiên. Phần mềm độc hại macOS có sự trùng lặp đáng kể với WAVESHAPER, một backdoor được Mandiant theo dõi. Các nhóm Triều Tiên có kinh nghiệm sâu rộng với các cuộc tấn công chuỗi cung ứng, thường nhắm mục tiêu vào thông tin xác thực của nhà phát triển và cơ sở hạ tầng tiền điện tử.

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 trong khoảng hai đến ba giờ. Với 83 triệu lượt tải xuống hàng tuần, nguy cơ phơi nhiễm là đáng kể. npm chưa công bố số liệu tác động chính thức. Tính năng phát hiện runtime của StepSecurity đã xác nhận dropper liên hệ C2 trong vòng 1.1 giây kể từ khi npm install bắt đầu, trước khi quá trình phân giải phụ thuộc hoàn tất.

Apidog có thể giúp ngăn chặn các cuộc tấn công chuỗi cung ứng không?

Apidog loại bỏ một vector tấn công lớn bằng cách cung cấp một HTTP client tích hợp sẵn để kiểm thử, gỡ lỗi và lập tài liệu API. Bạn không cần cài đặt Axios, node-fetch hoặc các thư viện HTTP khác trong quy trình kiểm thử của mình. Điều này giúp giảm bề mặt phụ thuộc npm của bạn và loại bỏ rủi ro các gói HTTP client bị xâm nhập ảnh hưởng đến quá trình phát triển API của bạn.

Những điểm chính

Cuộc tấn công Axios là một lời cảnh tỉnh. Mọi phụ thuộc trong node_modules của bạn là một quyết định về sự tin cậy. Hãy đảm bảo bạn đưa ra những quyết định đó một cách có chủ đích, chứ không phải mặc định.

nút

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