- GitHub Action resmi dimanipulasi lewat pembaruan paksa tag, memicu serangan rantai pasok yang menyebarkan malware
- Penyerang mengganti 75 dari 76 tag ke commit berbahaya, berdampak pada sekitar lebih dari 10 ribu workflow
- Skrip yang dimanipulasi bekerja dalam 3 tahap: mengumpulkan, mengenkripsi, dan mengekfiltrasi rahasia, serta menyertakan kode TeamPCP Cloud stealer
- Tag yang terinfeksi masih aktif, dan dipastikan hanya @0.35.0 atau commit SHA tertentu yang aman
- Wajib mengganti semua kredensial dan menggunakan pin commit SHA, dan pencemaran yang sama juga dikonfirmasi pada image Docker Hub
Ringkasan serangan rantai pasok Trivy GitHub Actions
- GitHub Action resmi milik Trivy (
aquasecurity/trivy-action) dimanipulasi oleh penyerang melalui force-push pembaruan tag, sehingga malware tersebar
- Penyerang mengganti 75 dari 76 tag versi ke commit berbahaya agar dieksekusi otomatis di pipeline CI/CD
- Sekitar lebih dari 10.000 file workflow GitHub merujuk ke action tersebut, sehingga cakupan dampaknya sangat luas
- Tag yang terinfeksi masih aktif, dan dipastikan hanya @0.35.0 yang merupakan versi aman
- Socket mendeteksi 182 event GitHub Action berbahaya secara real-time sejak 19:15 UTC, diklasifikasikan sebagai Backdoor, Infostealer, dan Reconnaissance
Penyebab dan cara serangan berlangsung
- Menurut maintainer Trivy, serangan ini terjadi akibat pencurian kredensial yang memiliki izin tulis
- Pada kompromi sebelumnya di awal Maret, rahasia lingkungan CI bocor, dan proses rotasi tidak tuntas sehingga sebagian kredensial baru tetap berada di tangan penyerang
- Penyerang memakai kredensial ini untuk melakukan pembaruan tag terautentikasi tanpa memanfaatkan kerentanan GitHub itu sendiri
- Alih-alih melakukan push branch atau membuat rilis, penyerang memaksa tag yang sudah ada agar menunjuk ke commit baru
- Setiap tag dipalsukan agar tampak normal dengan menyalin metadata commit asli seperti penulis, email, stempel waktu, dan pesan commit
- Namun commit asli ditandatangani GPG, sedangkan commit penyerang tidak memiliki tanda tangan, dan tanggal parent commit tidak konsisten karena berada di tahun 2026
- Meski GitHub menampilkan status Immutable Release, penyerang bisa saja memublikasikannya dalam kondisi berbahaya lalu menguncinya
- Karena itu, jangan mengandalkan badge “Immutable”; hanya pinning commit SHA yang aman untuk konsumsi
Struktur manipulasi tag
- Penyerang membuat commit baru berdasarkan commit terbaru branch
master (57a97c7e)
- Hanya file
entrypoint.sh yang diganti dengan versi berbahaya, sedangkan file lain tetap sama
- Setiap tag dipalsukan dengan menyalin nomor PR, pesan commit, dan informasi penulis dari aslinya
- Jika halaman GitHub Release menampilkan “0 commits to master since this release”, itu bisa menjadi indikator visual tag yang telah dimanipulasi
- Satu-satunya alasan tag
0.35.0 tidak dimanipulasi adalah karena tag tersebut sudah menunjuk ke HEAD master
Struktur payload berbahaya
entrypoint.sh yang dimanipulasi memiliki total 204 baris; baris 4~105 berisi kode Infostealer, lalu diikuti kode pemindaian Trivy yang normal
- Malware terdiri dari tiga tahap
- Tahap 1: Collection — mengekstrak rahasia dari memori proses runner dan filesystem
- Tahap 2: Encryption — mengenkripsi data yang dikumpulkan dengan AES-256-CBC dan RSA-4096
- Tahap 3: Exfiltration — mengirimkannya ke domain yang dikendalikan penyerang atau ke akun GitHub korban
-
Tahap 1: pengumpulan rahasia
- Membaca variabel lingkungan dari proses runner GitHub Actions (
Runner.Worker, Runner.Listener, runsvc, run.sh) melalui /proc/<pid>/environ, lalu mengekstrak entri yang memuat kata kunci env, ssh
- Pada runner yang di-host GitHub, skrip memory dump berbasis Python dijalankan dengan
sudo untuk mencari pola "isSecret":true di memori proses Runner.Worker
- Pada runner self-hosted, dijalankan pengumpul kredensial filesystem yang diidentifikasi sebagai TeamPCP Cloud stealer
- Targetnya sangat luas, termasuk SSH key, kredensial AWS/GCP/Azure, token Kubernetes, konfigurasi Docker, kata sandi DB, file environment, TLS key, konfigurasi VPN, URL webhook, kunci dompet, dan lainnya
-
Tahap 2: enkripsi
- Menghasilkan session key 32 byte dengan
openssl rand, lalu mengenkripsi data memakai AES-256-CBC
- Session key dienkripsi dengan public key RSA-4096 menggunakan padding OAEP
- Data terenkripsi (
payload.enc) dan session key (session.key.enc) dibundel menjadi tpcp.tar.gz
-
Tahap 3: eksfiltrasi data
- Kanal pertama: kirim HTTPS POST ke
https://scan[.]aquasecurtiy[.]org (menggunakan domain typo dari aquasecurity)
- Kanal kedua: jika gagal, memakai GitHub Personal Access Token milik korban untuk membuat repositori publik bernama
tpcp-docs
- Mengunggah
tpcp.tar.gz sebagai release asset → penyerang lalu menemukan repositori itu lewat pencarian GitHub untuk mengambil data
- Dengan memanfaatkan infrastruktur GitHub, penyerang berupaya melewati firewall dan meningkatkan peluang lolos deteksi
- Terakhir, file sementara dihapus untuk meminimalkan jejak
Penyerang dan pihak di baliknya
- Komentar dalam kode berbahaya secara eksplisit menyebut “TeamPCP Cloud stealer”
- TeamPCP (DeadCatx3, PCPcat, ShellForce) adalah kelompok penyerang lingkungan cloud-native, dengan riwayat eksploitasi Docker API, Kubernetes, Redis, dan dashboard Ray
- Pada Februari 2026, Flare dan The Hacker News melaporkan mereka terkait kampanye ransomware, pencurian data, dan penambangan kripto
- Fitur untuk mengumpulkan kunci validator Solana dan dompet kripto sejalan dengan motif finansial
Tanggapan dan rekomendasi
- Hentikan penggunaan semua tag versi Trivy Action, dan gunakan hanya commit SHA
57a97c7e7821a5776cebc9bb87c984fa69cba8f1 atau tag 0.35.0
- Pipeline yang terinfeksi harus dianggap mengalami kebocoran rahasia total; semua kredensial cloud, SSH key, API token, kata sandi DB, dan token Docker harus segera diganti
- Disarankan memeriksa apakah ada repositori
tpcp-docs di organisasi GitHub Anda dan meninjau log trivy-action yang berjalan setelah 19 Maret pukul 19:00 UTC
Indikator kompromi (IOCs)
- Indikator jaringan:
scan[.]aquasecurtiy[.]org
- Hash file:
18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671a (entrypoint.sh)
- GitHub Actions yang terinfeksi: semua versi
aquasecurity/trivy-action@0.0.1 ~ @0.34.2 (total 75 tag)
Pembaruan tambahan (22 Maret)
- Di Docker Hub, image Trivy (
0.69.4, 0.69.5, 0.69.6, latest) juga dipastikan tercemar oleh payload Infostealer yang sama
- Tag
latest ditetapkan ke image berbahaya dan didistribusikan ke pengguna selama periode paparan
- Detail terkait dapat dilihat dalam laporan terpisah Socket “Trivy Docker Images Compromised”
1 komentar
Opini Hacker News
Penasaran kenapa GitHub tidak mewajibkan versioning yang immutable untuk Actions
Panduan keamanannya memang menyarankan untuk me-pin ke commit SHA, tetapi rasanya masalah seperti ini bisa dikurangi jika Action tidak bisa dipublikasikan kecuali sudah di-pin
Dari sudut pandang tim keamanan, versi yang di-pin memang lebih aman, tetapi di sisi lain bisa berisiko jika pembaruan keamanan tidak terpasang otomatis
Pada akhirnya dibutuhkan solusi yang memenuhi keduanya tanpa mengorbankan produktivitas
Rasanya cocok disebut “paradoks pinning”
Meski begitu, tetap harus mulai dikerjakan suatu saat nanti
Membiarkan pembaruan justru bisa meningkatkan keamanan
Ini mirip perdebatan static linking vs dynamic linking
Lagi pula, Trivy Action memang dirancang untuk selalu mengambil versi terbaru
Insiden ini menjadi peringatan bahwa produk supply chain security pada praktiknya bisa sama rapuhnya dengan stack yang ingin mereka lindungi
Terutama alat keamanan yang “berjalan di mana-mana” bisa menciptakan vektor serangan baru yang, dengan satu kali kompromi, langsung membahayakan sangat banyak pengguna sekaligus
Awalnya saya kira Trivy gagal melakukan rotasi kredensial dengan benar
Namun mereka menjelaskan bahwa “penyerang mungkin mengetahui token baru selama proses rotasi yang non-atomic”
GitHub tidak menampilkan token lagi setelah diterbitkan, jadi ini bisa bergantung pada metode autentikasi yang dipakai
Begitu membuat organisasi GitHub baru, namanya langsung dibajak, sehingga mereka harus meminta GitHub melakukan pembuatan secara atomic
Ini kasus yang sangat pas untuk ungkapan “harus memindai kerentanan, bukan menjadi kerentanan”
Ada insiden terkait: kompromi sementara pada supply chain Trivy
Pada 22 Maret, penyerang memublikasikan image DockerHub Trivy v0.69.5 dan v0.69.6 yang berbahaya dengan kredensial yang dicuri
(tautan pengumuman keamanan)
Ada dua insiden pada 19 dan 22 Maret, dan penyerang tampaknya terus mempertahankan akses meski sudah ada dua kali rotasi kredensial
“Dua minggu terakhir adalah yang terburuk”
Karena Trivy dibobol, banyak sekali laporan keamanan dan rapat yang harus ditangani
Ini pelajaran bahwa “membuat perangkat lunak keamanan tidak otomatis berarti kompeten”
Tim keamanan kami juga tiap bulan ingin memasang pemindai baru, tetapi kalau kami memberikan hak akses yang luas seperti yang mereka minta, kami mungkin sudah berkali-kali dibobol
setup-trivyternyata meng-clone branch utama apa adanya lalu menjalankan skrip shellArtinya, eksekusi kode arbitrer dimungkinkan di semua workflow CI
Aqua dibobol awal bulan ini, lalu setelah dua kali kegagalan isolasi, akun Docker Hub mereka juga ikut ditembus
Menurut saya sekarang mereka perlu bantuan dari pakar eksternal
Kebanyakan cuma generator laporan yang berisik, dan saat penyerang sudah masuk ke dalam, alat itu tidak mampu bertahan sama sekali
Pemindai baru seharusnya hanya boleh mengakses data read-only di sandbox terisolasi, dan jangan diberi hak produksi sampai benar-benar tervalidasi
Kalau tidak, itu tak ada bedanya dengan mengunggah secret key ke pastebin
Jadinya seperti budaya keamanan “bergerak cepat dan merusak semuanya”
Akibatnya muncul budaya mengadopsi perangkat lunak keamanan berkualitas rendah tanpa banyak pertimbangan
Menurut saya Trivy sendiri tidak buruk, dan perusahaan kami juga memakainya
Hanya saja kami me-pin versi dengan Nix dan menulis sendiri workflow Actions, jadi tidak terdampak oleh kompromi kali ini
Penyerang yang sudah terautentikasi bisa melakukan force-update tag
Ini sebenarnya bisa dicegah andaikan pengaturan lama GitHub, “larang penimpaan tag”, diaktifkan
Semakin sering insiden seperti ini terjadi, semakin kuat rasanya kebutuhan akan standar seperti Software Building Code
Saya penasaran berapa banyak alasan tambahan seperti ini yang akan muncul pada 2026