@opengov/form-renderer@0.2.20
A self-propagating worm that steals npm authentication tokens from .npmrc files, installs a Python backdoor as a systemd service for persistence, and uses Internet Computer Protocol (ICP) blockchain canisters as command-and-control infrastructure. The backdoor fetches executable payloads from icp0.io, making the C2 decentralized and nearly impossible to take down. deploy.js uses stolen npm tokens to publish copies of itself to other packages, creating a worm that spreads through the npm ecosystem.
Multi-stage supply chain worm that steals npm tokens, installs a Python backdoor as a systemd service, and uses an ICP (Internet Computer) canister as C2 — making it impossible to takedown.
node index.js (runs automatically)function findNpmTokens() {
// Reads ~/.npmrc, ./.npmrc, /etc/npmrc
// Extracts _authToken values
// Also checks NPM_TOKEN env vars
// Also runs: npm config get //registry.npmjs.org/:_authToken
}
Decodes base64 payload → writes to ~/.local/share/pgmon/service.py → installs as systemd user service → enables + starts.
C_URL = "https://tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io/"
# Polls ICP canister every 3000 seconds
# Downloads binary from URL returned by canister
# Executes it as /tmp/pglog
Uses ICP blockchain (Internet Computer Protocol) as C2. The canister is decentralized — no server to takedown.
If npm tokens found → runs scripts/deploy.js with tokens → publishes malicious versions of other packages using stolen tokens.
ICP (Internet Computer) as C2 — first documented use in npm malware. The C2 URL tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io is a decentralized canister. Unlike traditional C2 servers, it cannot be seized, blocked by IP, or taken down by hosting providers.
tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io — ICP canister C2~/.local/share/pgmon/service.py — backdoorpgmon.service — systemd unit/tmp/pglog — downloaded binary/tmp/.pg_state — state fileDetected by: npm-sentinel automated scanner Verified by: manual code review + base64 payload decoding Date: 2026-04-03