Supply Chain Security Advisory

The Worm That Breeds
Through Your Code

A self-propagating supply chain worm is hijacking npm packages using stolen developer tokens — turning every compromised environment into a new attack launchpad. Here is the full breakdown.

CLASSIFICATION PUBLIC ADVISORY SEVERITY CRITICAL CAMPAIGN CANISTERSPRAWL AUTHOR RAVIE LAKSHMANAN
6+
Packages Compromised
ICP
Decentralized C2
WORM
Self-Propagating
Executive Summary IMMEDIATE RISK LEVEL: CRITICAL
What Happened

Multiple npm packages were compromised by a self-propagating worm that steals developer npm tokens and uses them to push poisoned versions of packages back to the registry — creating an autonomous chain of infection.

Why It Matters

This is not a one-time credential stealer — it is a self-replicating supply chain weapon. Every compromised developer environment becomes a new vector for further package poisoning, creating exponential spread across the npm ecosystem.

Immediate Risk

Any team that installed the affected package versions should treat their environment as fully compromised. The worm steals SSH keys, cloud credentials, browser data, crypto wallets, and more — then spreads itself to new packages automatically.

Compromised Packages
Package @automagik/genie
4.260421.33–40
Compromised
Package @fairwords/
loopback-connector-es
1.4.3–1.4.4
Compromised
Package @fairwords/
websocket
1.0.38–1.0.39
Compromised
Package @openwebconcept/
design-tokens
1.0.1–1.0.3
Compromised
Package @openwebconcept/
theme-owc
1.0.1–1.0.3
Compromised
Package pgserve
1.1.11–1.1.14
Compromised

⚠ All listed versions contain a malicious postinstall hook that triggers the self-propagating worm. Check your lockfiles and CI/CD pipelines immediately.

The malware is triggered during install time via a postinstall hook — a standard npm feature that allows packages to run arbitrary scripts upon installation. Once triggered, the worm systematically harvests credentials and secrets from the developer's environment.

What makes this campaign uniquely dangerous is its self-propagating nature. After stealing npm tokens, the worm uses them to push poisoned versions of the compromised packages back to the registry, each containing a new malicious postinstall hook — creating an autonomous, ever-expanding chain of infection.

Cross-Ecosystem Propagation

The worm also contains PyPI propagation logic. It generates a Python .pth-based payload designed to execute when Python starts, then prepares and uploads malicious Python packages using Twine if credentials are present — extending the attack surface beyond npm into the entire Python ecosystem.

The worm performs an exhaustive sweep of the developer environment, targeting every category of sensitive data imaginable. Captured information is exfiltrated to both an HTTPS webhook and a decentralized ICP canister — a tactic borrowed from TeamPCP's CanisterWorm to make the infrastructure resilient to takedowns.

📄 .npmrc
🔑 SSH Keys & Configs
🔐 .git-credentials
🌐 .netrc
☁️ AWS Credentials
☁️ Google Cloud Creds
☁️ Azure Credentials
🐳 Docker Configs
⚙️ Kubernetes Configs
🏗️ Terraform / Pulumi
🔒 Vault Material
🗄️ Database Passwords
📋 Local .env* Files
📜 Shell History
🌐 Browser Credentials
💰 Crypto Wallet Data

Decentralized Infrastructure

The use of an ICP canister for exfiltration is significant. Unlike traditional C2 servers that can be seized or blocked, Internet Computer Protocol canisters are hosted on a decentralized blockchain network — making takedown significantly harder and giving attackers persistent, censorship-resistant data collection.

The CanisterSprawl discovery comes alongside a wave of concurrent supply chain attacks targeting both the npm and PyPI ecosystems, revealing a coordinated escalation in open-source supply chain threats.

xinference compromise

TeamPCP / Copycat Attribution

Multiple versions of the legitimate Python package "xinference" (2.6.0–2.6.2) were compromised with a Base64-encoded payload bearing the marker "# hacked by teampcp." TeamPCP has disputed responsibility, claiming a copycat. JFrog confirmed the payload harvests credentials from the infected host.

LLM Proxy Abuse

Kubernetes-Themed Malware

Packages "kube-health-tools" (npm) and "kube-node-health" (PyPI) masquerade as Kubernetes utilities but install a Go binary establishing a SOCKS5 proxy, reverse proxy, SFTP server, and an LLM proxy that routes requests through Chinese LLM routers — enabling prompt injection and secret exfiltration.

Asurion Impersonation

Sustained npm Impersonation Campaign

Packages impersonating Asurion (sbxapps, asurion-hub-web, soluto-home-web, asurion-core) published April 1–8 contain multi-stage credential harvesters exfiltrating to Slack webhooks and AWS API Gateway endpoints. By April 7, exfiltration URLs were XOR-encoded.

prt-scan campaign

AI-Powered GitHub Actions Exploit

Google/Wiz discovered an AI-powered campaign systematically exploiting "pull_request_target" GitHub Actions triggers since March 11. Over 450 exploit attempts observed with <10% success rate. Attackers fork repos, inject payloads into CI, and steal credentials when workflows trigger.

Risk Area Severity Description
Self-Propagation Critical Stolen npm tokens are used to publish new poisoned versions automatically. One compromised developer can trigger an exponential chain of package compromises.
Mass Credential Theft Critical SSH keys, cloud credentials (AWS/GCP/Azure), Kubernetes configs, database passwords, .env files, browser data, and crypto wallets are all harvested.
Takedown Resistance Critical Exfiltration via ICP canister makes the attack infrastructure decentralized and resistant to traditional domain seizure or IP blocking.
Cross-Ecosystem Spread High PyPI propagation logic means the worm can jump from npm to Python ecosystems if Twine credentials are present — massively expanding the blast radius.
LLM Proxy Abuse High Related Kubernetes-themed malware deploys LLM proxy routers that can intercept and inject into AI agent requests, enabling supply chain attacks on AI coding assistants.
CI/CD Pipeline Exposure High GitHub Actions pull_request_target exploits demonstrate that CI/CD workflows remain a viable attack surface at scale, despite low overall success rates.
Immediate Actions DO NOW
Audit your lockfiles for any of the six compromised packages and their affected version ranges. If found, treat the environment as fully compromised.
Rotate ALL credentials immediately: npm tokens, SSH keys, cloud API keys (AWS, GCP, Azure), database passwords, Kubernetes configs, Docker credentials, and Vault tokens.
Revoke and regenerate npm publish tokens. The worm uses stolen tokens to push poisoned packages — revoking them breaks the propagation chain.
Block exfiltration endpoints: telemetry.api-monitor[.]com and ICP canister cjn37-uyaaa-aaaac-qgnva-cai.raw.icp0[.]io at network perimeter.
Check for PyPI compromise: If Twine credentials were present on the affected machine, audit your Python packages for unauthorized version publishes.
Short-Term Hardening WITHIN 30 DAYS
Disable postinstall scripts globally or use --ignore-scripts during installs. Only whitelist scripts from verified packages.
Enable npm publish 2FA on all organization accounts. A stolen token alone should not be sufficient to publish.
Require contributor approval for GitHub Actions pull_request_target workflows — this blocks the prt-scan class of attacks.
Monitor for anomalous package publishes — set up alerts for unexpected version bumps or publishes outside normal hours.
Long-Term Resilience ONGOING
Implement Software Composition Analysis (SCA) across all pipelines to automatically flag newly introduced or changed dependencies.
Adopt zero-trust principles for LLM/AI tooling — never route AI agent traffic through untrusted proxies or routers that could inject malicious payloads.
Build and maintain a comprehensive SBOM covering both npm and PyPI dependencies, including transitive dependencies across all projects.
Subscribe to security advisories from Socket, StepSecurity, JFrog, Wiz, and other security research teams for early warning on emerging supply chain threats.
Threat Indicators — Treat these as malicious
Compromised Package 1
@automagik/genie@4.260421.33–40
Compromised Package 2
@fairwords/loopback-connector-es@1.4.3–4
Compromised Package 3
@fairwords/websocket@1.0.38–39
Compromised Package 4
@openwebconcept/design-tokens@1.0.1–3
Compromised Package 5
@openwebconcept/theme-owc@1.0.1–3
Compromised Package 6
pgserve@1.1.11–14
HTTPS Exfiltration
telemetry.api-monitor[.]com
ICP Canister C2
cjn37-uyaaa-aaaac-qgnva-cai.raw.icp0[.]io
Campaign Name
CanisterSprawl
Detected By
Socket & StepSecurity
Related Campaign
TeamPCP / CanisterWorm
Attack Vector
npm postinstall hook
Related: Kubernetes Malware
kube-health-tools / kube-node-health
Related: GitHub Campaign
prt-scan (pull_request_target)