DEV Community

Cover image for 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)
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

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.

Dùng thử Apidog ngay hôm nay

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.1 có hook postinstall chứa dropper.
  • 31/3, 00:21 UTC: Phát hành axios@1.14.1 qua tài khoản jasonsaayman bị chiếm quyền.
  • 31/3, 01:00 UTC: Phát hành tiếp axios@0.30.4 cho 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 gitHead trong 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:

  1. Mã hóa XOR với chuỗi "OrDeR_7077".
  2. 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
Enter fullscreen mode Exit fullscreen mode

Windows:

Sao chép PowerShell vào %PROGRAMDATA%\wt.exe
Thực thi dropper VBScript qua cscript
Enter fullscreen mode Exit fullscreen mode

Linux:

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

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:

  1. Xóa file setup.js
  2. Xóa package.json độc hại
  3. Đổi tên package.md (giả dạng 4.2.0) thành package.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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Linux:

ls -la /tmp/ld.py 2>/dev/null
Enter fullscreen mode Exit fullscreen mode

Windows (PowerShell):

Test-Path "$env:PROGRAMDATA\wt.exe"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

Yarn:

{
  "resolutions": {
    "axios": "1.14.0"
  }
}
Enter fullscreen mode Exit fullscreen mode

3. Xóa gói độc hại

rm -rf node_modules/plain-crypto-js
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Nếu cần build native, dùng .npmrc:

ignore-scripts=true
Enter fullscreen mode Exit fullscreen mode

Kiểm tra phụ thuộc thường xuyên

npm audit
npx socket-security/cli audit
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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-js trong 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-scripts trong 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)