Research ·

The botnet you can't unplug: blockchain C2 in 2026

Wireframe 3D illustration of interconnected blocks representing a blockchain network against a dark background

Every piece of malware needs to phone home. Somewhere there’s a server telling infected machines what to do next. For decades, the defender’s playbook was simple: find that server, take it down, and the whole operation goes dark.

In 2026, that playbook is breaking. More and more attackers store the address of their server on a public blockchain, where nobody can delete it. Not the police, not the hosting company, not the blockchain’s own developers.

Here’s how it works, where it showed up this year, and what defenders can still do about it.

The idea: a note under a park bench

Spies call it a dead drop. You leave a note in an agreed place, and your contact picks it up later. Malware does the same. Instead of hardcoding its server address, it looks it up at runtime somewhere the attacker controls. That used to be a Telegram bio, a paste site or a GitHub gist. All of those can be reported and removed.

A blockchain can’t. The attacker writes the current server address to the chain. Infected machines read it, connect, and get their orders. When defenders block that server, the attacker writes a new address and every infected machine follows. One researcher measured a full campaign and found the attacker spent about 0.000111 ETH in total managing its servers on-chain. Less than a coffee.

The note gets hidden in a few ways:

  • Smart contracts. The address sits in contract storage. This is the classic “EtherHiding”.
  • Transaction data. Encoded in Bitcoin’s OP_RETURN field, in transaction input data, or in memo fields.
  • Blockchain domain names. ENS (.eth), Solana Name Service (.sol) or TON DNS records instead of normal DNS.
  • Phantom wallets. The newest trick: the server’s IP address is encoded in the bytes of a wallet address nobody owns, and the attacker sends zero-value transfers to it as a signal.

For the technical crowd: this is MITRE ATT&CK T1102.001 (Web Service: Dead Drop Resolver). The idea isn’t new. A Necurs botnet variant kept its server domains on Namecoin back in 2013, and the Glupteba botnet used Bitcoin OP_RETURN in 2019. Smart contracts arrived in 2023, when the ClearFake gang moved its malware into contracts on BNB Smart Chain after Cloudflare cracked down on its servers. What changed in 2026 is the scale.

The numbers

In September, Chainalysis published the most complete data so far. Blockchain-assisted attacks grew 5.2x year over year (+420%). Measured another way, malicious on-chain writes rose from 2.06 to 11.1 per day (+440%) since mid-2025. Chainalysis tracks more than 15 campaigns across five blockchains.

The bigger shift is who’s doing it. Until early 2024, almost all of it was ordinary cybercrime. By Q2 2026, state-linked groups produced about two-thirds of new activity and half of all activity tracked. Three operations stand out:

  • North Korea (UNC5342) targets crypto developers with fake job interviews. Its malware reads a pointer from TRON, falls back to Aptos if that fails, and then fetches the encrypted payload from BNB Smart Chain. To shut it down, you’d need to act on three blockchains at once.
  • Iran-linked actors hide server data in Bitcoin transactions. The odd detail: the transactions are small payments to a famous Bitcoin address tied to Satoshi Nakamoto. The payment means nothing; the data inside it is the message.
  • Russian-speaking criminals sell it as a service. A malware-as-a-service toolkit with a subscription model is sold on criminal forums, and one operator wallet controls a whole fleet of Polygon resolver contracts, one per customer. The same wallet also links to fake stablecoin tokens, clipboard-hijacking campaigns and 50+ resolver contracts on BNB Smart Chain.

Chainalysis blames AI for the acceleration, linking it to unrestricted open-weight Chinese models released in mid-2025. Treat that with some caution: it’s a timing match, not proven cause. Chainalysis also can’t say from chain data how many of these attacks actually succeeded.

Glitched terminal screen with overlapping code, text fragments and redacted data blocks on a dark background
What defenders are up against: malware that reads its orders from a public ledger

Where it showed up in 2026

CampaignChainWho got hit
ClickFix + EtherHidingPolygonRegular web users (Windows and macOS)
TONResolver / EtherRATTON, EthereumHotel staff in Japan
Fake Windsurf IDE extensionSolanaDevelopers
CanisterWorm / CanisterSprawlICPnpm and PyPI developers
DysphoriaEthereum (ENS), Solana (SNS)~200,000 IoT devices
ChainDropEthereum444 npm packages

Regular people

The most likely contact point is a fake CAPTCHA. A ClickFix campaign tracked by GuidePoint, active from late 2025 to at least August 2026, used Polygon smart contracts as a live address book. You land on a hacked site, it asks you to “prove you’re human” by pasting a command, and the malware you just ran checks the blockchain to find its server. In one case the malicious script was hidden in a hacked WordPress site’s robots.txt file.

Hotels got their own version. Since late May, staff at Japanese hotels that partner with Booking.com have received emails posing as angry guest complaints. The attachment installs a remote access trojan that reads its server address from a TON smart contract. A newer wave of the same lure delivers either TONResolver or EtherRAT, which uses Ethereum.

Developers

The big one was ChainDrop on August 4. This self-spreading worm poisoned 444 npm packages and 2,212 versions in under four hours, starting with keyv@6.0.0. A few details worth knowing:

  • It reads its server list from an Ethereum contract and tries 75 public RPC endpoints in turn. If the chain lookup fails, it searches GitHub for a signed commit and only trusts a new address after checking the signature. Defenders can’t just plant a fake address to hijack the bots.
  • It stops if the system language is Russian, a classic sign of Russian-speaking authors.
  • Its commits to victims’ repos were signed as claude, to look like an AI coding assistant’s work, and it planted hooks that run when you open the repo in VS Code or start a Claude Code session.
  • It got into the CI pipeline of Backstage, the CNCF developer portal. The repo had a proper lockfile, but its end-to-end tests install a fresh app at the latest versions, so they pulled the poisoned package anyway. StepSecurity found no evidence of stolen long-lived credentials there, but the payload ran and reached its server.

Earlier, in March, CanisterWorm became the first known malware to use a canister on the Internet Computer (ICP) blockchain as its control point. When it wasn’t serving malware, the canister pointed visitors to a Rick Roll. One version wiped machines set to Iran’s time zone or with Farsi as the default language.

Close-up of a blue-lit computer motherboard with visible BIOS chips and orange LED reflections
From laptops to routers and cameras — blockchain C2 reaches every kind of device

IoT

Dysphoria infected around 200,000 routers, cameras and other devices. It looks up its servers through domains like burrberry.eth and ukranianhorseriding.eth, whose TXT records hold fake IPv6 strings that hide the real IP. A newer variant turns infected devices into relays, so the real server never shows up in bot traffic. The operators advertise 4 Tbps of DDoS power for sale, and their download server greets visitors with an FTP banner mocking journalist Brian Krebs.

The timing is the real story. A March law enforcement operation seized servers and domains. A few months later, Dysphoria had none of those in a form anyone could seize. It’s a direct answer to successful takedowns.

Why defenders hate it

There’s nobody to call. No registrar, no hosting provider, no DNS to sinkhole. Even ICP, which has a governance process, was slow: the CanisterWorm canister came down about 26 hours after it was publicly exposed.

Blocklists go stale instantly. Some campaigns hand out a new domain per visit. Blocking one does nothing for the next victim.

It looks like normal traffic. Infected machines don’t run their own blockchain node. They use the same public gateways (Infura, Alchemy, Ankr and others) that millions of real wallets use, often through Cloudflare or Amazon. Blocking all of them breaks every legitimate crypto app, and the attacker could still run a node of their own.

Reading leaves no trace. Malware fetches the data with read-only calls that create no transaction. You can see what the attacker wrote, but not who read it.

Strings don’t help. ChainDrop calls the contract through a hashed function selector, so a readable function name never appears in the code. Dysphoria encrypts all its strings with a modified RC4.

Where your data actually goes

Stolen data usually doesn’t end up on the blockchain. The chain only holds the directions. The malware reads them and then does the real work off-chain: stealing credentials, remote access, emptying wallets. For DLP that means exfiltration goes to ordinary-looking domains that keep changing.

ICP is the exception, because canisters can accept web requests. In April’s CanisterSprawl wave, stolen data went straight into an ICP canister, so the blockchain became the drop box. Attackers also abuse the victim’s own trusted services: CanisterWorm’s fallback created a public repo in the victim’s own GitHub account and uploaded the encrypted loot there.

One trap for incident responders: ChainDrop installs a small service that checks the stolen GitHub token every 60 seconds for 24 hours and runs an attacker payload when the token gets revoked. “Rotate everything now” can set off the damage. Remove the monitor first, then rotate.

The attacker’s weak spot: everything is public

The feature that protects attackers also exposes them. Every server rotation is a public, permanent, timestamped transaction. Defenders can query the same contract the malware uses and get the live server address before the next victim connects. GuidePoint found an active server just by searching the blockchain for the string /UpdateCheck/. Chainalysis linked campaigns that looked unrelated by following the wallets that deployed and paid for the contracts.

What to do

If you’re a regular user: never paste a command into Run, Terminal or File Explorer because a website told you to. No real CAPTCHA works that way. Be suspicious of attachments in “guest complaint” or “review” emails, and install IDE and browser extensions only from publishers you know.

If you’re on a blue team:

  • Ask who talks to the blockchain. Most corporate laptops have no reason to query blockchain RPC endpoints. A script interpreter, browser, Node or Bun process calling one is worth a look. Elastic ships a rule for exactly this.
  • Detect sequences, not indicators. For example: scheduled task, then PowerShell, then a Polygon RPC call, then a check-in to an unknown domain. That keeps working long after the domain list goes stale.
  • Use the ledger against them. Poll the contracts listed below and push every new server address into your blocklists. In environments with no Web3 business, consider blocking tonapi.io and similar gateways, as Trend Micro suggests for TONResolver.
  • Lock down installs. npm 12 blocks preinstall hooks by default; on older versions use --ignore-scripts in CI. Add a minimum release age (a few days) before new versions reach your builds. Remove npm tokens that can publish without 2FA, since ChainDrop only spreads through those.
  • Don’t treat provenance as approval. ChainDrop’s first packages came out of the projects’ own release pipelines with valid SLSA provenance. Provenance shows where a build came from, not whether the change was authorized.

IOCs for defenders

Domains are defanged. Server domains rotate fast, so treat them as historical. Contract addresses are the durable indicators: monitor them and read their current value instead of only blocking what was published.

ChainDrop (npm worm, August 2026)

IndicatorTypeNote
0xE1f2395ee43e45A1556EC6438a88c31B83493103Ethereum contractC2 resolver, eth_call selector 0x53ed5143
npm-cache[.]comDomainExfiltration C2, POST /router
awqhnjewqjkl[.]icuDomainC2 returned by the contract (Aug 2026)
eth.llamarpc[.]com, go.getblock[.]io, eth-mainnet.nodereal[.]ioDomainLegit RPC providers used for lookup. Context only, don’t block blindly
9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bccSHA-256Math_Symbol.js / math_init.js (stage 2)
54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668SHA-256setup.mjs dropper (first wave)
fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1ebSHA-256setup.mjs dropper (second wave)
thebeautifulmarchoftimeGitHub commit searchFallback C2 discovery
~/.local/bin/gh-token-monitor.shFileToken-revocation trap. Remove before rotating
$TMPDIR/bun-dl-*, $TMPDIR/tmp.dpkg_*.lockFileDropper staging and worm lock file
.claude/setup.mjs, .vscode/tasks.json with runOn: folderOpenFilePersistence in repos
Commits by claude@users.noreply.github.com (“chore: update config”)GitHubWorm-generated commits
Workflow named Run Copilot, artifact format-resultsGitHubSecrets theft workflow

CanisterWorm / CanisterSprawl (npm and PyPI worm, March–April 2026)

IndicatorTypeNote
tdtqy-oyaaa-aaaae-af2dq-caiICP canisterCanisterWorm C2 resolver
cjn37-uyaaa-aaaac-qgnva-caiICP canisterCanisterSprawl exfiltration endpoint
scan.aquasecurtiy[.]orgDomainTyposquatted exfiltration domain
*.raw.icp0[.]ioDomain patternBlocking works but breaks all ICP apps

Dysphoria (IoT botnet, March–July 2026)

IndicatorTypeNote
burrberry.eth, ukranianhorseriding.eth, m3rnbvs5d.ethENS domainC2 lookup via TXT records
24carnforth2merseyside.solSNS domainSolana fallback
dysphoria.androiddebugbridge[.]suDomainInfrastructure
login.trees4sale[.]net:9000Domain:portRelay heartbeat server

EtherHiding, EtherRAT and TONResolver (2026)

IndicatorTypeNote
0xe26c57b7fa8de030238b0a71b3d063397ac127d3Ethereum contractEtherRAT C2 resolver (eSentire)
0xA3a603F8a454a9c905b4c579Bb72628F7C15C2A0Polygon contractmacOS implant resolver; getter 0x2686ecea, setter 0xd75d1ba6 (Prophet Security)
hivinest[.]online, 3262d48df5d75e34[.]shopDomainClickFix + Polygon campaign C2 (GuidePoint)
0:6d5b44d0678e6bd6703f2cabd2531ccf5a0b11cc081f8f7175bd679db4c12d41TON addressTONResolver C2 update wallet (Trend Micro)
tonapi[.]io (methods/get_domain)DomainGateway TONResolver uses to read its C2
TrojanSpy.JS.TONRESOLVER.ADetection nameTrend Micro

Hunting starting points

  • Outbound connections to blockchain RPC gateways where the source process is powershell.exe, wscript.exe, mshta.exe, node, bun, python or a browser, on hosts with no Web3 role.
  • eth_call JSON-RPC requests (or TON API calls) followed within seconds by a connection to a newly seen domain.
  • node or bun launched from a package install step that then contacts RPC providers.
  • Write activity to the contracts above. Each setter call means a new server address you can block.

The bottom line

Blockchain C2 doesn’t make malware more dangerous. It makes it harder to kill. The fight moves from “take the server down” to “catch the machine asking where the server is.” That’s harder work for defenders, but not hopeless, because the attacker’s address book is sitting in public for anyone to read.


Sources

Primary research

Detection

Reporting