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 code | 3,265 |
|---|---|
| Sites with a match in the last 30 days | 1,357 |
| New sites in October | 596 |
| Still serving it when recaptured at least 25 days later | 1,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
| Month | New sites |
|---|---|
| September | 1,856 |
| October | 596 |
| November so far | 48 |
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 namedv1.jstov9.jsfrom a host you do not recognise - a full-screen
divwith an id like_tds_oholding 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.
| Chain | Contract | Current destinations | Last changed |
|---|---|---|---|
| Polygon | 0x08207B087F61d7e95E441E15fd6d40BEfd6eD308 | sky[.]dolcefantasia[.]us | |
| Polygon | 0x17fb7ea087abd93cd97b5a016b99aad2fb3af1a6 | vaer-cdn-3[.]sbs | |
| Polygon | 0x1b6cfd93ffc6ea17488a025980565f977f084db7 | chekbrow[.]beer | |
| Polygon | 0x224579e572ceec5309a7d9f5faf85dea5dbb7d4a | ntsnsdns[.]beer | |
| Polygon | 0x347280da8ba0c344a77a766d2bc163cfa1f571cd | bootstrup-framework-js[.]beer | |
| Polygon | 0x374854889e9a51d001da4387667b8546f079befb | ghdnsserverns[.]beer | |
| Polygon | 0x3801f0f5a2ac32bb02e8097200860aa38af9d240 | sr-hostes-js[.]beer | |
| Polygon | 0x3f120fa3b0796643e760cab2c730c5a6a119319c | istile-c-cloud[.]beer | |
| Polygon | 0x4694a69e6f34251d0e2e5e6b0a85aeba2cf6090f | mikelle[.]beer | |
| Polygon | 0x4af8048EdfE4523953E9907528BF5Cef7Fa8db09 | ruby[.]gady-gady[.]com, sun[.]gady-gady[.]com, teal[.]gady-gady[.]com | |
| Polygon | 0x4de37b7be1bfb8a74acd8af57a2c10c5b1a14bb3 | cdn-speed[.]beer | |
| Polygon | 0x53ffb04ef13bc4cb12ce8ac7b9532c254338dc3e | clacndjsvulnarbi[.]beer | |
| Polygon | 0x576e26789220bb4dbbec1f7bf6b794abeda884dc | bootstrap-maxcdn[.]beer | |
| Polygon | 0x5bc777d1dd5304d51ac41d682c87360dfdab4428 | travel-js-ns[.]beer | |
| Polygon | 0x5f3347efc3fa4280c1da08a4ca2483856f5e6a35 | snccdn-framework[.]beer | |
| Polygon | 0x678028f4af9422cea3484f334ee96a570588cb3f | bkscndclou[.]beer | |
| Polygon | 0x6c4beca447067d6452029888afd56417293f6a1f | letsgomakemoneyoncaptcha[.]beer | |
| Polygon | 0x6c6cadf48bda2b3dc60e96cad36f23110190e477 | cdn-server-styles[.]click | |
| Polygon | 0x786961bacf6eb767277695cd1ac75c76d3d66dc7 | nsservclod[.]beer | |
| Polygon | 0x8f2f173df08a5531dd5b92753cfbae422e04ada0 | cdn-speed[.]beer | |
| Polygon | 0x9034d100d07b1238d26f786dbc63831e3a2b410e | macerapindasi[.]com | |
| Polygon | 0x9130ec7e8b20646ad30e1386d1b45cd26eb0e07b | framesavecloudjs[.]beer | |
| Polygon | 0x926d64543148db649c4f877fe7ba4c693e01e288 | ns-claude-js[.]beer | |
| Polygon | 0x950e8fc151d8d910e8a01132307e6bcd03405a84 | hahletsgoagain[.]beer | |
| Polygon | 0x994cb8274721e5d6daa4fe3febf80cf9237a9ae8 | smtnscerver[.]beer | |
| Polygon | 0x9cbd8e55cdd98fbebd7cb2cb06342718f8df40ee | mstclaudens[.]beer | |
| Polygon | 0x9de78c82db772b02468838dc014fffb97d8d7e9b | siteamnsserv[.]beer | |
| Polygon | 0xa5a33cf0e35d5005fcbe0026c906403f3cc862b0 | sdnssmdf-js[.]beer | |
| Polygon | 0xaaf212ac53c22ad807c0b35afe44fc698b4bb529 | js-server[.]beer | |
| Polygon | 0xb36482fe794b895695914779db3909b471d1aa43 | cloud-safe[.]click | |
| Polygon | 0xc0d1f4df86e08dd4ad0cdd0085e7dc660ab21c63 | cdn-speed[.]beer | |
| Polygon | 0xc5a4bc312f0226beec569de05e0cf2c12d3ce930 | ssns-cdn-ns[.]beer | |
| Polygon | 0xc8375ed5d301691821e3211052bf8236a6534802 | web-security[.]beer | |
| Polygon | 0xcb9c910b54d2798a442f2f76899fa66655811738 | trunnsns[.]beer | |
| Polygon | 0xdb93ce45da3d013b2be1525375d5f548ca82b29a | lskannsserv[.]beer | |
| Polygon | 0xdc2ce8f48c71632c334ca7cc2e8e3c162fe0b391 | istounscnnd[.]beer | |
| Polygon | 0xdf2e2e7d02d15e67219ebad1cb78e24e738e7d5a | bigsmart[.]beer | |
| Polygon | 0xe96269edaba4c10dd1b82dd287cf5ee1c47483ea | framework-jsoncdn[.]beer | |
| Polygon | 0xeb8a63ef6fca91714715e09f69974a9f558ee3cc | ns-server-jscdn[.]beer | |
| Polygon | 0xf50c07986e9a9d96743aac66f4da8788d3f32ecc | bigflopenergy[.]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.
| Host | Sites | Last seen | Latest command |
|---|---|---|---|
wall[.]casajuanchos[.]com | 300 | Decoded URLURL First seen 2 October 2026, 2 URLs on this host. | |
dog[.]caspers66[.]com | 140 | CommandURL First seen 27 September 2026, 1 URL on this host. | |
red[.]chuseatery[.]com | 91 | CommandURL First seen 12 October 2026, 1 URL on this host. | |
lens80[.]com | 8 | CommandURL First seen 5 October 2026, 1 URL on this host. | |
moss[.]coffeecommongrounds[.]com | 6 | CommandURL First seen 15 October 2026, 1 URL on this host. | |
coral79[.]com | 5 | CommandURL First seen 29 September 2026, 1 URL on this host. | |
lion[.]elfrias[.]com | 4 | CommandURL First seen 14 October 2026, 1 URL on this host. | |
gog-current-cupkey[.]com | 3 | CommandURL First seen 26 September 2026, 1 URL on this host. | |
blaze-venture[.]com | 2 | CommandURL First seen 2 October 2026, 1 URL on this host. | |
love[.]district7pho[.]com | 2 | CommandURL First seen 18 October 2026, 1 URL on this host. |
The ClickFix command tracker lists every host.