Skip to main content

Command Palette

Search for a command to run...

Khi mã nguồn mở trở thành vũ khí: Cuộc tấn công chuỗi cung ứng đang tự lan như virus

Published
11 min read
Khi mã nguồn mở trở thành vũ khí: Cuộc tấn công chuỗi cung ứng đang tự lan như virus

Tổng quan

Từ ngày 21 đến 22/04/2026, chiến dịch tấn công chuỗi cung ứng được gán cho nhóm TeamPCP (hoặc UNC6780) đã bất ngờ kích hoạt trở lại sau 26 ngày gián đoạn. Không dừng lại ở một nền tảng đơn lẻ, đợt bùng phát này đánh trúng ba hệ sinh thái lớn: npm, PyPI và Docker Hub thông qua việc xâm phạm các công cụ và thư viện phổ biến là Checkmarx KICS, Xinference, cùng với việc phát tán mã độc tự nhân bản CanisterSprawl.

Yếu tố nguy hiểm nhất của đợt bùng phát này là hiệu ứng lây nhiễm dây chuyền (cascading compromise). Kẻ tấn công không chỉ dừng lại ở việc chèn mã độc vào công cụ bảo mật Checkmarx KICS, mà còn lợi dụng chính tính năng tự động cập nhật của các hệ thống CI/CD như Dependabot để lây lan thụ động sang các ứng dụng hạ nguồn, điển hình là Bitwarden CLI. Mọi tổ chức có sử dụng các thư viện này và thực hiện quy trình CI/CD trong khung giờ 21-22/04 đang đối diện với rủi ro bị bòn rút thông tin xác thực đám mây (AWS, GCP), token môi trường và mã nguồn. Việc rà soát khẩn cấp lịch sử cập nhật dependency và chặn các kết nối tới máy chủ điều khiển (C2) của chiến dịch là hành động cần ưu tiên lúc này.

Hồ sơ tin tặc

Chiến dịch tấn công chuỗi cung ứng được đề cập không phải là hoạt động đơn lẻ hay mang tính cơ hội. Theo đánh giá từ các đơn vị tình báo an ninh mạng, đặc biệt là Google Threat Intelligence Group (GTIG), nhóm đứng sau được định danh nội bộ là UNC6780, còn được biết đến với tên tự xưng TeamPCP.

Nguồn gốc và mô hình hoạt động

TeamPCP có nền tảng từ các chiến dịch mã độc dạng worm (tự lây lan) trong hệ sinh thái mã nguồn mở. Một ví dụ tiêu biểu là sự kiện Shai-Hulud worm trên npm vào cuối năm 2025. Xuất hiện trong các gói bị nhiễm (ví dụ Bitwarden CLI) cho thấy khả năng cao đây là sự tiếp nối có chủ đích, không phải tái sử dụng ngẫu nhiên.

Khác với các nhóm APT truyền thống, TeamPCP không chỉ dừng lại ở việc xâm nhập mà còn xây dựng một hệ sinh thái kiếm tiền từ dữ liệu đánh cắp, bao gồm: Rò rỉ dữ liệu có kiểm soát, bán quyền truy cập (access broker) và tống tiền doanh nghiệp.

Nhóm này được cho là có liên kết hoặc chia sẻ hạ tầng với các mạng lưới như: Vect, ShinyHunters, CipherForce.

Năng lực kỹ thuật và chiến thuật vận hành

TeamPCP sử dụng chiến lược có thể gọi là: “Ruthless Tool Reuse” (tái sử dụng công cụ một cách tàn bạo). Các thành phần chính bao gồm:

  • SANDCLOCK: Công cụ chuyên đánh cắp thông tin xác thực nội bộ

  • CanisterWorm: Worm có khả năng tự lan trong hệ sinh thái package (npm, PyPI)

Một điểm khác biệt quan trọng của nhóm là việc sử dụng Internet Computer Protocol (ICP) và triển khai dưới dạng canister (container phi tập trung). Hệ quả để lại là không có máy chủ C2 truyền thống để triệt phá cũng như khó xác định vị trí và ngắt kết nối hạ tầng điều khiển.

Bên cạnh đó là khả năng thu thập credential quy mô lớn với hơn 40 loại credential khác nhau bao gồm:.env (biến môi trường), .npmrc (token npm), Terraform state/config, SSH private keys, Cloud credentials (AWS, GCP, Azure), Kubernetes secrets.

Chuỗi tấn công theo MITRE ATT&CK

T1195.002 – Supply Chain Compromise (Software Dependencies)

T1059.006 – Python Execution

T1059.007 – JavaScript/Node.js Execution

T1552.001 – Credentials in Files

T1552.004 – Private Keys

T1528 – Steal Application Access Token

T1082 – System Information Discovery

T1119 – Automated Collection

T1041 – Exfiltration over C2 Channel

T1567 – Exfiltration over Web Services

Quá Trình Thực Thi Chiến Dịch

Khác với các đợt rò rỉ dữ liệu thông thường, TeamPCP đã triển khai một ma trận tấn công ba gọng kìm với các mũi nhọn độc lập nhưng có khả năng cộng hưởng để lây nhiễm chéo. Quá trình thực thi này được chia nhỏ theo từng không gian mạng với cấu trúc tấn công cực kỳ tinh vi.

Mũi tấn công hệ sinh thái Python: Quy trình lây nhiễm qua thư viện Xinference (hơn 680,000 lượt tải) được chia làm tổ hợp các bước khép kín để qua mặt các hệ thống EDR:

  • Xâm nhập ban đầu: Kẻ tấn công đánh cắp thành công quyền phát hành (publish token) của quản trị viên gói Xinference trên PyPI.

  • Tiêm nhiễm (Injection): Mã độc được mã hóa Base64 đa tầng và nhúng thẳng vào file cốt lõi __init__.py của 3 phiên bản 2.6.0, 2.6.1 và 2.6.2.

  • Thực thi ẩn (Stage 1): Khi người dùng import thư viện, Python kích hoạt payload. Payload tải xuống một "collector" mã độc, khởi tạo một tiến trình con độc lập (detached subprocess). Nhờ đó, ứng dụng gốc không bị treo, đánh lừa kỹ sư bảo mật rằng cài đặt vẫn diễn ra bình thường.

  • Trích xuất dữ liệu (Stage 2): Tiến trình con bắt đầu rà soát điên cuồng hệ thống cục bộ: từ các file môi trường .env, .npmrc, cấu hình Kubernetes/Docker, API key... Nó đặc biệt tập trung quét metadata service của AWS (truy cập IP 169.254.169.254) để bòn rút lệnh truy cập IAM và IMDSv2 token. Tất cả được nén vào tệp love.tar.gz.

  • Exfiltration: Mã độc làm sạch dấu vết, xóa tệp tạm, đồng thời sử dụng cURL với HTTP header giả mạo X-QT-SR: 14 đẩy love.tar.gz về bệ phóng whereisitat.lucyatemysuperbox[.]space.

Mũi lây lan tự động (Sâu mạng CanisterSprawl qua npm): Đây là vector mở đường với mục đích vét sạch bề mặt tấn công chung:

  • Phát tán diện rộng: Lập ra 16 gói thư viện giả mạo trực thuộc những nhà phát hành như @automagik hay pgserve.

  • Kích hoạt bằng hook cài đặt: Lợi dụng tính năng postinstall của npm. Ngay khi nhà phát triển tải về, một lệnh bash ẩn sẽ tự động kích hoạt tiến trình rà soát bộ nhớ và lịch sử của shell.

  • Thu hoạch diện rộng: Áp dụng bộ lọc gồm hơn 40 định dạng biểu thức chính quy (Regex) để truy quét đủ mọi loại khóa riêng tư, chứng chỉ bảo mật và token đám mây.

  • Chuyển giao hệ sinh thái: Độc đáo hơn, nếu sâu mạng phát hiện thấy token publish của PyPI trên host, CanisterSprawl lập tức thay hình đổi dạng (morph), sử dụng chính token đó để lây nhiễm đạn dược sang các gói thư viện Python, từ sâu npm chuyển hóa thành sâu PyPI.

Đỉnh điểm tự động hóa mù quáng (Chuỗi dịch vụ Checkmarx - Bitwarden): Đây là một quy trình cascading (hiệu ứng domino) kinh điển tận dụng "lỗ hổng" của niềm tin mã mở (Trusted Automation):

  • Cài bẫy công cụ (The Trap): Kẻ tấn công chiếm quyền kho chứa Image chính thức checkmarx/kics trên Docker Hub lúc 12:35 UTC ngày 22/04. KICS vốn là bộ dò quét hạ tầng mã (IaC), nó luôn có quyền đọc mọi file nhạy cảm nhất. Mã độc được tiêm vào nhưng KICS vẫn hoạt động quét bình thường. Tuy nhiên, nó bị biến thành một tên gián điệp hai mang: thu thập các chứng chỉ cấu hình nhạy cảm mà nó vừa quét và gửi bản telemetry trái phép về audit.checkmarx[.]cx.

  • Cú tát lây nhiễm thụ động (The Cascade Effect): Đúng lúc đó, hệ thống cập nhật tự động CI/CD (như Dependabot hoặc tương đương) của Bitwarden dò thấy KICS có "bản cập nhật mới" (bản mã độc) và ngây thơ kéo nó về môi trường biên dịch nội bộ.

  • Phản ứng dây chuyền: Pipeline của Bitwarden sử dụng Docker KICS đã thỏa hiệp để build gói. Kết quả, bản build của công cụ Bitwarden CLI (bản 2026.4.0) bị nhiễm trùng. Phiên bản độc hại này sau đó được đẩy thẳng lên npm với payload ký danh "Shai-Hulud: The Third Coming", lén lút trích xuất mã token GitHub của hàng ngàn nhà phát triển dùng Bitwarden CLI về kho tàng trữ public của hacker. Đây chính là cơn ác mộng sâu kín nhất của nền kinh tế tự động hóa chuỗi cung ứng!

IOCs

Hash

971670c10eff28339a085ca50a600e35

3ee893ae46530b92e0d26435fb979d82 9b3257e45b27a6bbe4e240e41a3a306f

484067fd6232f7cdd7b664b33857fc2c

fe17e2ea4012d07d90ecb7793c1b0593a6138d25a393192263e751660ec3cd0

Network Indicators

hxxps://whereisitat.lucyatemysuperbox[.]space

hxxps://audit.checkmarx[.]cx/v1/telemetry

Nhận định từ chuyên gia

Đợt bùng phát này đã lột tả một khía cạnh đáng lo ngại về rủi ro của kỷ nguyên "tự động hóa niềm tin" (trusted automation). Việc Bitwarden bị nhiễm mã độc vì luồng tự động Dependabot kéo một Docker Image chứa backdoor của công cụ bảo mật KICS thể hiện chiến lược tấn công vòng lặp tinh vi. Tin tặc hiểu rõ rằng: việc đánh cắp thẳng dữ liệu đôi lúc mất nhiều công sức hơn là kiểm soát được những thành phần nằm sẵn trong chuỗi CI/CD của đối tượng mục tiêu. Bằng cách chèn backdoor vào chính "người gác cổng" như Checkmarx KICS, mã độc dễ dàng lách qua mọi bước rà soát mã tĩnh (SAST).

Với các tổ chức và doanh nghiệp ứng dụng luồng CI/CD, sự kiện này là hồi chuông cảnh báo về việc lạm dụng tự động hóa cập nhật mà không có sự kiểm soát phiên bản phần mềm song song. Một thư viện bên thứ ba tự ý cập nhật lên latest mà không qua bước kiểm thử bảo mật sandbox có thể khiến toàn bộ ứng dụng doanh nghiệp trở thành vũ khí chống lại chính mình chỉ trong khoảng thời gian dwell time 30 phút. Nguồn tài nguyên của các công cụ framework máy học như Xinference cũng chỉ ra xu hướng mới: tin tặc supply chain đã bắt đầu theo đuôi những kho lưu trữ có sức nóng của làn sóng AI để tiếp cận với những cỗ máy khai thác hạ tầng khổng lồ trên AWS hay GCP.

Khuyến nghị và Hành động

Biện pháp tức thời (0-24 giờ): Tất cả hệ thống đang chạy Xinference cần phải hạ cấp bằng lệnh pip install xinference==2.5.0 -y. Các quản trị viên hệ thống có sử dụng Bitwarden CLI, Checkmarx KICS hay nền tảng phụ thuộc vào CanisterSprawl từ ngày 21/04 cần ngay lập tức cô lập môi trường thực thi để tránh lan rộng. Cấu hình file host chặn các domain C2 được liệt kê ở trên. Quan trọng nhất, bất kỳ thông tin xác thực nào (kể cả Cloud Token, SSH Keys, AWS IAM roles) từng được nạp vào biến môi trường trong khoản thời gian quét độc hại đều phải coi như đã thỏa hiệp và buộc phải xoay vòng (revoke and rotate) ngay lập tức.

Hành động ngắn hạn (1-7 ngày): Thực hiện truy vết toàn bộ luồng mạng tới IP 169.254.169.254 (Metadata service của AWS) để tìm kiếm các yêu cầu độc hại cố gắng trích xuất IMDSv2 token ngoài luồng mặc định. Đóng băng các luồng cập nhật tự động (Dependabot, Renovate) trên các Pipeline nhạy cảm cho đến khi đội ngữ SOC thiết lập quy trình kiểm thử trước (pre-flight checks).

Cải thiện dài hạn: Doanh nghiệp cần xây dựng một kho lưu trữ cục bộ (Private Artifact Registry) tự cô lập cho các gói npm, PyPI và hình ảnh Docker Container. Các luồng quy trình cấp phép phát hành phải đi qua một Policy Server độc lập kiểm tra chữ ký xác thực trước khi đồng bộ.

Tham khảo

New npm supply-chain attack self-spreads to steal auth tokens

TeamPCP deploys Iran-targeted wiper in Kubernetes attacks

TeamPCP Supply Chain Campaign: Update 008 - 26-Day Pause Ends with Three Concurrent Compromises (Checkmarx KICS, Bitwarden CLI Cascade, xinference PyPI), CanisterSprawl npm Worm Identified, and Tier 1 Coverage Returns

Xinference PyPI Supply Chain Poisoning Warning - NSFOCUS

More from this blog

F

FPT IS Security

766 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.