Hackers Hijack 10 npm Packages to Spread PolinRider Malware Using Ethereum Blockchain
Attackers have taken over 10 npm packages and slipped hidden code into 12 releases. The code uses the Ethereum blockchain to find a server and download more malware.
Sonatype Research Labs confirmed the finding on November 4, 2026, and tracks it as sonatype-2026-010515, with a high severity score of 8.7.
PolinRider malware
The hijacked packages do very different jobs. Some help with Redux, health APIs and browser activity tracking. Others offer utilities and server examples.
The packages are @adminide-stack/client-redux, @adminide-stack/health-api-server, @adminide-stack/user-activity-browser, @adminide-stack/utils, server-hemera-mongo, cdeops, @adminide-stack/forms-core, @adminide-stack/yantra-help-browser, @cdmbase/wiki-browser and @pubngo-stack/help-browser.
Six releases hide the loader with Base64 and eval(atob(...)). The other six use a character-permutation trick and the JavaScript Function constructor. Sonatype’s full technical write-up lists every affected version. For example, @adminide-stack/utils has two bad builds, 0.0.16-129 and 0.0.16-130, and cdeops has 13.5.31.
According to technical research published by Sonatype Research Labs, each loader asks public Ethereum RPC servers for a transaction sent by one fixed wallet, 0x1eef0849eda15d87f64e51c73c8442cf3c8bcef3. If those servers fail, it falls back to the Blockscout API. The loader reads the first four bytes of the transaction’s recipient address as one IPv4 address and the next four as a backup address.
The malware then pulls XOR-encoded JavaScript from the first address over plain HTTP on port 443. It uses the paths /0x/cls and /0x/ls. The code from /0x/cls runs inside the app with eval and also in a detached node -i process. The code from /0x/ls runs only in the detached process, so it can keep going after the app closes.
This design works like a digital dead drop. The attacker can post a new transaction with a new server address and never touch the npm packages again. Blocking one server does not stop the malware from finding the next one.
Most npm malware runs through a preinstall or postinstall hook, and many teams now turn those off. These packages have no such hooks. The bad code runs when the app loads the package. For server-hemera-mongo, it runs when the service starts, because the code sits in dist/main.js.
Turning off install scripts therefore gives no protection here. A similar trick showed up in earlier PolinRider activity that hid JavaScript loaders in open-source projects, where the loaders also used blockchain services to fetch a second stage. Teams need to ask a simple question: did the package code actually run on a developer laptop, a build server or a live service?
Sonatype found the same wallet in all 12 releases. GitGuardian’s GhostAction and PolinRider report from October 27, 2026 names this exact wallet as the Ethereum resolver in PolinRider loaders found in hacked GitHub repositories. Those older loaders also pulled /0x/cls and /0x/ls on port 443.
The server data points the same way. Greenflagged’s analysis of the npm releases decoded the wallet’s transactions and saw 95.135.181.151 as the advertised server on November 3. GitGuardian had already listed that IP as a fallback server in a PolinRider persistence script.
Researchers still urge care on attribution. Sonatype says the link does not prove PolinRider and GhostAction share one operator. GitGuardian’s working view is that GhostAction’s operator copied a public PolinRider launcher. The GhostAction campaign has hit tens of thousands of GitHub repositories, so the two groups may share many victims.
PolinRider is also older than it first looked. OpenSourceMalware traced PolinRider code to npm packages from May 2025, months before the first known victims in January 2026. That payload included a remote access tool and a Python stealer that went after browsers, wallets, Git and cloud storage.
A report from the Sonatype-linked community write-up says later stages install a Node remote access trojan that persists through startup files for tools such as VS Code, Cursor, Discord and GitHub Desktop.
Start by searching for the 12 bad releases in package-lock.json, yarn.lock, pnpm-lock.yaml, internal mirrors, caches and build records. Remove them and stop mirrors from serving them. Keep a copy for the investigation and move to versions you have checked yourself.
A lockfile entry alone does not prove the code ran. Check which entry point the app loaded, and match it with process and network logs. An import error does not prove safety either, because the bad code may have run before the failure.
If the code ran, treat the host as compromised. Look for detached node -i processes started by another Node process, and for plain HTTP requests to port 443 that use /0x/cls or /0x/ls. Payload requests carry a Sec-V header. It reads A10-npm_inject in the six Base64 releases, A10-II in utils 0.0.16-130 and A10-E in cdeops 13.5.31.
Last, rotate any secrets the affected process could reach. That includes npm publishing tokens, source repository access, cloud keys and CI secrets. The attacker can change the remote JavaScript at any time, so logs, not package lists alone, show what really happened. The Sonatype Guide security event offers further detection help.
The post Hackers Hijack 10 npm Packages to Spread PolinRider Malware Using Ethereum Blockchain appeared first on Cyber Security News.




















