BLOG
TeamPCP Defaces Aqua Security’s Internal GitHub Org
TeamPCP compromised the aquasec-com GitHub organization, renaming all 44 repositories and exposing internal source code, CI/CD configs, and knowledge bases.
By c0a15726-c5b1-4b0d-85e6-fe15553df9e2 ·
The OpenSourceMalware team has identified an active compromise of the aquasec-com GitHub organization — Aqua Security's internal org for proprietary code. The threat actor TeamPCP (aka DeadCatx3, PCPcat, ShellForce) defaced all 44 repositories in a scripted 2-minute burst, renaming every repo with a tpcp-docs- prefix and setting all descriptions to "TeamPCP Owns Aqua Security." Our forensic analysis of the GitHub Events API points to a compromised service account token — likely stolen during TeamPCP's prior Trivy GitHub Actions compromise — as the attack vector.
This is not the first time TeamPCP has targeted Aqua Security. It's the latest escalation from a threat actor that has been building capability across the cloud-native ecosystem for months.
TL;DR
Threat Actor: TeamPCP (aka DeadCatx3, PCPcat, ShellForce, CanisterWorm)
Target:
aquasec-comGitHub organization (Aqua Security's internal/private org)Impact: 44 internal repos defaced, renamed, and exposed publicly — including source code for Tracee, internal Trivy forks, CI/CD pipelines, Kubernetes operators, and team knowledge bases
Attack Vector: Compromised
Argon-DevOps-Mgtservice account token (high confidence)Key Finding: The threat actor tested the stolen token 7 hours before the defacement by creating and deleting a ghost branch on
aquasecurity/trivy-plugin-aqua— the public Aqua Security org is also at risk
Discovery
On March 22, 2026, we observed all 44 repositories in the aquasec-com GitHub organization had been simultaneously renamed and defaced. The org profile at github.com/orgs/aquasec-com showed every repo prefixed with tpcp-docs- and carrying the description "TeamPCP Owns Aqua Security."
The aquasec-com org (GitHub ID 203123164, created 2025-03-13) is distinct from Aqua Security's well-known open-source org aquasecurity (ID 12783832, created 2015-06-07, 219 public repos). The compromised org appears to be their internal org for proprietary code — making this exposure particularly damaging.
The Defacement: A 2-Minute Automated Blitz
Using the GitHub Events API and repo metadata, we reconstructed the exact timeline. All 44 repos were modified between 20:31:07 UTC and 20:32:26 UTC — a ~2-minute window that confirms automated scripting via the GitHub API:
Time (UTC)
Renamed Repo
Original Name
20:31:07
tpcp-docs-aqua-deployer
aqua-deployer
20:31:15
tpcp-docs-tracee
tracee
20:31:17
tpcp-docs-aqua-trivy
aqua-trivy
20:31:24
tpcp-docs-supply-chain-lambdas
supply-chain-lambdas
20:31:53
tpcp-docs-cicd
cicd
20:32:05
tpcp-docs-tracee-detectors
tracee-detectors
20:32:14
tpcp-docs-aquai
aquai
20:32:20
tpcp-docs-kb-personal-yaniv
kb-personal-yaniv
20:32:24
tpcp-docs-kube-hunter
kube-hunter
...
(44 repos total)
...
Every repo received the description: "TeamPCP Owns Aqua Security."
The attack was trivially a loop of PATCH /repos/{org}/{repo} calls with the new name and description. GitHub's public events API does not log repo rename or description change operations, making the defacement invisible in events — only the updated_at timestamps on each repo betray the exact timing.
Ground Zero: The Argon-DevOps-Mgt Service Account
Our forensic analysis identified Argon-DevOps-Mgt as the high-confidence compromised account. This is a service/bot account (GitHub ID 139343333, created 2023-07-12) with a critical property: it bridges both GitHub orgs.

Cross-Org Admin Access
`aquasec-com` org: 43
PublicEventoperations over 1.5 years (making repos public requires admin access)`aquasecurity` org: Creating releases (v0.217.1, v0.218.0, v0.218.1) and triggering workflows on
trivy-plugin-aqua
One compromised token for this account gives the attacker write/admin access to both organizations.
The Ghost Branch: Token Testing at 13:24 UTC
Seven hours before the defacement, at 13:24:25 UTC, the Argon-DevOps-Mgt account created a branch named update-plugin-links-v0.218.2 on aquasecurity/trivy-plugin-aqua and deleted it at the exact same second (GitHub event IDs 9676884051 and 9676884079).
This is anomalous for three reasons:
No v0.218.2 release or tag exists — only v0.218.0 and v0.218.1
No workflow run was triggered — the established pattern for this account (confirmed across v0.217.1, v0.218.0, v0.218.1) is that branch creation triggers a
create prworkflow. No such run exists for v0.218.2The branch name follows the account's naming convention — the threat actor mimicked the expected
update-plugin-links-vX.Y.Zpattern, suggesting they studied the account's behavior before acting
This is consistent with a threat actor testing a stolen token's capabilities — creating a branch to confirm write access, then immediately deleting it to minimize detection, before proceeding with the main attack 7 hours later.
Why This Account?
Zero followers, zero public repos, no bio, no social links — a pure service account
Uses
pusher_type: "user"(not a GitHub App), indicating a PAT-based authenticationService accounts typically use long-lived Personal Access Tokens without MFA
The account triggers CI workflows on
trivy-plugin-aqua— its token was present in CI runner environments
The Kill Chain: From Trivy Compromise to Org Defacement
TeamPCP has been systematically targeting the Aqua Security ecosystem. The credential theft chain is:
Stage 1: Trivy GitHub Actions Tag Poisoning (documented by Socket.dev)
TeamPCP compromised Trivy GitHub Actions tags, injecting a credential harvester
The harvester (self-identified as "TeamPCP Cloud stealer" in its source) systematically scraped CI runners for GitHub tokens, SSH keys, cloud credentials, and environment variables
Stage 2: Token Harvesting
The
Argon-DevOps-Mgtservice account's PAT was likely captured from a CI runner during Stage 1As a service account that triggers workflows on
trivy-plugin-aqua, its token was present in the runner environment
Stage 3: Reconnaissance (March 22, 13:24 UTC)
Threat actor tested the token by creating and deleting a branch on
aquasecurity/trivy-plugin-aquaConfirmed write access to the
aquasecurityorg
Stage 4: Enumeration and Scripting (~13:25–20:30 UTC)
Threat actor enumerated repos in the
aquasec-comorg via the APIPrepared a defacement script to rename all repos and change descriptions
Stage 5: Defacement (March 22, 20:31 UTC)
Executed automated API calls to rename all 44 repos with
tpcp-docs-prefixSet all descriptions to "TeamPCP Owns Aqua Security."
Completed in under 2 minutes
What Was Exposed
The 44 internal repos span Aqua Security's entire engineering organization:
Core Security Products:
tracee— Runtime security engine (private fork with internal features)tracee-detectors— Detection rules and test automationaqua-trivy— Internal Trivy customizationkube-hunter— Kubernetes penetration testing toolaquai— AI product (with GitHub Pages deployment)
Infrastructure & CI/CD:
cicd— CI/CD pipeline configurationsinfra-provisioner— Infrastructure provisioning (Terraform, GKE)supply-chain-lambdas— AWS Lambda functionsarc/arc-aquasec-com— Actions Runner Controller configsrhel-eks-ami— Custom AMI builds
Internal Tooling:
aqua-react— Frontend UI applicationgo-utils/cnapp-go-utils— Shared Go libraries with proto definitions.github-private— Shared GitHub Actions workflows with ECR login, deployment configs
Knowledge Bases:
kb-shared,kb-team-tracee,kb-group-runtime,kb-personal-yaniv,kb-projects
Any secrets, API keys, or credentials in these repos or their CI/CD configurations should be considered compromised.
Who is TeamPCP?
TeamPCP is a cloud-native threat actor that has been escalating in capability throughout 2025-2026:
Attribute
Detail
Aliases
DeadCatx3, PCPcat, ShellForce, CanisterWorm
Tracked By
Flare, Aikido Security, Socket.dev, The Hacker News, Maltrail
Known TTPs
Docker API exploitation, Kubernetes cluster compromise, supply chain poisoning, worm deployment, ransomware, cryptomining, Kubernetes wipers
Notable CVEs
CVE-2025-29927, CVE-2025-55182 (React2Shell)
C2 Infrastructure
ICP Canisters (first observed), Cloudflare Tunnels
Their progression shows increasing sophistication:
Cloud exploitation — Misconfigured Docker APIs, Kubernetes, Redis, Ray dashboards
Supply chain attacks — Trivy GitHub Actions tag compromise, NPM package compromise
CanisterWorm — Self-propagating worm using ICP Canister for C2 (first-of-its-kind)
Kubernetes wipers — Destructive payloads targeting Iran (reported by Aikido, March 22, 2026)
Org-level compromise — This attack against
aquasec-com
Indicators of Compromise (IOCs)
Domains
aquasecurtiy.org
scan.aquasecurtiy.orgC2 Infrastructure
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io
championships-peoples-point-cassette.trycloudflare.com
investigation-launches-hearings-copying.trycloudflare.com
souls-entire-defined-routes.trycloudflare.comGitHub Artifacts
Organization: github.com/aquasec-com (compromised)
Defacement pattern: "tpcp-docs-" prefix on all repo names
Defacement message: "TeamPCP Owns Aqua Security."
Compromised account: Argon-DevOps-Mgt (GitHub ID 139343333)
Defacement timestamp: 2026-03-22T20:31:07Z to 2026-03-22T20:32:26Z
Token test timestamp: 2026-03-22T13:24:25Z (ghost branch on trivy-plugin-aqua)File System Indicators
/tmp/pglog (CanisterWorm payload drop path)VirusTotal
18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671aRecommendations
For Aqua Security:
Immediately revoke all tokens/PATs for
Argon-DevOps-Mgtand all service accountsReview the
aquasec-comorg audit log to confirm the compromised account and attacker IPAudit the
aquasecuritypublic org — the same token has confirmed write accessRotate all secrets referenced in exposed repos (AWS keys, API tokens, LaunchDarkly keys, Jenkins credentials)
Scan CI/CD runners for TeamPCP indicators (
/tmp/pglog, ICP canister connections)
For the Community:
If you depend on
aquasecurity/trivy-plugin-aqua, verify recent releases were not tampered withPin GitHub Actions to full commit SHAs, not tags
Audit service account tokens — enforce short-lived tokens and least-privilege scoping
Monitor for the IOCs listed above in your CI/CD environments
References
Socket.dev - Trivy Under Attack Again: GitHub Actions Tag Compromise
Aikido Security - CanisterWorm Gets Teeth: TeamPCP's Kubernetes Wiper Targets Iran
The Hacker News - TeamPCP Worm Exploits Cloud Infrastructure
Flare - TeamPCP: An Emerging Force in Cloud Native and Ransomware
Conclusion
This compromise demonstrates the long tail of supply chain attacks. A credential harvested during the Trivy GitHub Actions compromise months ago was weaponized today to deface an entire internal GitHub organization. The Argon-DevOps-Mgt service account — a single bot account bridging two orgs with a long-lived PAT — was the weak link.
TeamPCP continues to escalate. From cloud exploitation to supply chain worms to Kubernetes wipers, they are building capability and targeting the security vendor ecosystem itself. The irony of a cloud security company being compromised by a cloud-native threat actor should not be lost on the industry.
If you encounter similar defacement patterns, compromised tokens, or TeamPCP indicators, please report them to OpenSourceMalware.com.
Stay safe out there.
Tags: #supply-chain #github #TeamPCP #aquasecurity #c2 #worm #ioc