The sophisticated threat actors previously implicated in the supply chain attack against the widely used Trivy security scanner are now strongly suspected of orchestrating subsequent, far-reaching attacks. These follow-on operations have reportedly led to the compromise of a significant number of npm packages with an entirely new, self-propagating worm, which security researchers have christened CanisterWorm. This novel malware distinguishes itself through its innovative use of an Internet Computer Protocol (ICP) canister—a form of tamperproof smart contract residing on the Internet Computer blockchain—as a highly resilient "dead drop resolver" for its command-and-control (C2) infrastructure. This development marks a pivotal moment in cybercrime, representing the first publicly documented instance of an ICP canister being leveraged explicitly for the purpose of fetching critical C2 server information, as detailed by Aikido Security researcher Charlie Eriksen.
The emergence of CanisterWorm within mere days of the initial Trivy scanner compromise underscores the rapid escalation and advanced capabilities of the threat actors, believed to be the cloud-focused cybercriminal operation known as TeamPCP. The initial breach, occurring around March 20, 2026, saw attackers exploit compromised credentials to publish malicious versions of the trivy, trivy-action, and setup-trivy releases, each embedded with a credential stealer. This initial foray into the software supply chain served as a precursor, providing the necessary access—namely, stolen npm tokens—for the subsequent deployment and propagation of CanisterWorm across the npm ecosystem. The sheer volume of compromised npm packages remains under active investigation, but preliminary assessments suggest a widespread impact that could affect countless downstream projects and developers.
The Unfolding Crisis: A Chronology of Compromise
The incident began to unfold in mid-March 2026, with the initial compromise of the popular Trivy security scanner. Trivy, an open-source vulnerability scanner widely used by developers and DevOps teams to identify security issues in container images, file systems, and Git repositories, represents a high-value target for supply chain attacks. Its integration into Continuous Integration/Continuous Deployment (CI/CD) pipelines means a compromise can have a cascading effect, potentially infecting numerous development environments and production systems.
On March 20, 2026, reports surfaced indicating that malicious updates to trivy, trivy-action, and setup-trivy were published to their respective repositories. These updates, masquerading as legitimate releases (specifically version 0.69.4 of Trivy was later implicated), contained sophisticated credential-stealing capabilities. The rapid response from security firms and the open-source community quickly identified the compromise, attributing it to the likely use of stolen developer credentials. The immediate aftermath focused on understanding the scope of this initial breach and containing its spread.
However, within 24 hours of these initial reports, a more insidious threat was identified. Security researchers, including Charlie Eriksen of Aikido Security, detected follow-on attacks that leveraged the access gained from the Trivy compromise. This marked the introduction of CanisterWorm, initially observed in a form requiring manual intervention for propagation, but swiftly evolving into a fully autonomous, self-propagating entity. The timeline illustrates a calculated, multi-stage attack: from credential theft, to initial payload deployment, to the sophisticated launch of a decentralized, self-replicating worm.
CanisterWorm: A Deep Dive into its Mechanics
CanisterWorm’s operational methodology reveals a high degree of technical sophistication and an understanding of modern software development ecosystems and emerging blockchain technologies. The infection chain involving the npm packages is meticulously designed to ensure persistence, evasion, and effective C2 communication.
Initial Infection Vector and Payload Delivery
The initial entry point for CanisterWorm within npm packages relies on a commonly abused feature: the postinstall hook. This script, configured to execute automatically after a package is installed, is leveraged to run a loader. This loader, in turn, drops a Python-based backdoor onto the compromised system. The choice of Python as the language for the backdoor facilitates cross-platform compatibility and allows for rapid development and deployment, potentially aided by AI tools as suggested by the "vibe-coded" assessment.
Once established, this Python backdoor becomes the primary interface for contacting the C2 infrastructure. However, instead of a traditional centralized server, the malware employs a novel approach: retrieving the next-stage payload’s URL from an ICP canister.
The ICP Canister as a Dead Drop Resolver
The most distinctive and alarming feature of CanisterWorm is its utilization of an Internet Computer Protocol (ICP) canister as a dead drop resolver for its C2 server. The Internet Computer is a decentralized blockchain network that hosts "canisters"—tamperproof smart contracts that function as computation units. These canisters can host websites, enterprise systems, and various applications directly on the blockchain, making them inherently decentralized and highly resistant to censorship and takedown attempts.
By using an ICP canister, specifically identified as tdtqy-oyaaa-aaaae-af2dq-cai, the threat actors gain a highly resilient and evasive C2 mechanism. Unlike traditional C2 servers that can be identified, blocked, and taken down by law enforcement or security agencies, a decentralized blockchain-based dead drop is far more difficult to disrupt. The canister effectively serves as a dynamic message board, where the attackers can post the current URL for the next-stage payload. This URL is then fetched by the Python backdoor on infected machines.

Charlie Eriksen highlighted the critical advantage this provides: "The canister controller can swap the URL at any time, pushing new binaries to all infected hosts without touching the implant." This means the attackers retain full flexibility to update their payload, switch C2 servers, or alter their operational strategy without needing to re-compromise systems or modify existing malware implants. This level of agility makes detection and remediation significantly more challenging.
Persistence and Evasion Techniques
To ensure its longevity on compromised systems, CanisterWorm establishes persistence through a systemd user service. systemd is the prevalent init system on Linux distributions, responsible for managing processes and services. The malware creates a systemd service that masquerades as legitimate PostgreSQL tooling, specifically naming itself "pgmon," in an attempt to blend in with normal system operations and avoid detection by administrators.
Crucially, this systemd service is configured with the Restart=always directive, ensuring that if the Python backdoor is terminated for any reason—whether by a user, system process, or security tool—it will automatically restart after a short 5-second delay. This robust persistence mechanism ensures the backdoor remains active, continuously polling the ICP canister for instructions.
Furthermore, the backdoor employs basic evasion tactics during its communication with the ICP canister. It spoofs its browser User-Agent string, attempting to appear as benign web traffic rather than malicious automated activity. It polls the canister every 50 minutes, a frequency designed to be frequent enough for timely updates but infrequent enough to potentially evade simple network anomaly detection based on excessive communication.
The "Kill Switch" and Dormant State
An interesting operational security feature observed in CanisterWorm is a "kill switch" mechanism. The Python script is programmed to skip execution of any fetched URL that contains "youtube.com." This allows the attacker to toggle the malware’s active state. By pointing the ICP canister to a benign YouTube link (e.g., a "rickroll" video, which was observed during the initial analysis), the attackers can effectively put the implant into a dormant state. When they wish to activate the malware, they simply update the canister to point to a URL hosting a real malicious binary.
This technique, also flagged by Wiz in connection with the trojanized Trivy binary (version 0.69.4), provides the attackers with granular control over the malware’s activity without needing to deploy new versions. If the attacker updates the canister to point to a new URL, every infected machine picks up the new binary on its next poll, while the old binary continues to run in the background, as the script never terminates previous processes. The Hacker News confirmed that the ICP canister supports three methods: get_latest_link, http_request, and update_link, with the update_link method being the crucial function allowing the threat actor to modify the payload URL at any time.
From Manual Spread to Autonomous Replication: The Worm’s Evolution
CanisterWorm did not remain static in its initial, manually-propagated form. The threat actors rapidly iterated on its design, quickly transforming it into a fully autonomous, self-propagating worm.
The "deploy.js" Script: Initial Manual Propagation
Initially, the spread of malicious payload to npm packages relied on a separate "deploy.js" file. This script was designed to be run manually by the attacker, leveraging stolen npm tokens to programmatically publish malicious versions of npm packages to the registry. This phase, while effective, required direct intervention from the threat actors after each credential theft. The assessment that this script was "vibe-coded" using an artificial intelligence (AI) tool suggests a potential future trend in malware development, where AI assists in rapidly generating or modifying code, even if it doesn’t attempt to conceal its functionality. Aikido Security noted, "This isn’t triggered by npm install. It’s a standalone tool the attacker runs with stolen tokens to maximize blast radius."
The Self-Propagating Variant: Autonomous Replication
A subsequent and far more dangerous iteration of CanisterWorm was detected in "@teale.io/eslint-config" versions 1.8.11 and 1.8.12. This variant incorporated the propagation functionality directly into the malware’s core, removing the need for manual intervention. The crucial difference lies in the integration of a findNpmTokens() function within the index.js file, which is executed during the postinstall phase.
After the initial persistent backdoor is installed, this findNpmTokens() function actively scans the victim’s development environment to locate any accessible npm authentication tokens. Once these tokens are pilfered, the worm immediately spawns the deploy.js script (now integrated or called by the main worm component) as a fully detached background process. This means that any developer or CI/CD pipeline installing this infected package, and possessing an accessible npm token, unwittingly becomes a propagation vector. Their packages get infected, their downstream users install those, and if any of them have tokens, the cycle repeats, creating an exponential infection rate.
The "hello123" Test String: A Glimpse into the Attacker’s Process
Interestingly, during the evolution of the worm, researchers observed a phase where the threat actor temporarily swapped out the ICP backdoor payload for a dummy test string, "hello123." This highly unusual move is interpreted as a method for the attackers to verify that the entire complex attack chain—from initial compromise, to backdoor deployment, to C2 communication via the ICP canister, and finally to payload retrieval—was functioning as intended, before deploying the actual malicious binary. This highlights a meticulous and methodical approach to malware development and deployment, indicating a well-resourced and patient adversary.

TeamPCP: Architects of the Attack
The cybercriminal operation known as TeamPCP is strongly suspected to be behind these sophisticated attacks. Described as a cloud-focused group, TeamPCP has gained notoriety for exploiting vulnerabilities in cloud environments and supply chains. Their previous activities suggest a focus on credential theft, lateral movement within cloud infrastructures, and the deployment of persistent backdoors. The CanisterWorm campaign, with its multi-stage approach, credential stealing, and novel C2 infrastructure, aligns perfectly with the operational profile of a group like TeamPCP, known for its technical prowess and strategic targeting of critical development tools.
Broader Implications for the Open-Source Ecosystem
The CanisterWorm attack carries profound implications for the security of the open-source software supply chain, developer trust, and the future of cybercrime.
The Vulnerability of Software Supply Chains
The incident starkly underscores the inherent vulnerabilities within the modern software supply chain. Developers frequently rely on hundreds, if not thousands, of third-party packages from registries like npm. A compromise at any point in this chain—from a developer’s compromised credentials to a malicious update in a widely used library—can have devastating, far-reaching consequences. The Trivy scanner, being a security tool itself, highlights the audacity and strategic targeting employed by threat actors, aiming to subvert the very mechanisms designed to protect software. The rapid spread facilitated by npm tokens demonstrates the compounding risk when developers’ environments are not segmented or protected with least privilege principles.
Erosion of Trust and Developer Responsibility
Each such incident erodes trust in the open-source ecosystem, which thrives on community contributions and shared resources. Developers are increasingly burdened with the responsibility of vetting their dependencies, a task that becomes exponentially complex with deep dependency trees. The ease with which compromised credentials can lead to widespread infection puts immense pressure on platform providers like npm and GitHub to implement more stringent security measures, while also demanding greater vigilance from individual developers and organizations.
The Rise of Decentralized C2 and AI-Assisted Malware
CanisterWorm’s pioneering use of an ICP canister for C2 represents a significant evolution in malware design. The resilience and takedown resistance offered by decentralized blockchain networks make them an attractive new frontier for cybercriminals seeking to establish robust and long-lasting control over their botnets. This trend necessitates a re-evaluation of traditional C2 detection and remediation strategies, which often rely on centralized infrastructure analysis and domain takedowns.
Furthermore, the "vibe-coded" assessment of the deploy.js script, suggesting AI assistance, points to a future where artificial intelligence tools could significantly accelerate malware development, making it easier for even less skilled actors to create sophisticated threats. This could lead to a proliferation of more complex and adaptive malware, further challenging defenders.
Industry Reactions and Mitigation Strategies
The security community has reacted with a mix of alarm and intense focus. Researchers like Charlie Eriksen and firms like Wiz have been instrumental in rapidly dissecting the malware and alerting the wider community. Their detailed analyses provide crucial insights into the attack’s mechanisms, enabling developers to take protective measures.
Platforms like npm and GitHub, while not explicitly quoted, are expected to be engaged in ongoing investigations, account compromises, and implementing enhanced security protocols. This includes stricter multi-factor authentication requirements, automated scanning for suspicious package updates, and improved credential management for package maintainers.
For developers and organizations, the CanisterWorm incident serves as a critical call to action:
- Implement Strong Authentication: Enforce multi-factor authentication (MFA) for all developer accounts and npm tokens.
- Least Privilege: Restrict the scope of npm tokens to only the necessary permissions and packages.
- Dependency Auditing: Regularly audit and scan all third-party dependencies for known vulnerabilities and suspicious behavior using tools like Trivy (ironically, the initial target).
- Supply Chain Security Tools: Utilize specialized supply chain security platforms that monitor for package integrity, anomalous updates, and potential compromises.
- Network Monitoring: Implement robust network monitoring to detect unusual C2 traffic patterns, especially those involving novel protocols or decentralized networks.
- Endpoint Detection and Response (EDR): Deploy EDR solutions to detect and respond to suspicious process activity, persistence mechanisms, and credential access attempts on developer workstations and CI/CD environments.
- Developer Education: Educate developers on the risks of supply chain attacks, safe credential handling, and the importance of verifying package authenticity.
The Path Forward: Securing the Digital Supply Chain
The CanisterWorm attack is more than just another malware incident; it is a clear indicator of the evolving sophistication of cyber threats targeting the foundational layers of software development. The shift towards decentralized C2 infrastructure and the potential integration of AI in malware creation signify a new era of challenges for cybersecurity. The collective effort of security researchers, platform providers, and the developer community will be paramount in strengthening the defenses against such pervasive and evasive threats. As investigations continue, understanding the full scope of CanisterWorm’s compromise and developing robust, adaptive countermeasures will be critical to safeguarding the integrity and trust within the global software supply chain.
