PolinRider Returns in 17 Hijacked npm Packages: an eval(atob()) Loader Pulls Its C2 Address From an Ethereum Transaction and Runs a Crypto Stealer in Memory
Medium · 2026-11-05 · By H.A
Attackers published malicious versions of 17 legitimate npm packages, including several @adminide-stack and Tailwind form libraries, whose loader resolves C2 through the Ethereum blockchain and runs an XOR-obfuscated crypto-stealing stage via node -i.
Overview
Researchers have found a new wave of PolinRider malware hidden in malicious releases of 17 legitimate npm packages. Attackers took over existing maintainer accounts and published poisoned versions, rather than registering new lookalike package names. The injected loader in index.js looks up its command-and-control (C2) address in an Ethereum transaction, downloads a JavaScript stage that is XOR-obfuscated, and runs it in memory. The decoded code includes cryptocurrency-stealing logic.
The affected packages have about 1,400 combined weekly downloads. That is small for npm, but these packages sit in developer and CI environments where wallets, tokens and cloud keys are easy to reach. All of the listed versions have been removed from the registry.
Earlier in 2026: PolinRider is seen in previous npm compromises that also used blockchain dead drops.
Late October 2026: Researchers say the campaign returned about a week after a major cryptocurrency exchange theft.
4 November 2026: Public disclosure. The malicious versions are taken down.
Tradecraft
Hidden loader: A line in index.js runs eval(atob(...)) to decode and execute a Base64 payload. A character-permutation bootstrap adds another layer of obfuscation.
Blockchain dead drop: The loader queries public Ethereum RPC endpoints and reads a C2 IP address encoded in a transaction. Because the attacker can point victims to new infrastructure by sending another transaction, taking down a server does not end the campaign, and nothing in the package needs to change.
Fileless second stage: The next stage is downloaded over plain HTTP, XOR-decoded and run in memory through node -i, so it never touches disk.
Goal: The decoded logic steals cryptocurrency. Any wallet, browser extension or secret reachable from the infected Node process is at risk.
Package versions listed above in package-lock.json, yarn.lock or pnpm-lock.yaml
Node processes running with -i (interactive mode) on build agents or servers
Outbound calls to public Ethereum RPC endpoints from applications that have no reason to use blockchain services
Detection
# Defensive: search lockfiles in a workspace for the affected package names
grep -rnE '"(@adminide-stack/|@cdmbase/wiki-browser|@pubngo-stack/help-browser|server-hemera-mongo|cdeops|react-contact-forms|tailwindcss?-(form-utils|contact-forms?)|tailwind-(form-core|input-kit|forms-kit))' \
--include=package-lock.json --include=yarn.lock --include=pnpm-lock.yaml .
# Look for the loader pattern in installed modules
grep -rl "eval(atob(" node_modules --include=index.js 2>/dev/null
On endpoints and CI runners, alert on node -i started by a non-interactive parent, and on egress to the listed IPs.
Recommended Actions
If any listed version was installed, do not stop at downgrading. Assume the code ran: rebuild the affected machines or containers, and rotate npm tokens, Git credentials, cloud keys and CI secrets that were reachable from them.
Move cryptocurrency held in wallets that were present on affected machines to new wallets created on a clean device.
Pin dependencies with lockfiles and integrity hashes, and consider a minimum package age policy (for example, rejecting versions published in the last 48–72 hours).
Install with --ignore-scripts in CI where you can, and limit outbound network access from build agents.
Maintainers should enable 2FA for publishing and use granular, short-lived npm tokens or trusted publishing.
Analyst Assessment
The download count is small, but the techniques are the important part. Account hijacking, blockchain-based C2 that cannot simply be taken down, and fileless execution are becoming standard in npm malware. Because the C2 address can change without a new package release, any affected install that is still running remains controllable by the attacker. Teams that consume small UI and form packages without a review gate are the most exposed. We rate the threat Medium.
Runtimes, models, MCP servers, agent frameworks, and a security & pentest tooling section — all links out to the real projects.
Add registry item
Local AI console
Talk to a model running on your own machine through Ollama or an OpenAI-compatible server — your prompts and the model's replies always go straight from your browser to your local model, never through a Reef server. Attach files for context, and pick up saved chats where you left off.
Type /image a prompt in the box below to generate
Not connected
Local AI hardware benchmark
A spec-based compatibility advisor — tells you which local models your hardware can run well, which will be slow, and which to skip. Connect to Ollama below for a real, measured speed test instead of an estimate.
1. Your hardware
⌕
2. Live check against your local model server (optional)
If a local model server is running, this cross-references the table above with what you've actually got loaded — and runs a real, measured speed test instead of an estimate.
AI Database
A browsable catalog of AI models across providers — context windows, pricing, and capabilities.
⌕
Loading…
Cyber threat feed
Latest threats pulled automatically every day from CISA's Known-Exploited-Vulnerabilities catalog and NVD — plus threat intel you post yourself.
Shared with everyone on this instance. Don't include client names, internal hostnames, or sensitive data.
Loading threat feed…
Cyber threat map
Attacks happening right now, all over the world. Every route and flash on this map comes from a named live source, explained below.
Connecting…
LIVE · MAURITIUS TIME--:--:--
attack route, country to countryattack route into Mauritiusattacker reported worldwide
Loading live data…
attackers reported per minute · click to rewindnow
Top attack routesweb
Attackers based inlast hour
Networkslast hour
Click any dot, feed row or table row to see that IP's profile.
Mauritius · Cloudflare Radar
Who attacks Mauritius
Loading…
Web attacks malicious requests to Mauritian websites, blocked by Cloudflare Network DDoS floods meant to knock Mauritian servers offline
Mauritius · Cloudflare Radar · last 24 h
How Mauritius is attacked
Network-level attacks (DDoS) aimed at Mauritius, by method. They try to knock servers and networks offline by sheer volume.
Loading…
Cloudflare doesn't publish which ports or services these floods aimed at, or what web attacks on Mauritius tried to do.
Mauritius · blocklist.de · last hour
Attackers located in Mauritius
0attackers located in Mauritius were reported in the last hour
This counts attacks coming from Mauritius, not attacks on it: IPs in Mauritius that servers elsewhere reported for attacking them. Usually zero or one; when it rises, it's often a hacked local server or router.
Reading the Cloudflare figures
Percentages are shares of the attack traffic Cloudflare saw against the sites it protects, so they describe Cloudflare's customers, not every server in a country. A route's origin is where the attacking machines are, which is often a rented or hijacked server, not the attacker's home.
Worldwide today · SANS Internet Storm Center
What attackers are knocking on
Ports most targeted across DShield's volunteer sensors .
Worldwide today · SANS Internet Storm Center
Most active attackers
Ranked by how many separate sensors they hit. Click a row for its profile.
IP
Country
Network
Sensors hit
Reports
What you're looking at
Blue routes
Share of attack traffic from one country to another, measured by Cloudflare across the sites it protects. Thicker, faster streams carry more. Particles show volume, not one per attack.
Cloudflare Radar · every 15 min · published 1–2 h behind
Amber flashes
An attacking IP that servers around the world reported to blocklist.de in the last minute, placed where the IP is. Its targets aren't published, so there's no line.
blocklist.de · every minute · shown about 1 min behind
Locations
IP locations are approximate (city level at best) and show where the machine is hosted, not who controls it.
ip-api.com · SANS ISC DShield for the tables above
News
Articles, guides and updates on pentesting, AI, and cybersecurity — with embedded video. Add your own, including YouTube.
New article
Written content plus an optional video. Paste a YouTube link and it embeds automatically.
Loading…
Posts
Loading…
New post
Stored in the platform database against your account.
⌕
Loading posts…
Forum
Questions, answers, and talk about running AI locally.
Start a thread
⌕
Loading forum…
GitHub repositories
Curated AI and security repos, plus your own pinned shelf.
Add a curated repository
Shown to everyone under the AI & agents / Security & pentest tabs — not the same as your personal shelf.
Pin a repository
Pinned to your account.
Your shelf
⌕
Command board
One-liners, configs, and advice worth keeping — shared by everyone here.
⚠ Commands are shared with all users. Never include credentials, tokens, or internal hostnames. Review anything before you run it.
Share a command
⌕
Loading commands…
Skill packs
Starter files served from the API — AI agent scaffolds plus defensive security & VAPT reporting templates. Click to download.
⌕
Add skill pack
Add a downloadable skill pack. Filename is what users will save the file as.
Loading skills…
Threat Intelligence
Curated threat write-ups, advisories and analysis — with cover media.
⌕
New entry
Add a threat-intel write-up with an optional cover image or YouTube video.
Loading…
Tutorials
Step-by-step guides for running local AI, using the console, and tracking threats. Admins can add their own.
New tutorial
Step-by-step guide. Add an optional cover image or a YouTube video.
⌕
Loading…
Downloads
Direct links to the official homepage/download page for well-known cybersecurity, penetration-testing, and local-AI software. Always verify checksums/signatures from the vendor before running anything.
New download
⌕
Loading…
Terms & Conditions
Loading…
Help & FAQ
Answers to common questions about Reef Sentinel, plus a formatting guide for posts, articles, and comments.
Formatting guide
Commands you can type into the body of a post, comment, or reply — no HTML needed. Comments and short replies only support bold, italic, and inline code.
Contact us
Questions, feedback, or a security disclosure? Reach us directly, or send a message and we'll get back to you by email.
Loading…
Send a message
VAPT Report Generator
Build an engagement, add findings with a live CVSS calculator, and generate a branded, print-ready report.
Recon Toolkit
Passive OSINT lookups for the recon phase of an engagement, plus offline hash identification and a payload cheatsheet.
Website Checker
Reads a website's HTTP response headers to identify its framework and server, shows any known CVEs for the exposed versions with details, and recommends what to do.
Control panel
Manage everything shown on the site — news & videos, posts, homepage headlines, and subscribers. Admin only.
Overview
Content
Site
Account & Security
Email settings
SMTP on ports 25/465/587 is blocked outbound by some hosts (e.g. DigitalOcean droplets by default) — Resend and Brevo send over their HTTPS API instead, so they work even then. Only the selected provider is used to send; the others stay saved but idle, so you can switch back any time without losing settings.
Get a key from resend.com/api-keys. Uses the "From address" below as the sender — it must be on a domain you've verified with Resend.
Get an API key (not an SMTP key) from app.brevo.com/settings/keys/api. Uses the "From address" below as the sender — it must be a verified sender in your Brevo account.
"From address" and "Site name/URL" are shared by SMTP, Resend, and Brevo — they control what recipients see, regardless of which provider is active.
Send a test email
Sends through whichever provider is currently active above. Save your settings first if you just changed them.
Contact page info card
Shown on the public Contact page. Leave a field blank to hide that row entirely.
Recon Toolkit — API keys
Optional third-party keys that unlock extra Recon Toolkit lookups. Everything else in Recon (subdomains, DNS, RDAP, email breach check, password exposure check, a free baseline host lookup) works with no key at all — these just add more depth. Provider names are only ever shown here in the admin panel; the public-facing Recon Toolkit UI never names which providers power it.
Upgrades Host Intel's primary scan-index lookup from the free InternetDB baseline to the full Shodan Host API — adds org/ISP/ASN/OS/geolocation, per-service banner data (product, version, TLS cert issuer, HTTP title), and richer verified CVE data. Get a key from account.shodan.io — a free account key works but is rate-limited; a paid membership raises the limit and query credits.
Adds a secondary, independently-sourced scan-index lookup (all 65,535 ports scanned) alongside the primary lookup in Host Intel — useful for services on non-standard ports. Free — create one at accounts.censys.io (My Account → API Access → Create New Token). No paid plan needed.
Raises the rate limit on Host Intel's IP-reputation check (is this IP a known internet-wide scanner, or a recognised benign service like a public DNS resolver?). Works keyless at a low rate limit already — a free key from viz.greynoise.io/signup raises it.
Enables the Domain Breach summary (org-wide breach exposure for a verified domain) in the Breach Check tab. Requires verifying domain ownership with XposedOrNot first — free key from your XposedOrNot dashboard after verification. The email and password exposure checks don't need this — only the domain-wide summary does.
Password recovery email
The one-time code for changing your password is emailed here. Default: hans.abraham@outlook.com. Change it if needed.
Change master password
For security, changing your password requires the one-time code sent to your recovery email. If SMTP isn't configured yet, the code is shown here for testing.
Database backup
Download a consistent snapshot of the entire site database (SQLite). Keep it safe — you can restore the site from it. Back up regularly.
To restore: stop the app, replace backend/reef.db with this file, then start the app again.
Add user
Create an account directly — it's pre-verified and can sign in immediately.
Audit log
Every action taken by any administrator — including the main administrator. Read-only.
Rotation speed
How long each ad stays on screen before advancing to the next one, for every placement with more than one active ad.
Add ad
Normal ads are self-served image banners — add more than one to a placement and they rotate automatically with a small progress bar. A Google ad unit is shown once, statically, and never rotated by us (most ad networks require this).
Pasted as-is and executed on the page — only paste code from a source you trust, same as you would for any other admin-only content.
About page
Edit the public About us page. The body supports simple markdown: ## heading, - bullet, **bold**, > quote, and links.
Terms & Conditions
Edit the public Terms & Conditions page. The body supports simple markdown: ## heading, - bullet, **bold**, > quote, and links.
Add threat-intel entry
Manage threat-intelligence entries shown on the Threat → Threat Intelligence page. Photo or video cover supported.
Contact messages
Submissions from the Contact Us page. Viewing one marks it read; replies are emailed to the sender.
Everything currently pinned to the homepage featured carousel, across news, threats, tutorials, threat intel, downloads and posts.
Everything currently pinned to the homepage Latest News ticker, across news, posts, tutorials, threat intel and downloads.
Everything currently pinned to the homepage CVE ticker (threat feed entries).
Add news / video
Add post
Posts submitted by regular members land here as "Pending review" — approve, reject, edit, or pin them from this list. Main admins and admins publish directly.
Content Rating — per-user score
Each author's rating score is the average of every 1–5 Content Rating their published posts have received from readers. Only authors with at least one published post are listed.
Add command
Snippets and configs shown on the Command board. Never include credentials or internal hostnames.
Add payload
Reference snippets shown on the Recon Toolkit's Payload Cheatsheet tab. Replace ATTACKER_IP / ports as placeholders — never include real targets or credentials.
Forum reports
Members' reports of threads or replies (e.g. abusive language). Deleting a reported item leaves a public notice with your reason in its place and emails the author; dismissing clears the report without touching the content.
News comment reports
Members' reports of comments (or replies) on news articles. Deleting a reported comment leaves a public notice with your reason in its place; dismissing clears the report without touching the comment.
Post comment reports
Members' reports of comments (or replies) on member posts. Deleting a reported comment leaves a public notice with your reason in its place; dismissing clears the report without touching the comment.
Add registry item
Runtimes, models, MCP servers, agent frameworks, and security tooling shown on the Registry page. Also editable directly from the front-end Registry page itself.
Add download
Curated cybersecurity / pentest / AI software links shown on the Downloads page. Also editable directly from the front-end Downloads page itself.
Pin a repository
Personal pinned GitHub repos shown on the Repos page under "My pins". Also pinnable directly from the front-end Repos page itself.
Formatting commands you can type into the body of a post, tutorial, news article, threat-intel entry, or the About page — no HTML needed. Comments and short replies only support bold, italic and inline code.
FAQ entries shown on the public Help page. Super admin only — same scope as About page / SMTP / API keys.
Add FAQ
Add headline
Add tutorial
Add skill pack
Send newsletter
We use essential cookies/local storage to keep you signed in and remember your preferences. We don't use tracking or advertising cookies. Learn more