Chuỗi tấn công supply chain Trivy lan rộng: Docker Hub, GitHub và Kubernetes đều bị ảnh hưởng

Tổng quan
Các nhà nghiên cứu an ninh mạng đã phát hiện thêm nhiều artifact độc hại trên Docker Hub liên quan đến vụ tấn công supply chain nhắm vào công cụ quét lỗ hổng Trivy. Sự cố này không chỉ dừng lại ở việc phát tán mã độc, mà còn mở rộng sang CI/CD pipelines, GitHub organization nội bộ và hạ tầng Kubernetes, cho thấy mức độ lan rộng nghiêm trọng.
Phiên bản Trivy cuối cùng được xác nhận an toàn là 0.69.3. Các phiên bản:
0.69.4 (đã bị gỡ)
0.69.5
0.69.6
đều chứa mã độc và không còn an toàn để sử dụng.
Docker Hub bị lợi dụng để phát tán mã độc
Các image Trivy độc hại (0.69.5, 0.69.6) được push lên Docker Hub mà không có release tương ứng trên GitHub, cho thấy dấu hiệu rõ ràng của việc bị xâm nhập.
Phân tích cho thấy các image này chứa:
Domain C2 giả mạo: scan.aquasecurtiy.org (typosquatting)
File exfiltration: payload.enc, tpcp.tar.gz
Liên kết đến GitHub repo backdoor: tpcp-docs-*
Đáng chú ý, dù đã bị xóa, các image này vẫn tồn tại qua cache/mirror (ví dụ mirror.gcr.io), khiến nhiều pipeline vẫn vô tình pull về bản độc hại.
Nguồn gốc: Tấn công GitHub Actions của Trivy
Cuộc tấn công bắt nguồn từ việc:
Kẻ tấn công chiếm quyền GitHub Actions của Trivy
Inject mã đánh cắp credential vào:
aquasecurity/trivy-action
aquasecurity/setup-trivy
Payload này được thiết kế để:
Thu thập GitHub token
Lấy SSH keys
Trích xuất cloud credentials
Thu thập biến môi trường từ CI runners
Leo thang: Từ đánh cắp token → chiếm quyền GitHub org
Một bước leo thang quan trọng là việc attacker sử dụng token bị đánh cắp để chiếm quyền GitHub organization nội bộ aquasec-com.
Hậu quả:
44 repository bị:
Rename hàng loạt với prefix tpcp-docs-
Đổi description thành: "TeamPCP Owns Aqua Security"
Public hóa toàn bộ
Đáng chú ý:
Toàn bộ hành động diễn ra trong ~2 phút (20:31 → 20:32 UTC, 22/03/2026) → chứng tỏ:
Tấn công hoàn toàn tự động (script qua GitHub API)
Được chuẩn bị kỹ trước đó
Điểm yếu cốt lõi: Service account bị compromise
Nguồn gốc truy vết cho thấy:
- Account bị compromise: Argon-DevOps-Mgt
Đây là service account dùng token dài hạn (PAT)
Có quyền truy cập cả 2 organization:
aquasecurity (public)
aquasec-com (internal)
=> Chỉ cần 1 token bị lộ → toàn bộ hệ thống bị kiểm soát
Dấu hiệu reconnaissance trước tấn công
7 giờ trước khi deface:
Attacker tạo và xóa một branch “ghost”: update-plugin-links-v0.218.2
Không trigger workflow
Không tồn tại release thật
=> Đây là hành vi test token để kiểm tra quyền truy cập mà không gây chú ý.
Mở rộng: Worm, npm packages và wiper malware
Sau khi có được credential:
1. Phát tán worm (CanisterWorm)
Lây nhiễm qua npm packages
Tự lan rộng trong hệ sinh thái dev
Dùng ICP (Internet Computer) làm C2
2. Wiper malware “kamikaze”
Payload mới nguy hiểm hơn:
Target chính: Kubernetes clusters (đặc biệt tại Iran)
Hành vi:
Deploy DaemonSet trên toàn cluster
Node Iran:
Xóa sạch (rm -rf /)
Force reboot
Node khác: Cài backdoor (systemd service)
3. Tấn công hạ tầng cloud
TeamPCP còn:
Exploit Docker API (port 2375)
Tấn công Redis, Ray dashboard
Dùng SSH key bị đánh cắp
Triển khai:
Cryptomining Ransomware
Data exfiltration
Tác nhân đe dọa: TeamPCP
TeamPCP (aka DeadCatx3, PCPcat, ShellForce) là nhóm tấn công cloud-native với khả năng ngày càng cao:
Đặc điểm nổi bật:
Chuyên khai thác:
Kubernetes
Docker
CI/CD pipelines
Tiên phong: Worm dùng ICP làm C2
Chiến thuật:
Supply chain attack
Credential harvesting
Automation quy mô lớn
Phạm vi ảnh hưởng
Không chỉ image chính thức bị ảnh hưởng
Các image:
CI/CD build lại từ Trivy
Fork / derivative
=> Có thể đã gián tiếp nhiễm mã độc
Khuyến nghị bảo mật
Phía FPT Threat Intelligence đưa ra các khuyến nghị sau cần phải thực hiện ngay lập tức:
Không sử dụng Trivy > 0.69.3
Rotate toàn bộ:
GitHub tokens
SSH keys
Cloud credentials
Kiểm tra CI/CD runners:
/tmp/pglog
Kết nối đến ICP domain
Cấu hình an toàn hơn
Pin GitHub Actions bằng commit SHA (không dùng tag)
Dùng short-lived tokens
Áp dụng least privilege
Giám sát pipeline như production
Kiểm tra hệ thống
Audit toàn bộ:
CI/CD pipelines
Docker images đã pull gần đây
Kiểm tra:
Kubernetes clusters
Docker API public (port 2375)
Kết luận
Đây là ví dụ điển hình cho “long-tail supply chain attack”:
Một credential bị đánh cắp từ trước
Được sử dụng lại để:
Chiếm GitHub org
Phát tán malware
Tấn công hạ tầng cloud
Qua đó cho thấy điểm yếu lớn nhất không phải lỗ hổng kỹ thuật, mà là:
Service account với quyền quá rộng + token tồn tại lâu






