EtherSnake: a zero-detection MSI that hides its C2 on Ethereum
Tech News

EtherSnake: a zero-detection MSI that hides its C2 on Ethereum

| | 5 min read
Share: Twitter Facebook LinkedIn

EtherSnake is a Windows installer that scored 0 detections on VirusTotal and installs a Python backdoor that reads its command-and-control (C2) address from an Ethereum smart contract. The operator has set that address seven times since deploying the contract on October 16, an initial value and six changes, and every infected machine follows each change. Snoopy Triage, Tuxxin's threat analysis platform, extracted every stage and decrypted the payload on October 29, 2026 without running it.

How the sample surfaced

On October 29, 2026, @malwrhunterteam posted the sample, served from Azure hosting at hxxps://octoberfp.eastus.cloudapp.azure[.]com/files/KB59985. VirusTotal showed 0 detections, and its Code Insight summary said the MSI had "no active components, scripts, or installation routines". @smica83 uploaded it to MalwareBazaar. Snoopy Triage picked it up from a public feed.

The infection chain

1. The MSI

The installer is 36 KB, built with WiX on October 28 at 14:45 UTC, with random product and manufacturer names. It unpacks four files into a random folder under %LOCALAPPDATA%:

  • DeployFinalize.cmd
  • a two-line VBS helper
  • a Python loader
  • an encrypted .bin file

A deferred, asynchronous custom action runs DeployFinalize.cmd after the install finishes. A hidden shortcut in the Startup folder runs it again at every logon.

2. DeployFinalize.cmd

The script is padded with fake corporate-deployment comments. It downloads the official embeddable Python 3.12.3 from python.org, with the URL stored in base64, and unpacks it with the Windows tar.exe. It renames pythonw.exe to ConfigEngine.exe and starts it hidden through the VBS helper.

Each file a scanner sees on its own is either legitimate software or meaningless data. That explains the zero detection score.

3. The loader

The Python loader XORs the .bin file with a 32-byte key and each byte's position, then passes the result to exec(), so the decrypted backdoor runs in memory.

4. The backdoor

The backdoor is written in Python and carries code paths for both Windows and Linux.

  • It reads its C2 address from an Ethereum smart contract. It asks nine public RPC providers and takes the majority answer. The lookup key is the operator's wallet address.
  • It polls /api/<random>/<bot id>/<random>.png?id=<build id>, or the same path ending in .jpg, .gif, .css, .ico or .webp, and sends the header X-Bot-Type: python.
  • It runs any Python code the server returns, with shell and socket access.
  • It persists through a Startup file named MicrosoftEdgeUpdate.cmd and a logon task named MicrosoftEdgeUpdateTask followed by four hex characters.
  • It disables TLS certificate checks.

The C2 lives on Ethereum

The contract is 0x41179162599919ad4eadcabc2cfefc1133269c2c on Ethereum mainnet. The operator wallet, 0xeb7d120ea01d624e4fc8d3cf8e90595d55083d06, has 8 transactions: the contract deployment and 7 writes of the C2 address. The first write set the initial C2 three blocks after deployment, and the other 6 changed it.

The operator can move the C2 at any moment with one transaction, and every bot follows. The same design gives defenders a full public record: every C2 the operator ever set is readable on-chain.

#UTCC2 written to the contractNote
12026-10-16 20:37hxxps://zone-14-service-8-8.eastus.cloudapp.azure[.]comInitial value, just after deployment
22026-10-27 22:10hxxps://sigmauperdonesoft[.]com
32026-10-28 06:54hxxps://zone-14-service-8-8.eastus.cloudapp.azure[.]com
42026-10-28 09:53hxxps://sigmauperdonesoft[.]com
52026-10-28 10:04hxxps://zone-14-service-8-8.eastus.cloudapp.azure[.]com
62026-10-28 10:57hxxps://westusserverfor.westus2.cloudapp.azure[.]com
72026-10-29 14:13hxxps://esastus-oct29.eastus.cloudapp.azure[.]comCurrent

The sample also carries a built-in backup C2, october28floor.eastus.cloudapp.azure[.]com. The last switch came about 4.5 hours before the public post.

sigmauperdonesoft[.]com was registered on October 27 and pointed at 172.233.158[.]8 (Linode), with Cloudflare DNS. softportalone[.]com was registered the same day and shares that IP. We found no evidence it served as a C2.

Every host in this campaign was created by the attacker. No compromised websites are involved.

Why the name EtherSnake

The design mirrors EtherRAT, a Node.js implant Sysdig documented in December 2025: C2 stored on-chain, a majority vote across nine RPC providers, the wallet as the lookup key, and a download of an official language runtime. We found no shared code and make no attribution claim. "EtherSnake" names this Python implant only.

Indicators

Cloud IPs get reassigned quickly, so the hostnames and hashes are the lasting indicators.

SHA256

HashFile
a6ecbf30583cf4e81c67d13d1f8917e18ab75a149191a3e8628f522d45312be0MSI
3aaaa49a0c4b139a8098b27dba31235571f68b32d96e25669e7febe6c82976d9DeployFinalize.cmd
61d6b309d9774d13d632322816260e082f96293087333e7a379310e7b0796be0VBS helper
905e2e48e90e0d4aa332e7c39e9d7a41407fdc5bc78bad14c46294ec5c08b784Python loader
d79112cd7e8107719c63f901896f74154d5cf3d8aa20937c4ecb2f56ae28db46Encrypted .bin
a0501b667a166efa07bfa4f376d24e97948c68661a13e37ce6a6029edcbee0aaDecrypted backdoor

Hosts and IPs

HostIPRole
octoberfp.eastus.cloudapp.azure[.]com172.174.116[.]94Payload host
zone-14-service-8-8.eastus.cloudapp.azure[.]com4.246.227[.]107C2
sigmauperdonesoft[.]com172.233.158[.]8C2
westusserverfor.westus2.cloudapp.azure[.]com20.94.232[.]24C2
esastus-oct29.eastus.cloudapp.azure[.]com20.55.89[.]207C2 (current)
october28floor.eastus.cloudapp.azure[.]com172.174.235[.]40Backup C2
softportalone[.]com172.233.158[.]8Sibling domain

On-chain

  • Contract: 0x41179162599919ad4eadcabc2cfefc1133269c2c (Ethereum mainnet)
  • Operator wallet: 0xeb7d120ea01d624e4fc8d3cf8e90595d55083d06

Detection

  • pythonw.exe, or any process named ConfigEngine.exe, connecting to public Ethereum RPC providers.
  • The header X-Bot-Type: python in proxy or web server logs.
  • Logon tasks named MicrosoftEdgeUpdateTask plus hex characters that point to a Python runtime under %LOCALAPPDATA%, and a Startup file named MicrosoftEdgeUpdate.cmd.
  • An MSI custom action that runs a .cmd file from its own install folder.

On an infected host: isolate it, remove the logon task, the Startup files and the %LOCALAPPDATA% folder, and treat every credential used on that machine as exposed.

Shared publicly

Thanks to @malwrhunterteam for spotting and posting the sample, and to @smica83 for sharing it on MalwareBazaar. Analysis by Snoopy Triage.

Share: X Facebook LinkedIn