Skip to main content

Microsoft published a finding this week that should be pinned to the wall of every crypto gaming studio’s office. Attackers are compromising ordinary websites, serving visitors a fake CAPTCHA, and then pulling the actual malicious instructions from a smart contract on BNB Chain before tricking the user into running them on a Windows machine. The technique has been circulating under the name EtherHiding for a while now. What is new is the scale, and the fact that a company the size of Microsoft is documenting it as a mainstream delivery method rather than a curiosity.

The reflex in crypto is to treat this as an attack on the industry’s reputation. It is not. It is something more useful than that. It is a clean, unarguable demonstration that “on-chain” was never a claim about whether something is good for you.

TL;DR

  • Microsoft reports attackers hosting malware instructions in smart contracts on BNB Chain, delivered to victims through compromised sites and fake CAPTCHA prompts.
  • They chose the chain for exactly the properties crypto markets as virtues: no takedown authority, no hosting bill, permanent availability, permissionless reads.
  • Those properties describe the storage layer. They say nothing about whether the thing stored is honest, safe or in your interest.
  • Crypto gaming has spent years selling “on-chain” as if it were a fairness claim. This is the reductio: the payload is on-chain, immutable, censorship-resistant and fully verifiable, and it is malware.
  • The only claims worth anything are narrow and mechanical: which specific fact is proven, by which specific transaction, in code you can read and nobody can change.

Why the attackers picked a blockchain

Work through the operational logic and it is depressingly sound. A traditional malware campaign needs somewhere to host its payload, and that somewhere has an owner. A hosting provider gets an abuse report and pulls the server. A registrar seizes the domain. A CDN blackholes the endpoint. Every link in that chain is a human who can be persuaded, subpoenaed or embarrassed into acting, which is why takedown is a real defence and why defenders spend so much time on it.

Put the payload in a smart contract and every one of those levers disappears. There is nobody to send the abuse report to. There is no server to seize, no invoice to stop paying, no account to suspend. Reads are free and can come from any public RPC endpoint, so blocking one provider accomplishes nothing. The data sits there permanently and answers to anyone who asks. Attackers can update what the contract returns without touching the compromised sites at all, which means the malicious payload can change daily while the delivery infrastructure stays untouched.

Now read that paragraph again and notice that it is, almost word for word, the pitch deck for decentralised infrastructure. Censorship resistance. No single point of failure. Permanent availability. No gatekeeper. We did not accidentally build something attackers found useful. We built precisely what we advertised, and they read the advertisement carefully.

The property is one property, and it does not have a direction

This is the part the industry keeps flinching from. Immutability is not a moral quality. It is a mechanical guarantee that the bytes will still be there and will still be the same bytes. Whether that is wonderful or catastrophic depends entirely on what the bytes are. A verified game contract that cannot be quietly swapped after you place a bet, and a malware dropper that cannot be taken down by anyone on earth, are the same guarantee pointed at different content.

Permissionless reading works identically. It is what lets you check your own result against a node you chose, with the operator out of the path. It is also what lets a compromised website fetch its instructions from a source no security vendor can pull offline. One property. Two outcomes. You do not get to keep the half you like.

I would rather say that plainly than let it sit as an unaddressed objection, because the moment you accept it, a much more important question falls out of it: if “on-chain” does not mean safe, honest or fair, then what exactly is a crypto game claiming when it says it?

Crypto gaming has been trading on the ambiguity for years

Go and read the marketing. “Fully on-chain.” “Built on Base.” “Powered by blockchain technology.” “Web3-native gaming.” These are statements about a substrate, delivered with the cadence of statements about integrity, and the gap between the two is where most of this industry lives.

A game can have a token contract on-chain, an NFT collection on-chain, a treasury on-chain, a leaderboard on-chain, and still decide who wins a coinflip in a server process running in a data centre you will never see, using a random number generator you cannot inspect, at a moment nobody outside the company can observe. Every single one of those on-chain components is real. Not one of them touches the question you actually care about, which is whether the result you just lost on was decided honestly.

The cheapest version of this deception does not even require lying. Deploy a genuine Chainlink VRF consumer contract. Request randomness. Emit the events. Let anybody who checks find a real integration with a real coordinator. Then compute the outcome that pays out in a backend process that never reads the returned word. The contract is real. The integration is real. The link between it and your result is the thing nobody checked, and it was never on-chain at all.

What a claim has to look like to mean anything

The fix is not louder branding. It is narrower claims, tied to specific mechanisms, that a stranger can falsify.

Here is ours, stated as tightly as we can make it. Randomness comes from Chainlink VRF, and the coordinator verifies the cryptographic proof on-chain before the callback fires, so an invalid or fabricated random word never reaches the game at all. The outcome is computed inside that callback transaction, in deployed contract code that is verified and immutable, so the question “was the good randomness actually used” is a transaction record rather than a matter of professional judgement. A coinflip is one modulo operation. A raffle is keccak256 of the VRF word combined with a prior blockhash, modulo the ticket count, with the ticket count readable as contract state before you enter, so your own probability is arithmetic over public data rather than a figure we quoted you. Stake escrow, resolution and payout happen in one transaction, so there is no window in which a human sees the result and decides what to do about it.

Notice how boring that is. There is no adjective in it. Every sentence names a mechanism you can go and check against a chain we do not run, from an RPC provider we have no relationship with, using an explorer we do not operate.

The caveats, since I have just spent 900 words arguing that unqualified claims are worthless

Our front end is an ordinary web application, and it is the least trustworthy component in the system. It can be defaced, DNS-hijacked or made to render a lie about a transaction that says something else. The chain is the record; the site is a convenience.

Base’s sequencer is operated by Coinbase, so transaction ordering is not decentralised today. What is different is that the data is posted to Ethereum mainnet, so state is reconstructable from a chain Coinbase does not run, and forced inclusion at L1 exists as a backstop. That is a weaker claim than “fully decentralised” and it is the honest one.

And immutability cuts at us exactly the way it cuts at everyone. A bug in a contract we cannot upgrade is permanent. We think that is the right trade, because the alternative is an upgrade key, and an upgrade key is just a slower version of the server nobody can see. But it is a trade, not a free win.

Three questions

Next time a game tells you it is on-chain, ask what specifically is on-chain, and whether the thing that decided your last result is on that list. Ask whether you could verify last night’s outcome from infrastructure the platform does not operate. And ask whether the claim survives being restated without a single adjective in it.

Attackers understood what a blockchain guarantees well enough to build a malware distribution network on it. Players deserve platforms that understand it at least that precisely.

Satoshie runs provably fair raffles and coinflip games on Base, using Chainlink VRF for verifiable randomness. Every outcome is computed on-chain and checkable by anyone.

📷 Photo by Caspar Camille Rubin on Unsplash

Valentina Ní Críonna

Author Valentina Ní Críonna

More posts by Valentina Ní Críonna