Threat Overview
GuidePoint Security reported on September 1, 2026 that a ClickFix campaign compromised at least 31 legitimate websites across e-commerce, professional services, and retail logistics. Visitors arriving from search engines can receive a fake human-verification overlay instructing them to press Windows+R, paste a command, and execute it.
The installed backdoor uses Polygon blockchain smart contracts as an attacker-controlled address book. Malware queries Polygon RPC infrastructure to retrieve its current command-and-control destination, allowing operators to rotate C2 without modifying the malware. GuidePoint reports persistence across reboots and one-minute beaconing. Durable indicators include the PersonalizedUpdates Run-key value, scheduled task Enter, extension ID bpknfkhjjbjgagobdaekmnlgdhbbpcea, and native messaging host com.top.index.
References
- GuidePoint Security GRIT – September 1, 2026: https://www.guidepointsecurity.com/blog/etherhiding_exposed_what_security_leaders_need_to_know/
- Dark Reading – September 1, 2026: https://www.darkreading.com/endpoint-security/clickfix-campaign-comprises-31-orgs-abuses-polygon-blockchain
Impacted Systems
- Windows endpoints reached through compromised websites.
- Initial execution uses fake CAPTCHA/human-verification prompts and Windows+R.
- At least 31 organizations’ websites were compromised at publication time.
- C2 discovery uses Polygon blockchain smart contracts and public RPC infrastructure.
- Persistence includes
PersonalizedUpdatesand scheduled taskEnter. - Attacker prerequisite: the user follows the ClickFix prompt and executes the supplied command.
Why this matters
The campaign combines a common user-execution technique with durable persistence and dynamically rotatable blockchain-based C2. Static domain blocking alone is insufficient, making behavioral endpoint hunting especially important.
Exploitation Status
Confirmed malicious campaign. GuidePoint based its findings on incident-response evidence, blockchain forensics, and recovered malware source code.
What this hunt looks for
ClickFix PowerShell execution, published campaign domains, Polygon RPC access from unexpected processes, Run-key and scheduled-task persistence, the malicious browser extension ID, published hashes, and browser-to-shell execution.
Required logs
- DeviceProcessEvents
- DeviceNetworkEvents
- DeviceRegistryEvents
- DeviceFileEvents
- SecurityEvent Event ID 4688 fallback
Hunt 1 – First-Pass: ClickFix PowerShell Self-Execution
DeviceProcessEvents
| where TimeGenerated >= ago(30d)
| where FileName in~ ("powershell.exe","pwsh.exe")
| where ProcessCommandLine has_any ("Invoke-RestMethod"," irm ","AddScript(","System.Management.Automation.PowerShell","-replace 1 -split 2")
| where ProcessCommandLine has_any ("http://","https://",".fun/",".online/",".xyz/",".top/")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| sort by TimeGenerated ascHunt 2 – Published EtherHiding Domains
let CampaignDomains = dynamic(["3262d48df5d75e34.shop","ddcd62e16a428c8e.shop","hivinest.online","45a3158594d6ba76.fun","82d35f9b891c987a.fun","9082b2a18f2e00fe.fun","67b3ac3e45812153.fun","folfdighdd.xyz","cleearpeyak.online","onemm.net","additionalver.com","promo-chatgpt.com","pleasewaitcenter.top","skaybolt.online","lanhd6549tdhse.top","purplepencel.online","detsigen.site"]);
DeviceNetworkEvents
| where TimeGenerated >= ago(30d)
| where RemoteUrl in~ (CampaignDomains)
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType
| sort by TimeGenerated ascHunt 3 – Polygon RPC Access From PowerShell
let PolygonRPC = dynamic(["polygon-bor-rpc.publicnode.com","polygon.publicnode.com","polygon.gateway.tenderly.co","gateway.tenderly.co","1rpc.io","polygon.api.onfinality.io","polygon.rpc.subquery.network","polygon.drpc.org","polygon.lava.build"]);
DeviceNetworkEvents
| where TimeGenerated >= ago(30d)
| where RemoteUrl in~ (PolygonRPC)
| where InitiatingProcessFileName in~ ("powershell.exe","pwsh.exe","wscript.exe","cscript.exe","mshta.exe") or InitiatingProcessCommandLine has_any ("powershell","AddScript","Invoke-RestMethod"," irm ")
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType
| sort by TimeGenerated ascHunt 4 – PersonalizedUpdates Run-Key Persistence
DeviceRegistryEvents
| where TimeGenerated >= ago(30d)
| where RegistryKey has @"\Software\Microsoft\Windows\CurrentVersion\Run"
| where RegistryValueName =~ "PersonalizedUpdates"
| project TimeGenerated, DeviceName, ActionType, RegistryKey, RegistryValueName, RegistryValueData, InitiatingProcessAccountName, InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by TimeGenerated ascHunt 5 – Scheduled Task Enter
DeviceProcessEvents
| where TimeGenerated >= ago(30d)
| where FileName =~ "schtasks.exe"
| where ProcessCommandLine has "Enter"
| where ProcessCommandLine has_any ("/Create","/SC MINUTE","/MO 1")
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by TimeGenerated ascHunt 6 – Malicious Browser Extension ID
DeviceFileEvents
| where TimeGenerated >= ago(30d)
| where FolderPath has_any (@"\Google\Chrome\User Data\",@"\Microsoft\Edge\User Data\")
| where FolderPath has @"\Extensions\bpknfkhjjbjgagobdaekmnlgdhbbpcea\"
| project TimeGenerated, DeviceName, ActionType, FileName, FolderPath, SHA256, InitiatingProcessAccountName, InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by TimeGenerated ascHunt 7 – Browser-to-PowerShell Execution
DeviceProcessEvents
| where TimeGenerated >= ago(30d)
| where InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","firefox.exe","brave.exe")
| where FileName in~ ("powershell.exe","pwsh.exe","cmd.exe","wscript.exe","cscript.exe","mshta.exe")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| sort by TimeGenerated ascHunt 8 – SecurityEvent 4688 Fallback
SecurityEvent
| where TimeGenerated >= ago(30d)
| where EventID == 4688
| where NewProcessName endswith @"\powershell.exe" or NewProcessName endswith @"\pwsh.exe"
| where CommandLine has_any ("Invoke-RestMethod"," irm ","AddScript(","System.Management.Automation.PowerShell","-replace 1 -split 2")
| project TimeGenerated, Computer, Account, ParentProcessName, NewProcessName, CommandLine
| sort by TimeGenerated ascDetection Notes
- Highest-signal host indicators are PersonalizedUpdates, scheduled task Enter, and the published extension ID.
- The campaign rotates C2 through Polygon, so a single blocked domain or IP is not durable.
- Polygon RPC traffic can be legitimate; process and user context matter.
- ClickFix command syntax can change. Browser-to-shell execution and persistence are more durable signals.
- SecurityEvent fallback requires Event ID 4688 with command-line auditing.
- Missing DeviceRegistryEvents or DeviceFileEvents removes some of the strongest detections.