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
North Korean StegaBin Campaign Hides C2 in Pastebin Essays
Security researchers uncover 26 malicious npm packages using steganography to hide command infrastructure in computer science essays. Famous Chollima cluster targets developers with RAT.
Mar 3, 2026Malicious npm Package 'lotusbail' Hijacked WhatsApp Accounts for Six Months
Supply chain attack disguised as working WhatsApp API library stole credentials, messages, and linked attacker devices to victim accounts. 56,000+ downloads since May.
Dec 28, 2025GlassWorm Supply Chain Attack Surges to 433 Compromised Components
GlassWorm campaign expands across Open VSX, npm, and GitHub with invisible Unicode payloads and Solana-based C2. Developers urged to audit dependencies immediately.
Mar 20, 2026AppsFlyer SDK Hijacked to Steal Crypto via Supply Chain Attack
Attackers compromised AppsFlyer's domain registrar to inject crypto-stealing JavaScript into their Web SDK. The malware swaps wallet addresses for Bitcoin, Ethereum, Solana, and more.
Mar 14, 2026