PolinRider Returns: Hijacked npm Packages Use Ethereum Blockchain to Conceal Malware Infrastructure

PolinRider Returns
Share

Overview

OX Security researchers identified malicious releases of legitimate npm packages compromised in a campaign linked to the PolinRider malware family.

The injected code uses the Ethereum blockchain as a dead drop for command-and-control (C2) infrastructure. When an affected package is imported, a hidden loader queries public Ethereum RPC endpoints to retrieve a C2 IP address encoded in a blockchain transaction. It then downloads an XOR-obfuscated JavaScript payload over HTTP and executes it.

This technique allows attackers to change the infrastructure used to deliver malicious code without modifying the compromised npm packages themselves. By updating the blockchain-based reference, attackers can redirect affected installations to new infrastructure while leaving the published package code unchanged.

The campaign uses two obfuscation techniques to conceal the loader: Base64-encoded JavaScript and a character-permutation bootstrap. Researchers also identified execution through an interactive Node.js process, allowing malicious code to run in memory and potentially complicating detection.

  1. Check for affected versions. Review installed dependencies and lockfiles for the compromised package versions listed below. Installation alone does not necessarily mean the malicious payload executed.
  2. Investigate potential wallet compromise. If an affected package was loaded and the malicious code executed, treat cryptocurrency wallets and associated credentials accessible from that environment as potentially compromised.
  3. Restrict dependency updates. Pin dependencies to verified clean versions and consider implementing a minimum package-age policy to reduce exposure to newly published malicious releases.

Impact

  • The affected packages collectively account for approximately 1,400 weekly downloads. This figure reflects package download activity, not confirmed infections or executions of the malicious payload.

Threat Analysis

We identified a multi-stage attack in which malicious code embedded in npm packages uses obfuscation, Ethereum-based command-and-control infrastructure, and in-memory execution to deliver additional payloads.

The following diagram illustrates the attack chain, from the initial malicious code in index.js to the retrieval and execution of a remote payload.

image

Inside the index.js file, researchers identified a hidden eval(atob(…)) function that decodes and executes a malicious Base64-encoded payload.

image

After decoding it, we can see the crypto stealer logic, with the threat actor’s ETH crypto address inside: 0x1eef0849eda15d87f64e51c73c8442cf3c8bcef3

image

It uses the “node -i” command to run everything inside the memory, indicating fileless execution which avoids detection.

image

The malware builds and resolves multiple IP addresses which are used as a C2 server.

image

We found the following IP addresses being used by the malware –  103[.]179[.]143[.]219, 166[.]88[.]134[.]75, 23[.]27[.]13[.]72, 95[.]135[.]181[.]151

After downloading the remote payload from the server, the malware executes it using the same node -i command described above.

Affected Packages

PackageVersionFix VersionEcosystemStatus
@adminide-stack/client-redux0.0.16-18npmTaken down
@adminide-stack/health-api-server0.0.18-alpha.465npmTaken down
@adminide-stack/user-activity-browser1.1.3-alpha.114npmTaken down
@adminide-stack/utils0.0.16-129, 0.0.16-130npmTaken down
server-hemera-mongo0.0.15, 0.0.16npmTaken down
cdeops13.5.31npmTaken down
@adminide-stack/forms-core5.1.9-alpha.3npmTaken down
@adminide-stack/yantra-help-browser12.0.194npmTaken down
@cdmbase/wiki-browser12.0.18-alpha.53npmTaken down
@pubngo-stack/help-browser12.0.23-alpha.3npmTaken down
react-contact-forms0.5.2npmTaken down
tailwindcss-form-utils0.5.9npmTaken down
tailwind-contact-forms0.5.8npmTaken down
tailwindcss-contact-form0.5.5npmTaken down
tailwind-form-core0.5.5npmTaken down
tailwind-input-kit0.5.5npmTaken down
tailwind-forms-kit0.5.5npmTaken down

Conclusion

PolinRider’s return comes just a week after the reported Binance hack, underscoring the relentless targeting of cryptocurrency and software supply chains. Even major cryptocurrency thefts have not brought an end to these campaigns.

With approximately 1,400 combined weekly downloads across the affected packages, this campaign highlights the continued risks of npm account hijacking.

Attackers don’t need to create malicious packages from scratch when they can hijack legitimate ones. Despite years of efforts to secure npm accounts and packages, the registry remains a valuable target for threat actors.

IOCs

  • 103[.]179[.]143[.]219
  • 166[.]88[.]134[.]75
  • 23[.]27[.]13[.]72
  • 95[.]135[.]181[.]151