Trivy Compromised by “TeamPCP” | Wiz Blog

🔥 Explore this awesome post from Hacker News 📖

📂 **Category**:

💡 **What You’ll Learn**:

On March 19, 2026, threat actors compromised Aqua Security’s Trivy vulnerability scanner, injecting credential-stealing malware into official releases and GitHub Actions. While Aqua reports they have since removed the malicious releases, organizations using Trivy should audit their environments immediately. 

Update March 22, 13:15 UTC: Wiz Research continues to track TeamPCP activity following the initial Trivy compromise. The threat actor has expanded operations to the npm ecosystem via a worm (“CanisterWorm”) leveraging stolen publish tokens. Additionally, the ICP-hosted fallback C2 (tdtqy-oyaaa-aaaae-af2dq-cai) is now actively serving an iteratively developed payload (kamikaze.sh). Aqua has published blog post and GitHub Security Advisory.

Update March 22, 21:40 UTC: ~16:00 UTC, attackers were able to publish malicious images of Trivy (0.69.5, 0.69.6) to Docker Hub. The attacker has also demonstrated continued access to Aqua by publishing internal Aqua repositories publicly on GitHub. As of 21:31 UTC, the IPC Canister has been made “Unavailable Due to Policy Violation.” We continue to monitor the situation.

Note:
this incident is distinct from the previous instance earlier this month, where hackbot-claw exploited a PWN request. Customers can refer to the Threat Center Advisory on the previous incident.

What happened?

Wiz Research, in concert with other industry parties, identified a multi-faceted supply chain attack targeting Aqua Security’s Trivy. The attack compromised multiple components of the Trivy project: the core scanner, the trivy-action GitHub Action, and the setup-trivy GitHub Action.

The attack was conducted with access retained following incomplete containment of the earlier incident.

The threat actor, self-identifying as TeamPCP, made imposter commits that were pushed to actions/checkout (while spoofing user rauchg) and to aquasecurity/trivy (while spoofing user DmitriyLewen). At 17:43:37 UTC, the Trivy repository’s v0.69.4 tag was pushed, triggering a release. This resulted in a malicious checkout that fetched credential stealer code from a typosquatted domain (scan.aquasecurtiy[.]org, resolving to 45.148.10.212), and backdoored binaries being published to GitHub Releases, Docker Hub, GHCR, and ECR. The maintainers have since removed these malicious artifacts.

The attacker also compromised the aqua-bot service account and then abused their access push malicious workflows to tfsec, traceeshark, and trivy-action and steal additional credentials from Aqua (including GPG keys and credentials for Docker Hub, Twitter, and Slack). These secrets were exfiltrated to a Cloudflare Tunnel C2 (plug-tab-protective-relay.trycloudflare.com). Furthermore, 75 out of 76 trivy-action tags were force-pushed to malicious versions, and 7 setup-trivy tags were force-pushed as well. 

The malicious versions of these Actions run a tool self-described as “TeamPCP Cloud stealer”, which dumps Runner.Worker process memory, harvests SSH, cloud, and K8s secrets, encrypts the data (using AES-256+RSA-4096), and exfiltrates it to a remote server. The malware is configured to create a repository named tpcp-docs in the victim’s GitHub account as a fallback method.

What did the malicious GitHub workflows do?

The attacker injected the same three-stage payload into both trivy-action (in entrypoint.sh) and setup-trivy (in action.yaml). When a downstream workflow executed either action, the payload ran on the victim’s GitHub Actions runner:

  1. Collection: The malware scraped memory from the Runner.Worker process by reading /proc//mem and searching for the pattern 💬. It also swept the filesystem for SSH keys, cloud credentials  (AWS, GCP, Azure), Kubernetes tokens, and cryptocurrency wallets across 50+ sensitive file paths.

  2. Encryption: Harvested credentials were encrypted using AES-256-CBC with RSA-4096 hybrid encryption and bundled into tpcp.tar.gz

  3. Exfiltration: The malware transmitted the encrypted bundle to a typosquatted domain (scan.aquasecurtiy[.]org). As a fallback, it could create a tpcp-docs repository in the victim’s GitHub account and upload the stolen credentials  as a release asset.

What did the malicious Trivy binary (v0.69.4) do?

When the malicious binary is executed it starts both the legitimate trivy service and the malicious code in parallel. In our initial analysis the malicious code exfiltrates secrets with a primary and backup mechanism. If it detects it is on a developer machine it additionally writes a base64 encoded python dropper for persistence.

Data Theft

The malicious process gathers environmental variables, sweeps the system for any credentials stored in the filesystem and enumerates the network interface. It then compresses and encrypts the data and attempts to exfiltrate it via post request to https://scan.aquasecurtiy[.]org. If that fails (returns a non-2xx status code), the malware then attempts to use a stolen GITHUB_TOKEN to create a repo tpcp-docs and post the data there. 

Set Persistence

The malicious code attempts to identify if it is on a developer machine by checking if the environmental variable GITHUB_ACTIONS != “true”. If that check passes, the malware attempts to create persistence by writing a python script as ~/.config/systemd/user/sysmon.py and creating a systemd unit that persistently runs the python script.

sysmon.py initially sleeps for five minutes and then polls https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/. If a non-youtube link is found there the dropper downloads to /tmp/pglog and executes it in a new session. 

At the time of analysis (10:30 AM EST/15:30 UTC) the malicious site was set to a RickRoll, but it could be changed by the attacker at any time. 

Which actions should security teams take?

  1.  Audit Trivy versions: Check whether your organization pulled or executed Trivy v0.69.4 from any source (GitHub Releases, container registries, etc.). Remove any affected artifacts immediately.

  2.  Audit GitHub Action references: Review workflows using aquasecurity/trivy-action or aquasecurity/setup-trivy. If you referenced a version tag rather than a SHA, check workflow run logs from March 19-20 for signs of compromise. Specifically, you can look in the Run Trivy step of trivy-action and the Setup environment step of setup-trivy.

  3.  Search for exfiltration artifacts: Look for repositories named tpcp-docs in your GitHub organization, which may indicate successful exfiltration via the fallback mechanism. Hunt based on the IOCs provided below.

Long-term hardening: Pin GitHub Actions to full SHA hashes, not version tags. Version tags can be moved to point at malicious commits, as demonstrated in this attack.

How Wiz can help?

Wiz customers should refer to and monitor the advisory in the Wiz Threat Center for ongoing guidance, pre-built queries, and references to relevant detections they can use to assess the risk  in their environment.

Worried you’ve been impacted? Connect with the Wiz Incident Response team.

SITF diagram

Learn more about SITF here.

Indicators of compromise

Network Indicators

Indicator Notes
scan.aquasecurtiy.org Typosquatted C2
45.148.10.212 TECHOFF SRV LIMITED, Amsterdam
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io ICP-hosted fallback within malicious Trivy binary
plug-tab-protective-relay.trycloudflare.com Used within GitHub Actions for exfiltration

Malicious Artifacts

Type Value Details
IOC (Hash) 887e1f5b5b50162a60bd03b66269e0ae545d0aef0583c1c5b00972152ad7e073 FreeBSD-64bit
IOC (Hash) f7084b0229dce605ccc5506b14acd4d954a496da4b6134a294844ca8d601970d Linux-32bit
IOC (Hash) 822dd269ec10459572dfaaefe163dae693c344249a0161953f0d5cdd110bd2a0 Linux-64bit
IOC (Hash) bef7e2c5a92c4fa4af17791efc1e46311c0f304796f1172fce192f5efc40f5d7 Linux-ARM
IOC (Hash) e64e152afe2c722d750f10259626f357cdea40420c5eedae37969fbf13abbecf Linux-ARM64 (unconfirmed)
IOC (Hash) ecce7ae5ffc9f57bb70efd3ea136a2923f701334a8cd47d4fbf01a97fd22859c Linux-PPC64LE
IOC (Hash) d5edd791021b966fb6af0ace09319ace7b97d6642363ef27b3d5056ca654a94c Linux-s390x
IOC (Hash) e6310d8a003d7ac101a6b1cd39ff6c6a88ee454b767c1bdce143e04bc1113243 macOS-64bit
IOC (Hash) 6328a34b26a63423b555a61f89a6a0525a534e9c88584c815d937910f1ddd538 macOS-ARM64
IOC (Hash) 0880819ef821cff918960a39c1c1aada55a5593c61c608ea9215da858a86e349 Windows-64bit

Malicious Workflows

Credit to Socket for compiling this data and making it easily available at https://socket.dev/supply-chain-attacks/trivy-github-actions-compromise

Action Hash
setup-trivy 8afa9b9f9183b4e00c46e2b82d34047e3c177bd0
setup-trivy 386c0f18ac3d7f2ed33e2d884761119f4024ff8a
setup-trivy 384add36b52014a0f99c0ab3a3d58bd47e53d00f
setup-trivy 7a4b6f31edb8db48cc22a1d41e298b38c4a6417e
setup-trivy 6d8d730153d6151e03549f276faca0275ed9c7b2
setup-trivy 99b93c070aac11b52dfc3e41a55cbb24a331ae75
setup-trivy f4436225d8a5fd1715d3c2290d8a50643e726031
trivy-action f4f1785be270ae13f36f6a8cfbf6faaae50e660a
trivy-action 0891663bc55073747be0eb864fbec3727840945d
trivy-action 2e7964d59cd24d1fd2aa4d6a5f93b7f09ea96947
trivy-action ddb9da4475c1cef7d5389062bdfdfbdbd1394648
trivy-action 4209dcadeaea6a7df69262fef1beeda940881d4d
trivy-action f5c9fd927027beaa3760d2a84daa8b00e6e5ee21
trivy-action 18f01febc4c3cd70ce6b94b70e69ab866fc033f5
trivy-action bb75a9059c2d5803db49e6ed6c6f7e0b367f96be
trivy-action d488f4388ff4aa268906e25c2144f1433a4edec2
trivy-action 3c615ac0f29e743eda8863377f9776619fd2db76
trivy-action a9bc513ea7989e3234b395cafb8ed5ccc3755636
trivy-action 8519037888b189f13047371758f7aed2283c6b58
trivy-action 8cfb9c31cc944da57458555aa398bb99336d5a1f
trivy-action 9092287c0339a8102f91c5a257a7e27625d9d029
trivy-action 7b955a5ece1e1b085c12dac7ac10e0eb1f5b0d4d
trivy-action 19851bef764b57ff95b35e66589f31949eeb229d
trivy-action 61fbe20b7589e6b61eedcd5fe1e958e1a95fbd13
trivy-action fa78e67c0df002c509bcdea88677fb5e2fe6a9b1
trivy-action b7befdc106c600585d3eec87d7e98e1c136839ae
trivy-action 7f6f0ce52a59bdfc5757c3982aac2353b58f4c73
trivy-action ddb6697447a97198bdef9bae00215059eb5e8bc2
trivy-action 3dffed04dc90cf1c548f40577d642c52241ec76c
trivy-action ad623e14ebdfe82b9627811d57b9a39e283d6128
trivy-action 848d665ed24dc1a41f6b4b7c7ffac7693d6b37be
trivy-action ddb94181dcbc723d96ffc07fddd14d97e4849016
trivy-action b7252377a3d82c73d497bfafa3eabe84de1d02c4
trivy-action fa4209b6182a4c1609ce34d40b67f5cfd7f00f53
trivy-action 2b1dac84ff12ba56158b3a97e2941a587cb20da9
trivy-action 66c90331c8b991e7895d37796ac712b5895dda3b
trivy-action fd429cf86db999572f3d9ca7c54561fdf7d388a4
trivy-action 8ae5a08aec3013ee8f6132b2a9012b45002f8eaa
trivy-action 2a51c5c5bb1fd1f0e134c9754f1702cfa359c3dd
trivy-action 9c000ba9d482773cbbc2c3544d61b109bc9eb832
trivy-action 91e7c2c36dcad14149d8e455b960af62a2ffb275
trivy-action 4bdcc5d9ef3ddb42ccc9126e6c07faa3df2807e3
trivy-action 9e8968cb83234f0de0217aa8c934a68a317ee518
trivy-action c5967f85626795f647d4bf6eb67227f9b79e02f5
trivy-action b745a35bad072d93a9b83080e9920ec52c6b5a27
trivy-action 38623bf26706d51c45647909dcfb669825442804
trivy-action 555e7ad4c895c558c7214496df1cd56d1390c516
trivy-action 2297a1b967ecc05ba2285eb6af56ab4da554ecae
trivy-action 820428afeb64484d311211658383ce7f79d31a0a
trivy-action f77738448eec70113cf711656914b61905b3bd47
trivy-action 252554b0e1130467f4301ba65c55a9c373508e35
trivy-action 22e864e71155122e2834eb0c10d0e7e0b8f65aa3
trivy-action 405e91f329294fb696f55793203abf1f6aba9b40
trivy-action 506d7ff06abc509692c600b5b69b4dc6ceaa4b15
trivy-action 276ca9680f6df9016db12f7c48571e5c4639451d
trivy-action aa3c46a9643b18125abb8aefc13219014e9c4be8
trivy-action ea56cd31d82b853932d50f1144e95b21817e52cf
trivy-action 0d49ceb356f7d4735c63bd0d5c7e67665ec7f80c
trivy-action 7550f14b64c1c724035a075b36e71423719a1f30
trivy-action da73ae0790e458e878b300b57ceb5f81ac573b46
trivy-action 6ec7aaf336b7d2593d980908be9bc4fed6d407c6
trivy-action cf19d27c8a7fb7a8bbf1e1000e9318749bcd82cf
trivy-action ef3a510e3f94df3ea9fcd01621155ca5f2c3bf5b
trivy-action 6fc874a1f9d65052d4c67a314da1dae914f1daff
trivy-action b9faa60f85f6f780a34b8d0faaf45b3e3966fdda
trivy-action ab6606b76e5a054be08cab3d07da323e90e751e8
trivy-action a5b4818debf2adbaba872aaffd6a0f64a26449fa
trivy-action e53b0483d08da44da9dfe8a84bf2837e5163699b
trivy-action 8aa8af3ea1de8e968a3e49a40afb063692ab8eae
trivy-action 91d5e0a13afab54533a95f8019dd7530bd38a071
trivy-action 794b6d99daefd5e27ecb33e12691c4026739bf98
trivy-action 9ba3c3cd3b23d033cd91253a9e61a4bf59c8a670
trivy-action e0198fd2b6e1679e36d32933941182d9afa82f6f
trivy-action 9738180dd24427b8824445dbbc23c30ffc1cb0d8
trivy-action 3201ddddd69a1419c6f1511a14c5945ba3217126
trivy-action 985447b035c447c1ed45f38fad7ca7a4254cb668
trivy-action 3d1b5be1589a83fc98b82781c263708b2eb3b47b
trivy-action fd090040b5f584f4fcbe466878cb204d0735dcf4
trivy-action 85cb72f1e8ee5e6e44488cd6cbdbca94722f96ed
trivy-action cf1692a1fc7a47120e6508309765db7e33477946
trivy-action 1d74e4cf63b7cf083cf92bf5923cf037f7011c6b
trivy-action c19401b2f58dc6d2632cb473d44be98dd8292a93

References

⚡ **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#Trivy #Compromised #TeamPCP #Wiz #Blog**

🕒 **Posted on**: 1774222643

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *