2026-03-19 UTC
Active Investigation

Trivy Supply Chain Compromise

A coordinated attack targeting Aqua Security's Trivy ecosystem, building on the incident from early March.

Phase 01

Initial Compromise

v0.69.4 tag pushed -> references imposter commits (trivy, actions/checkout) → C2 fetch (scan.aquasecurtiy.org / 45.148.10.212) → cred stealer in built artifacts
Malicious Commit Exfiltration

Imposter Commit to actions/checkout

Attacker creates a malicious commit impersonating rauchg (Guillermo Rauch) in the actions/checkout repository. Payload fetches malicious Go files from typosquatted C2 and injects them into the build.

Show evidence
Malicious Commit Persistence

Imposter Commit to aquasecurity/trivy

Attacker duplicates a prior legitimate contribution and impersonates DmitriyLewen. This malicious commit references the imposter checkout action, establishing the attack chain.

Show evidence
Tag Push Release
17:43:37 UTC

Malicious v0.69.4 Tag Pushed

Tag v0.69.4 pushed to trivy repository, pointing to the malicious commit. This triggers automated release workflows.

Show evidence
Distribution Supply Chain

Malicious Releases Distributed

Automated workflows publish the malicious v0.69.4 release to multiple distribution channels, maximizing supply chain impact.

Show evidence
Phase 02

Lateral Movement via compromised aqua-bot identity

aqua-bot compromised → malicious workflows steal creds (tfsec, trivy-action, traceeshark) → trivy-action + setup-trivy tags pointed to malicious versions
Workflow Injection Secret Dump
21:31:23 UTC

tfsec Workflow Compromised

Malicious workflow added to aquasecurity/tfsec using compromised aqua-bot identity. Workflow dumps secrets, then is reverted.

Show evidence
Workflow Injection Secret Dump
21:35:34 UTC

traceeshark Workflow Compromised

Same attack pattern applied to aquasecurity/traceeshark. Malicious workflow injected via compromised bot account.

Show evidence
Workflow Injection Secret Dump
21:36:28 UTC

trivy-action Workflow Compromised

Attack continues to aquasecurity/trivy-action. This repository is particularly critical as it's used by thousands of downstream projects.

Show evidence
Phase 03

Malicious Distribution

Tag Manipulation Supply Chain
22:08 UTC

Malicious Action Tags Published

Using compromised aqua-bot credentials, attacker publishes malicious tags for trivy-action and setup-trivy, potentially affecting all downstream users.

Show evidence
Phase 04

Obfuscation coordinated spam flood

Spam Flood 96 Accounts
00:08:33 - 00:09:00 UTC (Mar 20)

Discussion #10420 Flooded

96 spam accounts posted generic praise comments within ~30 seconds, drowning technical discussion and incident coordination. Includes troll comments referencing "sugma" and "ligma".

Show evidence
Thread 01

How did they gain access to push the malicious v0.69.4 tag?

The attacker was able to push a tag to aquasecurity/trivy pointing to a malicious commit. This requires write access to the repository. Was this via a compromised PAT, GitHub App, or deploy key? The initial access vector remains unclear.

Unresolved
Thread 02

Was aqua-bot the initial access vector, or only compromised via /trivy?

The aqua-bot service account was used for lateral movement to tfsec, traceeshark, and trivy-action. However, it's unclear whether aqua-bot credentials were the initial compromise, or if they were harvested from the trivy repository's secrets after the v0.69.4 tag push triggered workflows.

Unresolved
Thread 03

What was the v0.70.0 trivy attacker tag?

At 17:51:17 UTC on March 19, a v0.70.0 tag was deleted. The commit (9dbb34d3ec0f) was authored by aqua-bot on March 16 — 3 days earlier — with message "Updates", modifying cmd/trivy/main.go, pkg/github/auth.go, pkg/github/repowrite.go, pkg/github/runner.go. This suggests aqua-bot compromise may predate March 19.

View commit (via Adnan Khan) ↗
Unresolved
Thread 04

What was the setup-trivy@v0.2.5 poisoning?

Commit 8afa9b9f was pushed to aquasecurity/setup-trivy, spoofing contributor "thara" (Tomochika Hara). Message: "Pin Trivy install script checkout to a specific commit (#28)". Spoofed date: 2026-01-15 (actual push time unknown).

Malicious commit ↗ Victim example (grafana) ↗
Unresolved
Thread 05

Is DarkSeek3r related?

A GitHub user "DarkSeek3r" (now deleted, user ID 266895321) was created at 2026-03-10T01:44:23. Their only public activity before account deletion was forking aquasecurity/trivy and actions/checkout — the exact repositories used in this attack.

View Gist (bored-engineer) ↗
Unresolved
Network Infrastructure

C2 Domains & IPs

# Primary C2 (typosquat) scan.aquasecurtiy.org 45.148.10.212 (TECHOFF SRV LIMITED, Amsterdam, NL) # Secondary C2 (Cloudflare Tunnel) plug-tab-protective-relay.trycloudflare.com # Fallback C2 (ICP hosted) - currently RickRoll, actor can update tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
Malicious Commits

Imposter & Injected Commits

# Imposter commits (spoofed identities) 70379aad1a8b40919ce8b382d3cd7d0315cde1d0 actions/checkout (impersonating rauchg) 1885610c6a34811c8296416ae69f568002ef11ec aquasecurity/trivy (impersonating DmitriyLewen) # Lateral movement commits (via aqua-bot) a67fd5b5b119 aquasecurity/tfsec 56591dfe113b aquasecurity/traceeshark 93ed41111017c3767fafc7d9cc8711f3be1a661f aquasecurity/trivy-action # setup-trivy poisoning (January 2026, spoofing thara) 8afa9b9f9183b4e00c46e2b82d34047e3c177bd0 aquasecurity/setup-trivy
Compromised Accounts

GitHub Accounts

# Compromised service account aqua-bot (ID: 54269356, created 2019-08-19) # Suspected attacker accounts (deleted/banned) DarkSeek3r (ID: 266895321, created 2026-03-10T01:44:23)
Affected Artifacts

Poisoned Releases & Images

# Trivy v0.69.4 (removed) ghcr.io/aquasecurity/trivy:0.69.4 docker.io/aquasec/trivy:0.69.4 public.ecr.aws/aquasecurity/trivy:0.69.4 # setup-trivy (removed) aquasecurity/setup-trivy@v0.2.5 # trivy-action (75 of 76 tags compromised) # Never compromised: 0.35.0 and 57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # Maintainers removed all compromised tags and re-tagged clean releases # with a v prefix (e.g., v0.35.0 instead of 0.35.0)
Malware Signatures

Strings & Filenames

# Attribution strings "TeamPCP Cloud stealer" "tpcp.tar.gz" (exfil bundle) "tpcp-docs" (fallback exfil repo / GitHub dead drop) # Credential sweeper targets 50+ sensitive file paths # Injected files (from C2) cmd/trivy/main.go cmd/trivy/scand.go cmd/trivy/fork_unix.go cmd/trivy/fork_windows.go .golangci.yaml # Target process "Runner.Worker" (memory scraping target)
Threat Actor

TeamPCP

Also known as PCPcat, ShellForce, and DeadCatx3. Emerged as a significant threat to cloud-native infrastructure in late 2025.

Self-attribution string "TeamPCP Cloud stealer" found in the trivy-action payload links this incident to the group.

View on Wiz Threat Center ↗
Targets

Cloud-Native Infrastructure

Docker APIs Kubernetes clusters GitHub Actions runners Ray dashboards Redis servers CI/CD pipelines
TTPs

Common Techniques

# Initial Access Supply chain poisoning (GitHub Actions, package registries) Exposed service exploitation (Docker, K8s, Redis) # Credential Harvesting /proc/[pid]/mem memory scraping Filesystem credential sweeping (50+ paths) Cloud metadata service (IMDS) theft # Exfiltration Typosquatted domains Cloudflare Tunnels (ephemeral C2) GitHub dead drops (tpcp-docs repos) ICP-hosted fallback infrastructure # Objectives Credential theft → lateral movement Ransomware deployment Cryptomining Extortion
Source

Flare.io Analysis

"TeamPCP Cloud-Native Ransomware" — detailed analysis of the December 2025 worm-driven campaign targeting cloud infrastructure.