# AsyncAPI Under Attack: Khi 2 Triệu Lượt Tải Mỗi Tuần Trở Thành Con Đường Phát Tán Malware

## Tóm Tắt Chiến Dịch

Vào ngày 14/07/2026, kẻ tấn công đã xâm nhập thành công tổ chức AsyncAPI trên npm — một trong những dự án mã nguồn mở phổ biến nhất cho các API event-driven, và tiêm mã độc vào **4 gói npm** với tổng cộng hơn **2 triệu lượt tải mỗi tuần**. Đây là một cuộc tấn công chuỗi cung ứng phần mềm (software supply chain attack) cực kỳ tinh vi, kết hợp ba loại malware: **info-stealer**, **crypto-stealer**, và **Remote Access Trojan (RAT)**.

Điểm đặc biệt nguy hiểm: cuộc tấn công **không sử dụng post-install script** (đã bị npm v12 chặn), mà thay vào đó **nhúng mã độc trực tiếp vào file JavaScript chính** của mỗi gói. Malware được kích hoạt ngay khi module bị import/require — khiến lệnh `npm install --ignore-scripts` **hoàn toàn vô dụng**.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/77d26988-2250-4195-a2fd-b749ab9e867d.png align="center")

## **Các Gói Bị Ảnh Hưởng**

| **Gói npm** | **Phiên bản bị nhiễm** | **Phiên bản an toàn** | **Lượt tải/tuần (ước tính)** |
| --- | --- | --- | --- |
| `@asyncapi/generator` | 3.3.1 | 3.3.0 | ~100K |
| `@asyncapi/generator-helpers` | 1.1.1 | 1.1.0 | ~50K |
| `@asyncapi/generator-components` | 0.7.1 | 0.7.0 | ~50K |
| `@asyncapi/specs` | 6.11.2, 6.11.2-alpha.1 | 6.11.1 | ~2.7M |

## Timeline Sự Kiện

### Trước ngày tấn công

| **Thời điểm** | **Sự kiện** | **Ý nghĩa** |
| --- | --- | --- |
| **29/04/2026** | Lỗ hổng `pull_request_target` trong repo `asyncapi/generator` được xác định bằng **Proof-of-Concept** | Kẻ tấn công (hoặc bên thứ ba) đã biết cách khai thác từ sớm |
| **17/05/2026** | Bản fix được đề xuất qua Pull Request | Bản fix **CHƯA được merge** — để ngỏ cửa sổ khai thác gần 2 tháng |
| **14/07/2026** | Ngày tấn công diễn ra | Lỗ hổng vẫn tồn tại trên production |

### **Diễn biến ngày 14/07/2026**

| **Thời gian (UTC)** | **Giai đoạn** | **Hành động** | **Chi tiết kỹ thuật** | **Tác động** |
| --- | --- | --- | --- | --- |
| **05:08** | **Stage 0 — Credential Theft** | Mở **37 Pull Request** vào repository `asyncapi/generator` | Một Pull Request chứa mã JavaScript đã được **obfuscate**, được thiết kế để thực thi trong workflow `pull_request_target`. Các PR còn lại đóng vai trò tạo "nhiễu" nhằm che giấu PR độc hại. | Đánh lạc hướng maintainer và tạo điều kiện cho quá trình đánh cắp thông tin xác thực diễn ra âm thầm. |
| **05:08 – 06:57** | **Stage 0 — Credential Theft** | Workflow CI/CD bị lợi dụng để **đánh cắp token của release bot** | Workflow `pull_request_target` checkout mã nguồn từ branch của kẻ tấn công thay vì base branch, khiến mã độc được thực thi với quyền truy cập vào **repository secrets** và **GitHub Actions token**. | Kẻ tấn công chiếm được **npm publish token** hợp pháp, mở đường cho việc phát hành package độc hại. |
| **06:58** | **Stage 1 — Code Injection** | Push commit độc hại vào nhánh `next` | Sử dụng token vừa đánh cắp để push trực tiếp vào repository chính thức, chèn mã độc vào source code. | Kích hoạt pipeline phát hành (release pipeline) hợp lệ của dự án. |
| **07:10** | **Stage 1 — Package Publish** | Publish **3 package generator** lên npm | Workflow `release-with-changesets.yml` tự động publish thông qua cơ chế **OIDC Trusted Publisher**, tạo provenance hợp lệ. | Các package `@asyncapi/generator@3.3.1`, `generator-helpers@1.1.1` và `generator-components@0.7.1` được phát hành với chữ ký hợp lệ, khiến người dùng khó phát hiện bất thường. |
| **08:06** | **Stage 1 — Package Publish** | Publish `@asyncapi/specs@6.11.2` | Tiếp tục sử dụng pipeline phát hành chính thức để đưa phiên bản độc hại lên npm Registry. | Package có khoảng **2,7 triệu lượt tải mỗi tuần** bắt đầu phân phối malware tới các dự án sử dụng phiên bản mới. |
| **08:30** | **Stage 1 — Package Publish** | Publish `@asyncapi/specs@6.11.2-alpha.1` | Phát hành thêm phiên bản Alpha chứa cùng payload độc hại. | Mở rộng phạm vi ảnh hưởng (blast radius) tới cả những người dùng đang thử nghiệm phiên bản pre-release. |
| **08:30 – 11:18** | **Stage 2 — Active Exploitation** | Malware được kích hoạt khi ứng dụng `import` hoặc `require()` package | Mã độc tạo một tiến trình Node.js chạy nền (detached process), tải file `sync.js` từ **IPFS**, giải mã và triển khai **Miasma RAT**, sau đó thiết lập persistence và kết nối tới máy chủ C2. | Máy của lập trình viên và các CI/CD runner có thể bị nhiễm trong quá trình build, test hoặc chạy ứng dụng sử dụng package độc hại. |
| **~11:18** | **Response** | Gỡ bỏ (unpublish) toàn bộ **5 phiên bản độc hại** khỏi npm Registry | Đội ngũ AsyncAPI phản ứng sau khi nhận được cảnh báo từ cộng đồng và các hãng bảo mật, nhanh chóng thu hồi các package bị xâm phạm. | Chấm dứt việc phát tán malware qua npm Registry và bắt đầu quá trình điều tra, khắc phục sự cố. |

## Hồ Sơ Tin Tặc

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/45ee71b2-c70a-4dc8-acfd-9ce0d0a50137.png align="center")

### **TeamPCP — Tổng Quan**

Các chiến dịch Shai-Hulud và Miasma được ngành bảo mật theo dõi dưới nhóm threat actor có tên **TeamPCP**, còn được biết đến qua nhiều bí danh:

| **Tên gọi** | **Nguồn theo dõi** |
| --- | --- |
| **TeamPCP** | Tên chính, được OX Security, JFrog, Snyk sử dụng |
| **DeadCatx3** | Bí danh trên các forum underground |
| **PCPcat** | Tên biến thể trên một số tracker |
| **ShellForce / CipherForce** | Bí danh theo dõi bởi một số hãng threat intelligence |
| **CanisterWorm** | Tên gọi theo đặc điểm kỹ thuật worm |

**Đặc điểm chung:**

*   Chuyên tấn công **chuỗi cung ứng phần mềm** qua các registry mã nguồn mở (npm, PyPI, Cargo)
    
*   Khai thác **CI/CD pipeline, GitHub Actions, developer credentials** để phân phối malware quy mô lớn
    
*   Nhắm vào **hạ tầng mã nguồn mở "load-bearing"** — các gói nền tảng được hàng triệu dự án phụ thuộc — để tối đa hóa blast radius
    
*   Hoạt động theo mô hình **cybercrime có tổ chức**, không phải APT quốc gia (state-sponsored)
    

### **Lịch Sử Chiến Dịch — Từ Shai-Hulud Đến AsyncAPI**

| **Thời điểm** | **Chiến dịch** | **Mục tiêu** | **Kỹ thuật chính** | **Quy mô** |
| --- | --- | --- | --- | --- |
| **09/2025** | **Shai-Hulud** (gốc) | Hệ sinh thái npm nói chung | Self-replicating npm worm, install-time hooks (`preinstall`/`postinstall`), đánh cắp npm token + GitHub PAT | Hàng trăm gói bị nhiễm; đánh dấu bước ngoặt từ typosquatting sang worm tự động |
| **04–05/2026** | **Mini Shai-Hulud** (Wave 1) | **TanStack**, **Mistral AI**, Guardrails AI, UiPath | GitHub Actions "pwn request" + cache poisoning + OIDC token theft → publish gói với **SLSA Build Level 3 provenance hợp lệ** | Lần đầu tiên trong lịch sử: provenance hợp lệ bị vũ khí hóa |
| **12/05/2026** | **Open-source Shai-Hulud** | Cộng đồng hacker | TeamPCP **công khai mã nguồn worm** trên các forum | Biến công cụ độc quyền thành "commodity malware" — bất kỳ ai cũng có thể tạo biến thể |
| **18/05/2026** | **Megalodon** (Wave 2) | GitHub repositories | Push hơn **5.000 commit độc hại** vào các repo để exfiltrate secrets quy mô lớn | Tấn công brute-force vào hạ tầng mã nguồn |
| **19/05/2026** | **Wave 5** | **@antv** ecosystem | Tấn công tự động | **600+ gói** bị compromise trong **22 phút** |
| **06/2026** | **Miasma — Red Hat** | `@redhat-cloud-services` npm packages | "Phantom Gyp" (`binding.gyp` độc hại), Bun-staged loaders, preinstall hooks | Hàng chục gói Red Hat bị nhiễm; frontend libraries bị inject credential-stealer |
| **06/2026** | **Miasma — LeoPlatform** | LeoPlatform / RStreams | Phantom Gyp + Bun loaders, bypass Node.js security tools | Pipeline dữ liệu serverless bị xâm nhập |
| **14/07/2026** | **AsyncAPI** (bài phân tích này) | `@asyncapi` npm org (4 gói, ~2.9M tải/tuần) | CI/CD pwn request → import-time execution (bypass ignore-scripts) → Miasma RAT + IPFS/Nostr/Ethereum C2 | Tiến hóa lớn nhất: không cần install hook, bypass npm v12 |

## **Phân Tích Kỹ Thuật Chi Tiết**

### **Giai đoạn 0 — Đánh Cắp Credentials qua "Pwn Request"**

Cuộc tấn công **không bắt đầu từ npm** mà bắt đầu từ **GitHub Actions**. Kẻ tấn công khai thác một lỗ hổng cấu hình (misconfiguration) trong workflow CI/CD:

*   05:08 UTC: Kẻ tấn công mở 37 pull request vào repository asyncapi/generator.
    
*   Một trong số đó chứa JavaScript bị obfuscate được thiết kế để chạy trong workflow sử dụng trigger `pull_request_target`.
    
*   `Trigger pull_request_target` thực thi với quyền truy cập vào repository secrets — thay vì sandbox như `pull_request`thông thường Workflow đã checkout code của kẻ tấn công thay vì base branch, cho phép exfiltrate token của release bot
    

### **Giai đoạn 1 — Lợi Dụng Pipeline Release Hợp Pháp**

Sau khi có token, kẻ tấn công:

1.  **Push commit độc hại** vào branch `next` lúc 06:58 UTC
    
2.  Hành động này trigger workflow hợp pháp `release-with-changesets.yml`
    
3.  Các gói được publish thông qua **hệ thống OIDC trusted-publisher** của GitHub
    
4.  **Kết quả:** Các gói mang **provenance/SLSA attestation hợp lệ** — vì chúng được publish qua pipeline GitHub Actions chính thống
    

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/80196ba0-c290-46b6-bdae-b96d1a8088d8.png align="center")

### **Giai đoạn 2 — Import-Time Execution (Thực Thi Khi Import)**

Mã độc **KHÔNG sử dụng install hook** (post-install script). Thay vào đó:

*   Mã độc được nhúng **bên trong file source code hợp pháp**
    
*   Khi module được load (`require()` hoặc `import`), nó **spawn một tiến trình Node.js tách biệt (detached)**
    
*   Tiến trình này **tải encrypted loader (**`sync.js`**)** từ IPFS
    
*   Sau đó giải mã và triển khai **Miasma framework** đầy đủ
    

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/94053d71-4efd-4b01-9aa9-f492bfe56db1.png align="center")

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/36fbae06-5d29-4457-8f75-4296ba955ed0.png align="center")

**Hệ quả trực tiếp:** `npm install --ignore-scripts` **KHÔNG bảo vệ** khỏi cuộc tấn công này.

## **Phân Tích Malware — Payload Miasma RAT**

### **Quy Mô và Độ Phức Tạp**

*   **91.973 dòng code** — đây không phải malware "viết nhanh"
    
*   Kết hợp hybrid: **Info-stealer + Crypto-stealer + RAT + Worm**
    
*   Cross-platform: Hỗ trợ **Linux, macOS, Windows**
    

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/6034b2da-c7e8-43ab-85e2-78e1b9340a0a.png align="center")

### **Persistence (Duy Trì Trên Hệ Thống)**

Miasma cài đặt `sync.js` vào thư mục giả dạng NodeJS theo từng platform:

| **OS** | **Đường dẫn persistence** |
| --- | --- |
| **Linux** | `~/.local/share/NodeJS/sync.js` |
| **macOS** | `~/Library/Application Support/NodeJS/sync.js` |
| **Windows** | `%LOCALAPPDATA%\NodeJS\sync.js` |

**Cơ chế persistence:**

*   **Linux:** Tạo systemd unit `miasma-monitor.service`
    
*   **macOS:** Sửa shell startup files (`.bashrc`, `.zshrc`, v.v.)
    
*   **Windows:** Registry Run key
    

### **Hạ Tầng C2 (Command & Control)**

Malware sử dụng kiến trúc C2 **multi-layer, resilient**:

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/29a5f5b5-5762-4a54-8b18-75aed50469ea.png align="center")

Việc sử dụng **IPFS, Nostr, Ethereum smart contract, và BitTorrent DHT** làm kênh C2 dự phòng cho thấy kẻ tấn công có kỹ năng cao và thiết kế để **chống chịu takedown** — ngay cả khi C2 chính bị hạ, malware vẫn có nhiều đường liên lạc thay thế.

### **Khả Năng Thu Thập Dữ Liệu**

Malware thu thập toàn diện:

*   **Browser passwords** (tất cả trình duyệt chính)
    
*   **SSH keys**
    
*   **npm tokens, GitHub tokens**
    
*   **AWS credentials** và cloud config
    
*   **Cryptocurrency wallets** (nhiều loại ví)
    
*   **Clipboard data**
    

### **Khả Năng Tự Nhân Bản (Worm-like Propagation)**

**Đây là tính năng nguy hiểm nhất cho môi trường developer:**

Nếu malware phát hiện token xác thực hợp lệ cho **npm, PyPI, hoặc Cargo**, nó sẽ cố gắng **tự publish vào các gói mà nạn nhân quản lý** trên các registry đó.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/e3ead5fa-ee24-4647-aec7-edc5a1803028.png align="center")

**Một developer bị nhiễm = vector phân phối mới.** Chuỗi lây lan có thể mở rộng theo cấp số nhân.

### **Cơ Chế Chống Phân Tích (Anti-Analysis)**

Malware thực hiện nhiều kiểm tra trước khi hoạt động:

| **Kiểm tra** | **Hành động nếu TRUE** |
| --- | --- |
| Đang chạy trong **máy ảo (VM)** | Tự hủy |
| Phát hiện **EDR/Endpoint Protection** | Tự hủy |
| Ngôn ngữ hệ thống là **tiếng Nga** | Tự hủy |

Kiểm tra locale tiếng Nga là **đặc điểm điển hình** của malware có nguồn gốc Nga hoặc CIS — kẻ tấn công không muốn lây nhiễm máy của chính mình hoặc đồng minh.

![](https://cdn.hashnode.com/uploads/covers/6777abffdb647396c7d71de4/62da022b-7c8d-4c97-92fd-6595dd9dc6f2.png align="center")

## **Tóm Tắt Rủi Ro**

Chiến dịch Miasma/Shai-Hulud do nhóm **TeamPCP** (hoặc các biến thể copycat) thực hiện tạo ra mức độ rủi ro cực kỳ nghiêm trọng đối với các doanh nghiệp công nghệ và cộng đồng mã nguồn mở:

1.  **Rủi ro lây nhiễm chéo diện rộng (Worm-like Propagation Risk):**
    
    *   Malware tự động săn tìm các token xác thực của các registry phổ biến (`npm`, `PyPI`, `Cargo`). Nếu một máy trạm của lập trình viên duy trì (maintainer) bất kỳ thư viện nào bị nhiễm, mã độc sẽ tự động đóng gói và publish phiên bản độc hại lên thư viện đó. Điều này tạo ra phản ứng dây chuyền lây nhiễm theo cấp số nhân.
        
2.  **Rủi ro lộ lọt thông tin cấu trị cao (High-Value Credential Theft):**
    
    *   Không chỉ đánh cắp mật khẩu trình duyệt hay ví tiền điện tử thông thường, chiến dịch này tập trung cao độ vào các bí mật kỹ thuật: **AWS/GCP/Azure credentials, Kubernetes/Vault tokens, SSH keys, GitHub Personal Access Tokens (PATs)**. Mất các thông tin này có thể dẫn đến việc toàn bộ hạ tầng cloud của tổ chức bị kiểm soát.
        
3.  **Rủi ro vô hiệu hóa các lá chắn bảo mật truyền thống (Security Bypass Risk):**
    
    *   **Bypass SLSA Provenance:** Kẻ tấn công không publish trực tiếp mà hijack luồng phát hành (CI/CD pipeline) hợp pháp của dự án gốc. Do đó, các cơ chế xác thực nguồn gốc dựa trên mật mã (OIDC, SLSA Build Level 3) đều xác nhận gói là "an toàn", vô hiệu hóa các bộ lọc tự động kiểm tra chữ ký số.
        
    *   **Bypass Static Scan & Ignore-scripts:** Do thực thi ngay lúc lệnh `import` hoặc `require` được gọi (import-time execution) thay vì dùng install-hooks, các thiết lập bảo mật cô lập cài đặt (`--ignore-scripts`) hoàn toàn bị vượt qua.
        

## **Tại Sao Các Biện Pháp Hiện Tại Thất Bại?**

| **Biện pháp bảo mật** | **Trạng thái** | **Lý do thất bại** |
| --- | --- | --- |
| `npm install --ignore-scripts` | Không hiệu quả | Malware không dùng install hook, thực thi khi `import/require()` |
| **npm Provenance / SLSA Attestation** | Bị bpass | Gói được publish qua pipeline CI/CD hợp pháp → attestation hợp lệ |
| **SCA (Software Composition Analysis)** | Không phát hiện | Phiên bản mới publish → chưa có trong cơ sở dữ liệu mối đe dọa |
| **npm v12 post-install block** | Không áp dụng | Kẻ tấn công nhúng code vào file JS chính, không cần post-install |
| **Lockfile pinning (**`npm ci`**)** | Bảo vệ một phần | Chỉ bảo vệ nếu đã pin phiên bản an toàn, không bảo vệ khi `npm install` hoặc bump dependency |

## **Indicators of Compromise (IOCs)**

### **Network IOCs**

| **Loại** | **Giá trị** | **Mục đích** |
| --- | --- | --- |
| **C2 Server** | `85[.]137[.]53[.]71` | Primary C2 |
| **C2 Ports** | `8080`, `8081`, `8091` | Command, Data Exfil, Backup |
| **IPFS Gateway** | [`ipfs.io`](http://ipfs.io) | Payload hosting & Fallback C2 |
| **BitTorrent** | [`router.bittorrent.com`](http://router.bittorrent.com) | Backup beaconing |
| **BitTorrent** | [`router.utorrent.com`](http://router.utorrent.com) | Backup beaconing |
| **BitTorrent** | [`dht.transmissionbt.com`](http://dht.transmissionbt.com) | Backup beaconing |

### **Blockchain IOCs**

| **Loại** | **Giá trị** |
| --- | --- |
| **Ethereum Address** | `0x12c37A86a0Ed0beBe5d1d6a43E42f07860eAc710` |

### **File System IOCs**

| **OS** | **Đường dẫn** |
| --- | --- |
| Linux | `~/.local/share/NodeJS/sync.js` |
| macOS | `~/Library/Application Support/NodeJS/sync.js` |
| Windows | `%LOCALAPPDATA%\NodeJS\sync.js` |
| Linux | systemd unit `miasma-monitor.service` |

### **Affected Package Versions**

| **Gói** | **Phiên bản độc hại** |
| --- | --- |
| `@asyncapi/generator` | `3.3.1` |
| `@asyncapi/generator-helpers` | `1.1.1` |
| `@asyncapi/generator-components` | `0.7.1` |
| `@asyncapi/specs` | `6.11.2`, `6.11.2-alpha.1` |

## **Bản Đồ Kỹ Thuật MITRE ATT&CK**

| **Tactic (Chiến thuật)** | **Technique ID** | **Technique Name (MITRE ATT&CK)** | **Cách thức áp dụng trong chiến dịch** |
| --- | --- | --- | --- |
| **Reconnaissance** | **T1595** | Active Scanning | Kẻ tấn công quét các repository GitHub công khai nhằm tìm kiếm các workflow GitHub Actions có cấu hình không an toàn, đặc biệt là việc lạm dụng trigger `pull_request_target`. |
| **Initial Access** | **T1190** | Exploit Public-Facing Application | Khai thác lỗi cấu hình `pull_request_target` trong repository `asyncapi/generator`, cho phép mã độc thực thi với quyền của GitHub Actions Runner và truy cập vào repository secrets. |
|  | **T1195.002** | Supply Chain Compromise: Compromise Software Dependencies | Chèn mã độc trực tiếp vào các package npm của AsyncAPI và phát hành thông qua pipeline release hợp pháp, biến package chính thức thành phương tiện phân phối malware. |
| **Execution** | **T1204.002** | User Execution: Malicious File | Mã độc được kích hoạt khi nhà phát triển hoặc hệ thống CI/CD thực hiện `import` hoặc `require()` các package đã bị cài cắm. |
|  | **T1059.003** | Command and Scripting Interpreter: Windows Command Shell | Thực thi các lệnh hệ thống trên Windows để tạo tiến trình chạy nền và triển khai payload tiếp theo. |
|  | **T1059.004** | Command and Scripting Interpreter: Unix Shell | Thực thi shell script trên Linux/macOS nhằm cài đặt malware và cấu hình môi trường thực thi. |
| **Persistence** | **T1543.003** | Create or Modify System Process: Systemd Service | Tạo dịch vụ `miasma-monitor.service` trên hệ thống Linux để đảm bảo malware tự khởi động sau khi reboot. |
|  | **T1547.001** | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Thiết lập Registry Run Keys trên Windows và chỉnh sửa các file khởi động như `.bashrc`, `.zshrc` trên Linux/macOS để duy trì quyền kiểm soát. |
| **Defense Evasion** | **T1140** | Deobfuscate/Decrypt Files or Information | Tải xuống file `sync.js` đã được mã hóa từ IPFS, sau đó giải mã trong bộ nhớ trước khi thực thi nhằm tránh bị phát hiện. |
|  | **T1497.001** | Virtualization/Sandbox Evasion: System Checks | Kiểm tra môi trường ảo hóa (VM, Sandbox) để quyết định có tiếp tục thực thi malware hay tự hủy. |
|  | **T1497.003** | Virtualization/Sandbox Evasion: Time-based Evasion | Sử dụng độ trễ thực thi, kiểm tra ngôn ngữ hệ thống (ví dụ: tiếng Nga) và các điều kiện môi trường nhằm né tránh phân tích động. |
|  | **T1036** | Masquerading | Ngụy trang thư mục và tệp độc hại bằng tên tương tự thư mục Node.js hợp pháp (ví dụ: `%LOCALAPPDATA%\NodeJS`) để giảm khả năng bị nghi ngờ. |
| **Credential Access** | **T1555** | Credentials from Password Stores | Thu thập mật khẩu đã lưu trong các trình duyệt phổ biến trên máy nạn nhân. |
|  | **T1552.001** | Unsecured Credentials: Private Keys | Quét hệ thống để tìm và đánh cắp các khóa riêng SSH được lưu trữ cục bộ. |
|  | **T1552.004** | Unsecured Credentials: Private Information in Cloud / Code | Thu thập token của npm, GitHub, PyPI, Cargo cùng các thông tin xác thực AWS, Azure, GCP và các dịch vụ Cloud khác. |
| **Discovery** | **T1082** | System Information Discovery | Thu thập thông tin hệ điều hành, hostname, múi giờ, ngôn ngữ locale và các đặc điểm của hệ thống để phục vụ quá trình lọc mục tiêu. |
| **Command and Control (C2)** | **T1071.001** | Application Layer Protocol: Web Protocols | Thiết lập kết nối HTTP/HTTPS tới máy chủ điều khiển (C2) thông qua các cổng 8080, 8081 và 8091. |
|  | **T1568** | Dynamic Resolution | Sử dụng Nostr, IPFS Gateway và smart contract Ethereum để phân giải hoặc chuyển đổi địa chỉ C2 khi cần thiết. |
|  | **T1105** | Ingress Tool Transfer | Tải xuống payload giai đoạn tiếp theo (`sync.js`) từ mạng phân tán IPFS. |
|  | **T1043** | Commonly Used Port | Sử dụng các cổng phổ biến của BitTorrent DHT để beaconing và truyền thông, giúp vượt qua nhiều cơ chế tường lửa. |
| **Exfiltration** | **T1048** | Exfiltration Over Alternative Protocol | Trích xuất dữ liệu đánh cắp thông qua các giao thức thay thế như IPFS hoặc BitTorrent DHT nhằm giảm khả năng bị phát hiện. |
| **Impact** | **T1496** | Resource Hijacking | Kích hoạt các module bổ sung như crypto-stealer và RAT để chiếm đoạt tài nguyên hệ thống cũng như tài sản số của nạn nhân. |
|  | **T1565** | Data Manipulation | Tự động chỉnh sửa các package do nạn nhân quản lý trên npm, PyPI hoặc Cargo nhằm tiếp tục phát tán malware và mở rộng chuỗi tấn công. |

## **Khuyến Nghị Ứng Phó**

### **Hành Động Ngay Lập Tức**

1.  **Revoke & Rotate Tokens:** Thu hồi ngay tất cả developer tokens (npm, PyPI, Cargo, GitHub) trên mọi máy có thể đã chạy các gói bị ảnh hưởng
    
2.  **Kiểm tra phiên bản đang sử dụng:** Nếu `package-lock.json` hoặc `node_modules` chứa bất kỳ phiên bản bị ảnh hưởng → coi máy đó là **compromised**
    
3.  **Rotate secrets:** Đổi tất cả SSH keys, AWS credentials, API keys trên máy bị nghi nhiễm
    
4.  **Kiểm tra file system:** Tìm kiếm `sync.js` tại các đường dẫn IOC trên tất cả máy developer và CI/CD runner
    

### **Giám Sát và Phát Hiện**

5.  **Monitor outbound traffic:** Giám sát kết nối đến `85[.]137[.]53[.]71`, BitTorrent bootstrap nodes, và IPFS gateways — đây là **bất thường** trong môi trường phát triển thông thường
    
6.  **Audit registry releases:** Kiểm tra tất cả commit và package releases gần đây trên registry của tổ chức để phát hiện code injection trái phép
    
7.  **Kiểm tra systemd services:** Trên Linux, tìm kiếm unit `miasma-monitor.service`
    

### **Phòng Thủ Dài Hạn**

8.  **Lockfile pinning:** Luôn sử dụng `npm ci` thay vì `npm install` trong CI/CD
    
9.  **Stability buffer:** Áp dụng chính sách không sử dụng package mới publish trong 48–72 giờ đầu
    
10.  **Build-time egress control:** Triển khai firewall cho build environment (Build Application Firewall), chặn outbound traffic đến các destination không được phê duyệt
     
11.  **GitHub Actions security:**
     
     *   **KHÔNG** sử dụng `pull_request_target` với `actions/checkout` trên PR code
         
     *   Review và audit tất cả workflow có sử dụng repository secrets
         
     *   Merge các security fix kịp thời — vulnerability đã biết từ tháng 4 nhưng fix chưa merge đến tháng 7
         
12.  **Giám sát hành vi import-time:** Triển khai giải pháp phát hiện mã độc thực thi tại thời điểm `require()`/`import` — không chỉ tại `install`
     

## **Bài Học Rút Ra**

### **Đối với Developer và DevOps**

*   **Provenance ≠ Trust:** Provenance hợp lệ chỉ chứng minh package được build từ pipeline chính thống, KHÔNG chứng minh code bên trong an toàn. Nếu pipeline bị compromise, provenance vẫn hợp lệ.
    
*   **Ignore-scripts không đủ:** Khi malware nhúng vào source code thay vì install hook, biện pháp này trở nên vô nghĩa.
    
*   **CI/CD là bề mặt tấn công:** Cuộc tấn công bắt đầu từ GitHub Actions misconfiguration — một khu vực thường nằm ngoài phạm vi quét của dependency scanner.
    

### **Đối với Tổ Chức**

*   **Supply chain attack ngày càng phức tạp:** Kẻ tấn công kết hợp CI/CD compromise + import-time execution + multi-layer C2 + worm propagation + false flag attribution.
    
*   **npm v12 chưa đủ:** Việc chặn post-install scripts là bước tiến nhưng **chưa giải quyết gốc rễ** — kẻ tấn công chỉ cần chuyển vector tấn công sang import-time.
    
*   **Build-time egress control** là layer phòng thủ quan trọng nhất mà hầu hết pipeline chưa triển khai — đây là lớp duy nhất có thể phát hiện và chặn C2 callback.
    

## Tham Khảo

[AsyncAPI npm organization compromised, 2M weekly downloads affected](https://www.ox.security/blog/asyncapi-npm-organization-compromised-2m-weekly-downloads-affected/)

[AsyncAPI npm Supply Chain Attack: Malware Injected Into Packages With 2 Million Weekly Downloads](https://securityaffairs.com/195395/security/asyncapi-npm-supply-chain-attack-malware-injected-into-packages-with-2-million-weekly-downloads.html)

[AsyncAPI npm Supply Chain Attack Delivers Miasma RAT](https://www.invisirisk.com/blog/asyncapi-npm-supply-chain-attack-delivers-miasma-rat/)

[M Red Team: AsyncAPI Supply Chain Compromise via GitHub Actions](https://www.wiz.io/blog/m-red-team-asyncapi-supply-chain-compromise-via-github-actions)
