Hunting EtherHiding: Finding ClearFake Loaders Through Browser RPC Activity

by ,  and  | Nov 4, 2026

Executive Summary

A browser reaching several blockchain RPC endpoints within seconds can give defenders a useful starting point for an EtherHiding hunt. Across available endpoint telemetry reviewed from March through September 2026, SRA observed recurring activity consistent with ClearFake and related loaders: browser connections to public blockchain infrastructure, sometimes accompanied by infrastructure associated with fake verification pages and ClickFix delivery. SRA also observed browser RPC activity followed by malicious PowerShell execution and retrieval of an attacker-hosted script. Correlating network and process telemetry distinguished browser exposure from confirmed local execution. Defenders who stop at the network signal will overcount compromise, so pairing RPC activity with process telemetry shows which hosts need incident response.

The strongest leads came from browser connections to BNB Smart Chain testnet and Ethereum Sepolia endpoints. In environments without an established business use for blockchain development, these destinations warrant investigation. Short bursts involving multiple RPC providers helped prioritize the hunt, but single-provider connections also mattered: a loader may retrieve what it needs from one endpoint. By examining browser activity around those connections, SRA identified recurring infrastructure, changing loader hostnames, and potential source websites. The resulting workflow moves from RPC activity to browser context and then to process telemetry, helping defenders identify exposure and determine whether suspicious execution followed.

 

Why Blockchain Traffic Becomes a Hunting Opportunity

EtherHiding uses public blockchain infrastructure to store malicious code or the information needed to retrieve it. A compromised website runs injected JavaScript that requests data from a smart contract through a public JSON-RPC service. The response can supply a browser stage or a pointer to another location. An attacker can update the content stored by the contract without editing every compromised site individually.

Public reporting describes several implementations. The following sequence explains how the technique can lead from an ordinary website visit to local execution, while identifying where defenders may find evidence.

  • A compromised website. The attacker injects a JavaScript loader into a website. In the ClearFake samples analyzed by Expel, the initial JavaScript was embedded directly in the page using Base64 encoding, removing the need for a separate hostname to serve that initial loader. In one SRA incident response engagement, a malicious WordPress must-use plugin suppressed its injected output for logged-in administrators, concealing the content from an owner inspecting the site while authenticated.
  • A contract read over public RPC. The loader requests data from a smart contract through public JSON-RPC providers. Expel documented a contract with a public get() function that returned content stored through an owner-controlled set() function. Loaders may contact several providers sequentially or concurrently to improve retrieval reliability. These browser-initiated connections can appear in DeviceNetworkEvents, giving defenders a hunting lead even when the initial script is embedded in the page. The network event alone does not reveal the contract address, RPC method, or returned content.
  • A browser stage. The retrieved content may contain encoded JavaScript that the loader decodes and executes, or information used to retrieve externally hosted content. Public analyses describe checks for automated analysis environments, browser identification, and on-chain tracking used to decide whether to display a lure. Randy McEoin’s analysis documents requests to Avast’s geolocation service as part of browser-identification logic. Those requests provide supporting context, but do not independently establish that a verification prompt appeared.
  • A ClickFix lure and local execution. The browser presents a fake verification task designed to persuade the visitor to run a command locally. In the Windows flow documented by Expel, the page places a command on the clipboard and instructs the user to open Run, paste, and execute it. This behavior aligns with User Execution: Malicious Copy and Paste (T1204.004). Delivery methods have varied, including PowerShell, mshta, and abuse of SyncAppvPublishingServer.vbs to execute PowerShell indirectly. The transition to endpoint execution requires a separate review of process activity and subsequent downloads.

What SRA Observed

SRA’s review covered available endpoint telemetry between March and September 2026. Relevant browser RPC activity appeared across industries. Potential source websites included small businesses, restaurants, medical practices, university and NGO sites, and personal-interest blogs. This distribution was consistent with opportunistic exposure during ordinary browsing. Identifying a website in the surrounding network activity provided a lead for investigation, rather than proof that it delivered the injection.

Weekly activity remained comparatively low through July, then increased in August and remained elevated over the subsequent review period. This describes the telemetry available to SRA; it is not an estimate of global campaign volume or the number of infected endpoints.

Two patterns appeared in the surrounding browser activity. In one, RPC requests were followed by an Avast geolocation lookup without a recognizable external loader or lure hostname in the review window. That pattern was consistent with publicly documented loaders retrieving browser content from on-chain storage. In the other, RPC activity coincided with traffic-distribution and external loader hosts.

Both patterns appeared on BSC testnet; the external-infrastructure pattern also appeared on Polygon and Base. The blockchain destination alone did not distinguish the delivery variant.

SRA observed delivr lookalikes and mytds infrastructure around BSC testnet activity. Restricting those infrastructure pivots to Polygon or Base would therefore miss relevant leads. Temporal proximity establishes an investigative relationship; captured scripts or request content are needed to establish the precise dependency between requests.

Some windows included requests to ip-info.ff.avast[.]com. McEoin’s September 2026 analysis documents this endpoint in ClearFake’s browser-identification logic. In the context of suspicious RPC activity, the lookup supports comparison with that analyzed behavior. The service is legitimate, and the request alone does not establish that a verification overlay appeared.

 

From Browser Activity to Confirmed Execution

SRA observed suspicious browser RPC activity followed by explorer.exe launching powershell.exe with a hidden-window option and an execution-policy bypass. The command used an iex(iwr …) expression to retrieve an attacker-hosted PowerShell script.

The linked network and process evidence established malicious PowerShell execution, consistent with a ClickFix hand-off. It did not independently capture the user’s keystrokes or establish every action performed by the downloaded script. Once execution was confirmed, the investigation needed to scope subsequent activity and assess containment.

This finding demonstrates why the hunt continues beyond the browser timeline. The RPC activity supplied the initial lead; the process evidence established the need for incident response.

 

The Hunt Hypothesis

We began with a narrow question: which endpoints showed browser connections to multiple public RPC providers within a short interval?

A loader can contact several providers sequentially or concurrently to improve retrieval reliability. McEoin’s analyzed ClearFake code issued concurrent RPC requests and used the first valid result. A burst therefore does not, by itself, establish that an earlier provider failed. The useful hunting signal is the cluster of browser-initiated RPC connections, particularly when testnet destinations are involved. However, legitimate Web3 applications can also implement fallback. Viem, for example, provides a transport that attempts another configured endpoint when a request fails. Multiple-provider traffic is therefore a prioritization signal, not a malware verdict.

The next step was to include single-provider testnet connections. Restricting the hunt to bursts would miss single-provider retrievals and cases where telemetry captured only one connection. In practice, the two approaches complement one another: multi-provider activity narrows the initial review, while single-provider testnet activity broadens coverage.

For mainnet services, the business context matters even more. Browser extensions, embedded Web3 components, and approved applications may generate legitimate requests. Record those uses and investigate the remaining activity with the page context intact.

Pivoting into the browser timeline

For each lead, SRA reviewed browser connections from two minutes before the RPC activity to one minute after it. This window was a starting point for reconstructing the visit, not a guarantee that it contained the entire chain.

The first question was which page may have initiated the activity. A nearby website request can identify a candidate, particularly when the same sequence recurs on separate endpoints. It does not prove that the site served the loader. Browser tabs, background requests, advertisements, and extensions can all contribute events to the same timeline. Page source, proxy records, browser history, or a captured script can strengthen the association.

The second question was whether the window contained recurring infrastructure beyond the public RPC providers. SRA observed domains resembling analytics services and CDN hostnames, including webanalytics-cdn[.]sbs and several delivr lookalikes. Other recurring names were associated with traffic distribution or fake verification pages. Their recurrence across unrelated environments made them useful pivots for investigating additional exposure.

The observed infrastructure changed over time. An analytics-themed hostname appeared from March into August, while several CDN lookalikes appeared in August and September. Traffic-distribution domains also changed. The practical consequence is that an IOC list should support the hunt, while the underlying RPC and browser behavior remains part of the detection strategy.

What the evidence can establish

Network and process events should be interpreted together. A connection to an RPC hostname establishes that the endpoint attempted or made that connection, according to the event’s action type. It does not reveal the RPC method, contract address, returned content, or successful execution of a browser stage unless additional telemetry supplies those details.

The same distinction applies to lure-related infrastructure. A request to a known verification hostname can support likely exposure. A subsequent process launch with a suspicious command line can support local command execution. Confirming the payload’s behavior requires reviewing its execution, downloads, child processes, and other available evidence.

This distinction prevents two errors: treating every RPC connection as a compromise, and dismissing a genuine execution event because the initial interaction looked like routine browsing.

Detection and Hunting Opportunities

1. Browser to testnet RPC

This query identifies browser connections to known RPC services whose hostnames contain testnet-related terms. Prioritize unexpected activity in environments without an approved business use. Review ActionType before assessing whether a connection succeeded.

KQL

DeviceNetworkEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe")
| extend Host = iff(RemoteUrl has "://", tostring(parse_url(RemoteUrl).Host), tostring(split(split(RemoteUrl, "/")[0], ":")[0]))
| where Host has_any ("testnet", "prebsc", "sepolia", "holesky")
| where Host has_any ("publicnode", "drpc", "bnbchain", "binance", "tenderly", "nodies", "1rpc", "0xrpc", "ethpandaops", "ankr", "blastapi", "onfinality", "lava.build", "quiknode", "4everland", "blockpi", "omniatech")
| project Timestamp, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, Host, RemoteIP, ActionType

2. Multi-provider RPC burst

This query groups matching RPC connections by device, account, and one-minute time bin, then returns groups containing at least two distinct RPC hostnames. It is a burst-hunting heuristic: it does not establish process-instance continuity, distinct provider ownership, or sequential failure. Legitimate Web3 activity may match, and a burst spanning a minute boundary may be split. Interpret the High and Medium labels as initial triage categories requiring contextual validation.

KQL

let Browsers = dynamic(["chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe"]);
let RpcProviders = dynamic(["publicnode","drpc.org","bnbchain.org","binance.org","tenderly.co","nodies.app","1rpc.io","0xrpc.io","ethpandaops.io","ankr.com","blastapi.io","onfinality.io","lava.build","quiknode.pro","4everland.org","blockpi.network","omniatech.io","zan.top","subquery.network","tatum.io","polygon-rpc.com","mainnet.base.org","hypersync.xyz","therpc.io"]);
let Chains = dynamic(["bsc-testnet","prebsc","sepolia","holesky","polygon","base","bsc"]);
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where InitiatingProcessFileName in~ (Browsers)
| extend Host = iff(RemoteUrl has "://", tostring(parse_url(RemoteUrl).Host), tostring(split(split(RemoteUrl, "/")[0], ":")[0]))
| where Host has_any (RpcProviders) and Host has_any (Chains)
| summarize Events = count(), DistinctRpcHosts = dcount(Host), RpcHosts = make_set(Host), FirstSeen = min(Timestamp)
    by DeviceName, InitiatingProcessAccountName, bin(Timestamp, 1m)
| where DistinctRpcHosts >= 2
| extend Confidence = iff(RpcHosts has_any ("testnet", "prebsc", "sepolia"), "High", "Medium")
| order by Confidence asc, FirstSeen desc

3. Burst window pivot

This query retrieves browser activity from two minutes before to one minute after the selected burst. It marks configured RPC providers, infrastructure patterns, selected TLDs, and the Avast geolocation endpoint. Review the ordered events to identify candidate source pages and related infrastructure. A nearby hostname, TLD match, or geolocation request supports investigation; none independently confirms a loader stage or a displayed overlay.

KQL

let TargetDeviceName = "";
let BurstTimestamp = datetime();
let RpcProviders = dynamic(["publicnode","drpc.org","bnbchain.org","binance.org","tenderly.co","nodies.app","1rpc.io","ankr.com","blastapi.io","onfinality.io","lava.build"]);
DeviceNetworkEvents
| where DeviceName == TargetDeviceName
| where Timestamp between ((BurstTimestamp - 2m) .. (BurstTimestamp + 1m))
| where InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe")
| where isnotempty(RemoteUrl)
| extend Host = iff(RemoteUrl has "://", tostring(parse_url(RemoteUrl).Host), tostring(split(split(RemoteUrl, "/")[0], ":")[0]))
| extend IsRpc = Host has_any (RpcProviders)
| extend IsLoaderInfra = Host matches regex @"(?i)(mytds\d+\.com|dntds\.shop|cdn\.\w+delivr\.com|fingerprint-veri\w*\.info|webanalytics-cdn\.sbs|snake\.zooparkko\.com|securityalertcaptchacheck\.com)$"
| extend IsThrowawayTld = Host matches regex @"(?i)\.(sbs|cfd|lol|click|monster|bond|icu|xyz|shop|help)$"
| extend IsOverlayCheck = Host =~ "ip-info.ff.avast.com"   // ClearFake stage 2 geo-IP call, fires just before the ClickFix overlay renders
| project Timestamp, IsLoaderInfra, IsThrowawayTld, IsOverlayCheck, IsRpc, Host, RemoteUrl, RemoteIP, ActionType, InitiatingProcessAccountName
| order by Timestamp asc

4. ClickFix hand-off

This query searches flagged devices for selected interpreters and utilities with suspicious command-line content and specified parents. Investigate matches using the complete process tree, account context, and subsequent activity. The included patterns cover public reporting on SyncAppvPublishingServer.vbs proxy execution and WebDAV/rundll32 delivery. A match is a triage lead; the query is not exhaustive and a negative result does not rule out execution.

KQL

let FlaggedHosts = dynamic([""]);
DeviceProcessEvents
| where Timestamp > ago(30d)
| where DeviceName in~ (FlaggedHosts)
| where InitiatingProcessFileName in~ ("explorer.exe","WindowsTerminal.exe","chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe")
| where FileName in~ ("powershell.exe","pwsh.exe","mshta.exe","cmd.exe","curl.exe","bitsadmin.exe","certutil.exe","msiexec.exe","wscript.exe","cscript.exe","rundll32.exe")
| where ProcessCommandLine has_any ("http://","https://","iex","invoke-expression","irm","invoke-restmethod","iwr","invoke-webrequest","downloadstring","frombase64string","-enc","-w hidden","-ep bypass","mshta")
   or ProcessCommandLine matches regex @"(?i)#\s*(i am not a robot|i am human|verification|verify you are|ray id|captcha)"
   // Expel (Jan 2026): SyncAppvPublishingServer.vbs proxy execution with alias-obfuscated IEX / Invoke-RestMethod
   or ProcessCommandLine has_any ("SyncAppvPublishingServer", "gal i*x", "gcm *stM*", "gcm *stm*")
   // Trend Micro (May 2026): WebDAV-hosted DLL loaded via rundll32 from a UNC path
   or (FileName =~ "rundll32.exe" and ProcessCommandLine has @"\\")
| extend StageUrl = extract(@"(?i)(https?://[^\s\"<>)]+)", 1, ProcessCommandLine)
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine, StageUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| order by Timestamp desc

5. Full Chain

This query combines testnet hits and RPC bursts with surrounding browser events and later process matches. It uses a six-hour process-correlation window and joins the stages by device. Review account and process context to distinguish related activity from unrelated events in that interval. A device with overlapping anchors may produce repeated evidence rows. Confidence labels and stage labels organize triage; they do not independently establish maliciousness or successful completion of the chain.

KQL

let Lookback = 30d;
let HandoffWindow = 6h;   // how long after the RPC call a ClickFix execution still counts
let Browsers = dynamic(["chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe"]);
let RpcProviders = dynamic(["publicnode","drpc.org","bnbchain.org","binance.org","tenderly.co","nodies.app","1rpc.io","0xrpc.io","ethpandaops.io","ankr.com","blastapi.io","onfinality.io","lava.build","quiknode.pro","4everland.org","blockpi.network","omniatech.io","zan.top","subquery.network","tatum.io","polygon-rpc.com","mainnet.base.org","hypersync.xyz","therpc.io"]);
let Chains = dynamic(["bsc-testnet","prebsc","sepolia","holesky","polygon","base","bsc"]);
let Testnets = dynamic(["testnet","prebsc","sepolia","holesky"]);
//
// Base: browser RPC traffic, scanned once
let RpcTraffic = materialize(
    DeviceNetworkEvents
    | where Timestamp > ago(Lookback)
    | where InitiatingProcessFileName in~ (Browsers)
    | extend Host = iff(RemoteUrl has "://", tostring(parse_url(RemoteUrl).Host), tostring(split(split(RemoteUrl, "/")[0], ":")[0]))
    | where Host has_any (RpcProviders) and Host has_any (Chains)
    | project Timestamp, DeviceName, InitiatingProcessAccountName, Host
);
//
// Stage 1: any browser-to-testnet call (single provider is enough)
let TestnetHits =
    RpcTraffic
    | where Host has_any (Testnets)
    | summarize BurstTimestamp = min(Timestamp), DistinctRpcHosts = dcount(Host), RpcHosts = make_set(Host)
        by DeviceName, BurstAccount = InitiatingProcessAccountName, bin(Timestamp, 1m)
    | extend Confidence = "High", Source = "Testnet";
//
// Stage 2: multi-provider RPC burst
let Bursts =
    RpcTraffic
    | summarize BurstTimestamp = min(Timestamp), DistinctRpcHosts = dcount(Host), RpcHosts = make_set(Host)
        by DeviceName, BurstAccount = InitiatingProcessAccountName, bin(Timestamp, 1m)
    | where DistinctRpcHosts >= 2
    | extend Confidence = iff(RpcHosts has_any (Testnets), "High", "Medium"), Source = "Burst";
//
// Anchors: one row per device / account / minute, deduped across both sources
let Anchors = materialize(
    union TestnetHits, Bursts
    | summarize Confidence = min(Confidence), DistinctRpcHosts = max(DistinctRpcHosts),
                RpcHosts = make_set(RpcHosts), Source = strcat_array(make_set(Source), "+")
        by DeviceName, BurstAccount, BurstTimestamp
);
let FlaggedHosts = materialize(Anchors | distinct DeviceName);
//
// Stage 3: burst window pivot (-2m .. +1m around each anchor)
let BurstWindows =
    DeviceNetworkEvents
    | where Timestamp > ago(Lookback)
    | where DeviceName in (FlaggedHosts)
    | where InitiatingProcessFileName in~ (Browsers)
    | where isnotempty(RemoteUrl)
    | join kind=inner (Anchors | project DeviceName, BurstTimestamp, Confidence, Source) on DeviceName
    | where Timestamp between ((BurstTimestamp - 2m) .. (BurstTimestamp + 1m))
    | extend Host = iff(RemoteUrl has "://", tostring(parse_url(RemoteUrl).Host), tostring(split(split(RemoteUrl, "/")[0], ":")[0]))
    | extend IsRpc = Host has_any (RpcProviders)
    | extend IsLoaderInfra = Host matches regex @"(?i)(mytds\d+\.com|dntds\.shop|cdn\.\w+delivr\.com|fingerprint-veri\w*\.info|webanalytics-cdn\.sbs|snake\.zooparkko\.com|securityalertcaptchacheck\.com)$"
    | extend IsThrowawayTld = Host matches regex @"(?i)\.(sbs|cfd|lol|click|monster|bond|icu|xyz|shop|help)$"
    | extend IsOverlayCheck = Host =~ "ip-info.ff.avast.com"
    | extend SecondsFromBurst = datetime_diff("second", Timestamp, BurstTimestamp)
    | project Stage = "3-Window", DeviceName, BurstTimestamp, Confidence, Source, Timestamp, SecondsFromBurst,
              IsLoaderInfra, IsThrowawayTld, IsOverlayCheck, IsRpc, Host, RemoteUrl, RemoteIP, ActionType,
              AccountName = InitiatingProcessAccountName;
//
// Stage 4: ClickFix hand-off on flagged hosts, within HandoffWindow after an anchor
let ClickFix =
    DeviceProcessEvents
    | where Timestamp > ago(Lookback)
    | where DeviceName in (FlaggedHosts)
    | where InitiatingProcessFileName in~ ("explorer.exe","WindowsTerminal.exe","chrome.exe","msedge.exe","firefox.exe","brave.exe","opera.exe","vivaldi.exe")
    | where FileName in~ ("powershell.exe","pwsh.exe","mshta.exe","cmd.exe","curl.exe","bitsadmin.exe","certutil.exe","msiexec.exe","wscript.exe","cscript.exe","rundll32.exe")
    | where ProcessCommandLine has_any ("http://","https://","iex","invoke-expression","irm","invoke-restmethod","iwr","invoke-webrequest","downloadstring","frombase64string","-enc","-w hidden","-ep bypass","mshta")
        or ProcessCommandLine matches regex @"(?i)#\s*(i am not a robot|i am human|verification|verify you are|ray id|captcha)"
        or ProcessCommandLine has_any ("SyncAppvPublishingServer", "gal i*x", "gcm *stM*", "gcm *stm*")
        or (FileName =~ "rundll32.exe" and ProcessCommandLine has @"\\")
    | extend StageUrl = extract(@"(?i)(https?://[^\s""<>)]+)", 1, ProcessCommandLine)
    | join kind=inner (Anchors | project DeviceName, BurstTimestamp, Confidence, Source) on DeviceName
    | where Timestamp between (BurstTimestamp .. (BurstTimestamp + HandoffWindow))
    | extend SecondsFromBurst = datetime_diff("second", Timestamp, BurstTimestamp)
    | summarize arg_min(SecondsFromBurst, *) by DeviceName, Timestamp, ProcessCommandLine
    | project Stage = "4-ClickFix", DeviceName, BurstTimestamp, Confidence, Source, Timestamp, SecondsFromBurst,
              AccountName, FileName, ProcessCommandLine, StageUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256;
//
// Output: everything in one triage table
union (Anchors | extend Stage = "2-Anchor", Timestamp = BurstTimestamp), BurstWindows, ClickFix
| order by Confidence asc, DeviceName asc, BurstTimestamp desc, Stage asc, Timestamp asc

Recommendations

  • Alert on unexpected browser connections to testnet RPC endpoints. In environments without an approved use for blockchain development, these connections warrant investigation. Include single-provider activity as well as bursts, baseline legitimate use, and scope exceptions narrowly.
  • Block infrastructure confirmed to be malicious. Apply proxy and DNS controls to validated loader, traffic-distribution, lure, and payload domains. Use the burst-window pivot to identify emerging domains as infrastructure changes.
  • Investigate mainnet RPC bursts in context. Polygon, Base, and BSC activity may originate from legitimate Web3 applications or browser components. Review surrounding connections and approved uses before escalation. A burst accompanied by known malicious infrastructure or suspicious execution warrants higher priority.
  • Restrict unnecessary execution paths where business requirements allow. Review application-control coverage for mshta, PowerShell, and the proxy-execution utilities seen in documented ClickFix delivery. Restrictions on Run or a particular utility can interrupt specific paths, but should be part of a broader control strategy. User guidance should address websites that ask visitors to paste commands into Run or a terminal to complete verification.
  • Respond according to the evidence. A network hit alone does not establish endpoint compromise or rule out subsequent execution. Review process activity, downloads, and other available telemetry before determining the response. Confirmed malicious execution warrants containment and incident response, including assessment of credential or session theft where supported by the observed behavior.

For website owners

  • Patch WordPress core, plugins, and themes, and remove unused components. Where compromise is suspected, investigate how the attacker gained access; patching alone does not remove an existing injection or restore trustworthy application files.
  • Audit wp-content/mu-plugins/ alongside ordinary plugins and themes. Must-use plugins load automatically and appear in a separate Must-Use section rather than the default plugin list. In one SRA engagement, a malicious plugin suppressed its injected output for administrators, making an authenticated site check insufficient.
  • Review the page delivered to a logged-out visitor, including unexpected scripts added through wp_head or other injection points. Differences between authenticated and unauthenticated output can be legitimate. The relevant finding is unexpected malicious content or logic that conceals it from administrators.
  • Inspect unfamiliar REST routes and their authorization checks. The malicious plugin SRA investigated exposed update, status, and removal functionality protected only by a hardcoded key, allowing the attacker to maintain the injection remotely.
  • For a confirmed compromise, remove the attacker’s access, restore trustworthy application files, review affected credentials, and validate the public-facing site. Where the integrity of the installation cannot be established, rebuild from a clean installation and a verified backup.

 

IOCs

Recurring infrastructure

Indicator Role Active (observed) Confidence
dntds[.]shop Traffic distribution system May to Aug 2026 High
mytds1029380[.]com Traffic distribution system Sep 2026 High
webanalytics-cdn[.]sbs Loader / second-stage host Mar to Aug 2026 High
snake.zooparkko[.]com Loader / second-stage host Jun to Jul 2026 High
cdn.claritydelivr[.]com Loader / second-stage host (jsdelivr lookalike) Aug to Sep 2026 High
cdn.quickdelivr[.]com Loader / second-stage host (jsdelivr lookalike) Sep 2026 High
cdn.nodedelivr[.]com Loader / second-stage host (jsdelivr lookalike) Sep 2026 High
cdn.coredelivr[.]com Loader / second-stage host (jsdelivr lookalike) Sep 2026 High
dome.beatdropkec[.]com Stage / lure pointer, confirmed-execution chain Sep 2026 High
king.allwwewrestlers[.]com PowerShell payload host (update.ps1), confirmed-execution chain Sep 2026 High
fingerprint-veri[.]info ClickFix verification lure Sep 2026 High
fingerprint-verification[.]info ClickFix verification lure Sep 2026 High
securityalertcaptchacheck[.]com ClickFix verification lure Sep 2026 High
llm.unolighter[.]com Adjacent infrastructure Jun 2026 Medium
ultraspeed[.]pro Adjacent infrastructure Aug 2026 Medium
webawast[.]xyz Adjacent infrastructure Mar 2026 Medium
thu-ipad-03[.]cfd Adjacent infrastructure Sep 2026 Medium
abcsgftr[.]cc Adjacent infrastructure Sep 2026 Medium
interseqf[.]com Adjacent infrastructure Sep 2026 Medium
hotelassisstant[.]com Attacker-run scam site cluster Sep 2026 Medium
cruiseassistant[.]cruises Attacker-run scam site cluster Sep 2026 Medium
airlinesassistant[.]com Attacker-run scam site cluster Sep 2026 Medium

Single-Use Stage Domains

Indicator Observed Confidence
sitepromclop[.]click Mar 23, 2026 Low-Medium
microloh[.]bond Mar 23, 2026 Low-Medium
biggestchlen[.]lol Apr 3, 2026 Low-Medium
denegnet[.]click Apr 6, 2026 Low-Medium
blatnoitovar[.]xyz Apr 7, 2026 Low-Medium
api.bestzlivehub[.]monster Apr 14, 2026 Low-Medium
xu0p.bestzlivehub[.]monster Apr 14, 2026 Low-Medium
bigbadwolf[.]click Apr 17, 2026 Low-Medium
tfrdip[.]xyz Apr 22, 2026 Low-Medium
enfath[.]top Apr 22, 2026 Low-Medium
input.frontrics[.]site Apr 22, 2026 Low-Medium
etomoidomen[.]cfd Apr 25, 2026 Low-Medium
mambet[.]lol May 1, 2026 Low-Medium
educationcaster[.]monster May 7, 2026 Low-Medium
marinaradom[.]cfd May 18, 2026 Low-Medium
pwa[.]xyz May 27, 2026 Low-Medium
tobascopixxx24[.]xyz Jun 10, 2026 Low-Medium
great-fade[.]sbs Jul 3, 2026 Low-Medium
mekasa[.]pro Jul 6, 2026 Low-Medium
metalmaq[.]shop Jul 20, 2026 Low-Medium
alkociferblat[.]cc Jul 22, 2026 Low-Medium
clouderfaster[.]cc Jul 22, 2026 Low-Medium
auth-clo-id[.]cc Jul 25, 2026 Low-Medium
widget.suphelper[.]top Jul 26, 2026 Low-Medium
nrm9.wringpoploaderfastnow[.]monster Jul 28, 2026 Low-Medium
jff-analytics.manage-wp[.]cc Jul 29, 2026 Low-Medium
ahahahahadebili[.]help Sep 21, 2026 Low-Medium

Potential Source Websites

The following websites appeared in browser network activity immediately before RPC bursts observed by SRA. They are potential source-site leads, not confirmed attacker infrastructure. SRA has not retrieved their page source to verify an injection, and network proximity alone does not establish which page was active or whether a site delivered the loader. Sites are grouped by the strength of the observed association, including repeated appearances and accompanying attacker infrastructure.

Site Type (from context) Basis for suspicion
9amchef[.]com Recipe blog Preceded bursts on three separate hosts in two environments over a month; attacker infrastructure in every window
cina-southsudan[.]org NGO Preceded bursts on two hosts; loader and TDS hosts in the window
digitalenterprise2026[.]com Event / conference site Preceded bursts on two hosts; loader and TDS hosts in the window
counselorseducation[.]com Professional education Same host twice, two days apart; loader host in both windows
dgnb[.]gob[.]ve Government (Venezuela) Two bursts on one host in one session; ClickFix lure page in the window
adventori[.]com Business site Loader host and a single-use stage domain in the window
agroduka[.]ke Agricultural retailer (Kenya) Loader and TDS hosts in the window
aimproviderportal[.]org Healthcare provider portal TDS host in the window
almunawwarah[.]ac[.]ke School (Kenya) Loader host in the window
australiaawardsafrica[.]org Scholarship program Single-use stage domain in the window
bbsmallnairobi[.]com Business site (Kenya) ClickFix lure page in the window
besthappyfamily[.]com Lifestyle blog Single-use stage domain in the window
celeritymedtech[.]com Medical device company Loader host and a single-use stage domain in the window
ch-int[.]org NGO Loader and TDS hosts in the window
cheveningscholarship[.]com Scholarship information TDS host in the window
clbrief[.]com News / briefing site ClickFix lure page in the window
directorio.campetrol[.]org Industry directory (Colombia) Loader host in the window
docmet-demo.pbminfotech[.]com Web agency demo site Loader and TDS hosts in the window
epicbh[.]org Behavioral health provider Single-use stage domain in the window
flushpersist[.]com Unknown Single-use stage domain in the window
gudog[.]com Pet services marketplace TDS host in the window
happyscootersmb[.]com Local rental business Loader host in the window
hotchocolate15k[.]com Running event Loader host in the window
iedcenter[.]org Education nonprofit Single-use stage domain in the window
inclima.optifysite[.]com Small business site Single-use stage domain in the window
indianacountyfair[.]com County fair Adjacent attacker domain in the window
internationallegalcouncil[.]com Legal association Single-use stage domain in the window
kennedyventuresok[.]com Business site Single-use stage domain in the window
meko-neukoelln[.]de Local business (Germany) TDS host and a single-use stage domain in the window
microvisione[.]com Business site (Italy) Loader and TDS hosts in the window
origin8lab[.]com Design / creative agency Loader host in the window
photc[.]org Health organization Loader host in the window
sound-obstacle[.]com Unknown Loader and TDS hosts in the window
tabberslichtdesign[.]nl Small business (Netherlands) Single-use stage domain in the window
tempatwisataseru[.]com Travel blog (Indonesia) Single-use stage domain in the window
thedandelionpub[.]com Local pub Loader and TDS hosts in the window
uneb[.]ac[.]ug Education board (Uganda) Loader and TDS hosts in the window
updatecurrent[.]com Unknown Single-use stage domain in the window
virtual-data[.]net Business site Loader host and an adjacent attacker domain in the window
westalabamaendo[.]com Medical practice TDS host in the window
wp.vormia[.]com WordPress site Loader and TDS hosts in the window
accordmedical[.]co[.]ke Medical supplier (Kenya) RPC burst only; no attacker infrastructure identified in the window
allergyasthmanetwork[.]org Health nonprofit RPC burst only
alsa[.]edu[.]in School (India) RPC burst only; seen on two hosts
ambazoniagov[.]org Political organization RPC burst only
bilxtra[.]no Auto parts retailer (Norway) RPC burst only
chevychasecosmeticcenter[.]com Medical practice RPC burst only
cralodas[.]com[.]ua Business site (Ukraine) RPC burst only
cyber234[.]com Unknown RPC burst only
danaguerin[.]blog Personal blog RPC burst only
dancethecuttingedge[.]com Dance studio RPC burst only
designerhome[.]no Retailer (Norway) RPC burst only
dogcarely[.]com Pet care blog RPC burst only
gilmangear[.]com Outdoor retailer RPC burst only
global-healthcare[.]co Healthcare site RPC burst only
hcj.zamfara[.]gov[.]ng Government (Nigeria) RPC burst only
helpeducationssd[.]org Education NGO (South Sudan) RPC burst only
maduraiarkayrocks[.]com Business site (India) RPC burst only
mit[.]edu[.]mm University (Myanmar) RPC burst only
opportunitiesforeveryone[.]net Jobs / scholarships listing RPC burst only
pgatbu[.]com[.]ng Association site (Nigeria) RPC burst only
propiedades[.]com Real estate portal (Mexico) RPC burst only; adjacent attacker domain on one host
safetygearstore[.]co[.]uk Retailer (UK) RPC burst only; seen repeatedly on one host
srdbijoux[.]fr Jewelry retailer (France) RPC burst only
unionjacksglenside[.]com Local pub RPC burst only; same window as thedandelionpub[.]com
zaksjerusalemgifts[.]com Online retailer RPC burst only
zzfittings[.]com Industrial supplier RPC burst only; seen repeatedly on one host

RPC endpoints observed

These are legitimate public services abused by the loader.

  • BSC testnet: bsc-testnet-rpc.publicnode[.]com, bsc-testnet.bnbchain[.]org, bsc-testnet.drpc[.]org, bsc-testnet-dataseed.bnbchain[.]org, data-seed-prebsc-1-s1.bnbchain[.]org, data-seed-prebsc-2-s1.bnbchain[.]org, bsc-prebsc-dataseed.bnbchain[.]org, data-seed-prebsc-1-s1.binance[.]org, data-seed-prebsc-2-s1.binance[.]org, bsc-testnet.public.blastapi[.]io, bsc-testnet.blockpi[.]network, bsc-testnet.4everland[.]org, bnb-testnet.api.onfinality[.]io
  • Sepolia: ethereum-sepolia-rpc.publicnode[.]com, sepolia.drpc[.]org
  • Polygon: polygon.drpc[.]org, polygon-bor-rpc.publicnode[.]com, polygon-public.nodies[.]app, polygon.gateway.tenderly[.]co, polygon-mainnet.public.blastapi[.]io, polygon.lava[.]build, rpc-mainnet.matic.quiknode[.]pro, polygon.rpc.subquery[.]network, api.zan[.]top, polygon-rpc[.]com, polygon-mainnet.gateway.tatum[.]io
  • Base: base.drpc[.]org, base.publicnode[.]com, base-rpc.publicnode[.]com, base.gateway.tenderly[.]co, base-mainnet.public.blastapi[.]io, mainnet.base[.]org
  • Multi-chain gateways: rpc.ankr[.]com, 1rpc[.]io, endpoints.omniatech[.]io

Supporting Indicator

  • ip-info.ff.avast[.]com: Legitimate Avast geolocation API documented in ClearFake’s browser-identification logic. A request within a suspicious testnet RPC burst window provides supporting context consistent with that behavior; it does not establish that a verification overlay appeared or that malicious execution followed.
Vanessa Joseph
Senior Consultant | Archive

Vanessa is a experienced cybersecurity professional who's passionate about cyber threat intelligence, threat hunting, and incident response. Her work focuses on proactive threat hunting and intelligence analysis to identify threats and strengthen detection and incident response capabilities.

She earned her B.A. in Administration of Justice and M.S. in Homeland Security with concentrations in Digital Forensics and Cybersecurity from Salve Regina University.

Richard Andrews
Sr. Consultant | Archive

Richard Andrews is a cybersecurity professional with experience across corporate consulting, security operations, and the federal government.

He specializes in cyber threat intelligence, threat detection, incident response support, and translating emerging threat activity into actionable insights that help organizations understand risk and strengthen defenses.

Richard currently focuses on operationalizing threat intelligence through research, threat hunting, detection development, and client guidance. He is especially passionate about making complex cyber threats understandable, practical, and useful for both technical teams and business leaders.

Richard attended Penn State University, where he majored in Security and Risk Analysis and is a proud Air Force veteran.

Kofi Atuobi
Sr. Consultant | Archive

Kofi holds a BS in Computer Science and a MS in Cyber Security. He is certified by CompTia in Security+, CySA+, and SSCP (Systems Security Certified Practitioner) and is currently pursuing his SANS GMON.

Kofi daily tasks include 24/7 monitoring and incident response for irregular events in corporate environments.

He serves as a Deputy Client Lead. His duties can include analyst training, analyst access management, proactive threat hunts, and tool engineering (CrowdStrike and Cylance) and develop procedures for a more efficient team and process.

Kofi has worked with clients across industries such as healthcare, pharmaceutical, and financial services.

Prior to joining SRA, Kofi worked as a Solutions Architect and Application Developer for finance and retail companies.