Trivy Scanner Breach Spawns CanisterWorm Across 47 npm Packages
TeamPCP threat actors hijacked Aqua Security's Trivy vulnerability scanner, compromising 75 GitHub Action tags and spreading credential-stealing malware to 47 npm packages via blockchain C2.
Aqua Security's Trivy vulnerability scanner has been weaponized in a sophisticated supply chain attack that compromised 75 GitHub Action tags and spread self-propagating malware to 47 npm packages. The attack, attributed to threat actors known as TeamPCP, uses Internet Computer blockchain infrastructure for command and control.
The breach represents the second compromise of Trivy infrastructure in March 2026, with Aqua acknowledging that "containment of the first incident was incomplete."
Attack Timeline
On March 19, TeamPCP exploited credentials obtained from an earlier breach to push malicious versions of Trivy's core components:
- trivy-action: 75 of 76 tags force-pushed to malicious versions
- setup-trivy: 7 tags compromised
- Trivy v0.69.4: Backdoored binaries published to GitHub Releases, Docker Hub, GHCR, and ECR
The attackers made imposter commits spoofing legitimate maintainers, including user "rauchg" on actions/checkout and "DmitriyLewen" on aquasecurity/trivy.
How the Compromise Works
When triggered, the malicious Trivy releases connect to a typosquatted domain (scan.aquasecurtiy[.]org—note the misspelling) to download credential-stealing payloads. The attack specifically targets CI/CD secrets that flow through Trivy during security scanning workflows.
The credential-stealing malware, self-described as "TeamPCP Cloud Stealer," performs:
- Memory dumping of Runner.Worker processes
- Harvesting of SSH, cloud, and Kubernetes secrets
- AES-256 + RSA-4096 encryption of stolen data
- Exfiltration to attacker infrastructure
As a fallback, the malware creates a repository named "tpcp-docs" in the victim's GitHub account to stash stolen credentials.
CanisterWorm: Self-Propagating npm Infection
The breach spawned a secondary infection chain dubbed CanisterWorm, which spread to 47 npm packages through stolen developer tokens:
- 28 packages in @EmilGroup scope
- 16 packages in @opengov scope
- @teale.io/eslint-config (versions 1.8.11, 1.8.12)
- @airtm/uuid-base32
- @pypestream/floating-ui-dom
CanisterWorm uses blockchain-based command and control via an Internet Computer Protocol (ICP) canister, making takedown significantly more difficult than traditional infrastructure.
Blockchain C2 Infrastructure
The ICP canister (tdtqy-oyaaa-aaaae-af2dq-cai) supports three methods: get_latest_link, http_request, and update_link. This architecture allows attackers to modify payloads in real-time without needing to maintain traditional servers.
The implant contacts the canister every 50 minutes using a spoofed browser User-Agent and includes a dormancy trigger—when the canister returns youtube.com URLs, the malware remains inactive, complicating automated analysis.
For persistence, CanisterWorm installs a systemd user service masquerading as "pgmon" (PostgreSQL monitoring tooling) with auto-restart enabled.
Root Cause
Aqua Security confirmed that the attack stemmed from incomplete credential rotation following their March 1 incident: "We rotated secrets and tokens, but the process wasn't atomic and attackers may have been privy to refreshed tokens."
This mirrors patterns seen in the GlassWorm supply chain attack earlier this month, where attackers exploited gaps in incident response to maintain persistence.
Recommended Mitigations
Organizations using Trivy should take immediate action:
- Pin GitHub Actions to specific commit SHAs, not mutable tags
- Audit CI/CD logs for connections to aquasecurtiy[.]org (typosquatted domain)
- Rotate all secrets that may have been exposed in Trivy-enabled pipelines
- Search for systemd services named "pgmon" on developer workstations
- Block ICP canister tdtqy-oyaaa-aaaae-af2dq-cai at the network level
- Scan npm dependencies for the 47 affected packages
Why This Matters
Security scanning tools occupy a privileged position in development workflows—they necessarily have access to source code, build artifacts, and deployment credentials. When attackers compromise these tools, they gain access to the same sensitive resources defenders were trying to protect.
The use of blockchain infrastructure for C2 represents an evolution in supply chain attack sophistication. Unlike domain-based infrastructure that can be seized or sinkholed, ICP canisters are resistant to traditional takedown methods. Expect this technique to proliferate among advanced threat actors, including those behind recent npm supply chain campaigns.
Related Articles
TeamPCP Hijacks Checkmarx KICS Using Stolen Trivy Tokens
Stolen CI credentials from Trivy breach enabled TeamPCP to compromise Checkmarx KICS GitHub Actions, poisoning all 35 version tags with credential-stealing malware in four-hour window.
Mar 25, 2026CanisterWorm Adds Iran-Targeting Kubernetes Wiper
TeamPCP's supply chain attack expands with a Kubernetes wiper that detects Iranian systems via timezone and locale, wiping clusters while backdooring everyone else.
Mar 23, 2026North Korea Spreads 1,700 Malicious Packages Across npm, PyPI, Go, Rust
Contagious Interview campaign escalates with trojanized developer tools across five ecosystems. Packages impersonate logging utilities and steal credentials.
Apr 9, 202636 Fake Strapi Plugins Deploy Redis RCE and Credential Stealers
Coordinated npm supply chain attack deploys 36 malicious packages masquerading as Strapi CMS plugins. Attackers target cryptocurrency platforms with Redis exploitation, credential harvesting, and persistent backdoors.
Apr 7, 2026