hunt-subdomain — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hunt-subdomain (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Subdomain takeover is high-value because it allows an attacker to serve content from a trusted, company-owned domain — bypassing browser same-origin trust, phishing filters, and user skepticism simultaneously.
Highest payout contexts:
new., preview., course., delivery., addons-preview.) — abandoned after feature launchesAsset types that matter most:
DNS signals:
CNAME pointing to *.github.io, *.gitlab.io, *.fastly.net, *.herokudns.com, *.wordpress.com, *.uservoice.com, *.zendesk.com, *.s3.amazonaws.com, *.azurewebsites.net, *.netlify.appSERVFAIL on the CNAME target while the parent record still existsHTTP response signals:
"There isn't a GitHub Pages site here""NoSuchBucket" (S3)"The specified bucket does not exist""No such app" (Heroku)"Sorry, this shop is currently unavailable" (Shopify)"This UserVoice subdomain is available""Do you want to register" (any domain parking page)"Fastly error: unknown domain"Tech stack signals:
X-Served-By: cache-* (Fastly), X-GitHub-Request-Id, Server: NetlifyCNAME chain resolving to provider infrastructure but returning provider 404*.fastly.net) rather than company domainsubfinder -d target.com -allamass enum -passive -d target.comassetfinder --subs-only target.comcrt.sh/?q=%.target.com cat subdomains.txt | dnsx -a -cname -o resolved.txtnuclei or subjack: subjack -w subdomains.txt -t 100 -timeout 30 -ssl -c fingerprints.json
nuclei -l subdomains.txt -t takeovers/dig CNAME subdomain.target.com — confirm CNAME existsdig A <cname-target> — confirm NXDOMAIN or no resolutioncurl -sk https://subdomain.target.com — check for provider error string<username>.github.io/<repo> or org page is unclaimedaws s3api create-bucket --bucket <bucketname>subdomain.target.comdomain=.target.com)?Bulk CNAME extraction and NXDOMAIN detection:
# Extract CNAMEs and check if target resolves
while read sub; do
cname=$(dig +short CNAME "$sub" | head -1)
if [ -n "$cname" ]; then
result=$(dig +short A "$cname")
if [ -z "$result" ]; then
echo "[POTENTIAL] $sub -> $cname (NXDOMAIN)"
fi
fi
done < subdomains.txtNuclei takeover scan:
nuclei -l subdomains.txt -t ~/nuclei-templates/http/takeovers/ -severity medium,high,criticalsubjack with SSL:
subjack -w subdomains.txt -t 100 -timeout 30 -ssl -c $GOPATH/src/github.com/haccer/subjack/fingerprints.json -vProvider fingerprint grep patterns:
curl -sk "https://$subdomain" | grep -iE \
"there isn't a github pages|no such bucket|no such app|this uservoice|fastly error: unknown domain|do you want to register|sorry, this shop|project not found|404 not found|unclaimed"Check if subdomain is in scope for cookies (shared parent domain):
curl -Isk "https://target.com" | grep -i "set-cookie" | grep "domain=.target.com"Fastly-specific detection:
curl -sI "https://subdomain.target.com" -H "Host: subdomain.target.com" | grep -i "fastly\|x-served-by\|x-cache"
curl -sk "https://subdomain.target.com" | grep -i "fastly error"S3 unclaimed bucket check:
aws s3api head-bucket --bucket <extracted-bucket-name> 2>&1 | grep -i "NoSuchBucket\|403\|404"GitLab Pages specific:
dig CNAME sub.target.com
# If pointing to *.gitlab.io — visit the gitlab.io URL directly
# 404 from gitlab.io project = claimablecourse., new., preview., beta. subdomains provisioned for a product launch, pointed at a third-party, then forgotten when the campaign ends.*.target.com pointing to a cloud provider means any unclaimed subdomain potentially resolves to claimable infrastructure.oberlo.com under Shopify) retain CNAMEs to services that are no longer paid for.Defense: Manual fingerprint review before publishing
Defense: Scope restrictions (only main domain in scope)
*.target.com wildcards often include subdomains implicitly. Escalate impact to get it in scope.Defense: "Can't reproduce" responses due to timing
Defense: HTTPS certificate mismatch blocking proof
Defense: Provider-side validation (Fastly verifying domain ownership)
Defense: Rate limiting on subdomain enumeration
Defense: Program claims "low severity / no impact"
postMessage targetOrigin checks in JS.Can you register the unclaimed resource (GitHub repo, S3 bucket, Heroku app, UserVoice account) and serve arbitrary content — including phishing pages, credential harvesters, or malicious scripts — under the target's trusted domain name?
Users lose trust and safety: they see a company-branded URL serving attacker content. The company loses brand integrity, potentially leaks session cookies if the subdomain is in domain=.target.com scope, and may have OAuth/SSO flows hijacked. Depending on CSP configuration, XSS against the main application may be possible.
dig CNAME subdomain.target.com → confirms CNAME to providercurl -sk https://subdomain.target.com → confirms provider error stringIf you cannot show the provider resource is currently unclaimed and claimable, it is not a valid report.
Scenario A — Trusted Brand Phishing via Abandoned SaaS (Snapchat/UserVoice) An attacker finds feedback.snapchat.com CNAME pointing to a UserVoice subdomain. The UserVoice account was cancelled but the DNS record remained. The attacker registers the matching UserVoice subdomain for free, gaining control of feedback.snapchat.com. Any user navigating to that URL — perhaps from old bookmarks or Google results — sees attacker-controlled content on a Snapchat-branded domain. Since the domain is trusted by browsers, phishing campaigns sent from this subdomain bypass email security filters that check domain reputation.
Scenario B — CDN Origin Takeover Enabling Same-Origin Attacks (Mozilla/Fastly) addons-preview-cdn.mozilla.net had a CNAME pointing to a Fastly origin hostname that was no longer registered to Mozilla's Fastly account. An attacker could create a Fastly service claiming that origin hostname, causing all requests to addons-preview-cdn.mozilla.net to be routed to attacker-controlled Fastly infrastructure. Since the subdomain shares the mozilla.net domain, it could be leveraged to serve malicious CDN assets that appear to come from Mozilla's infrastructure, potentially bypassing CSP rules that allowlist *.mozilla.net.
Scenario C — Staging Subdomain Abandoned Post-Product Migration (Rails/GitHub Pages) new.rubyonrails.org was pointed at a GitHub Pages deployment for a website redesign project. After the new site launched and the old GitHub repo was deleted or made private, the DNS CNAME remained. An attacker could fork or create a matching GitHub Pages repository and claim the namespace, serving content under new.rubyonrails.org. Because this is the official Ruby on Rails domain, any content served there — including fake download links or malicious gems — carries the full trust of the Rails brand.
hunt-subdomain → unclaimed CNAME points to bucket → claim bucket name → full subdomain control.redirect_uri host = persistent ATO across the entire SSO surface. Chain primitive: Subdomain takeover at auth.target.com + OAuth redirect_uri allowlist → auth code theft → ATO every user that re-authenticates.*.target.com with credentials → credentialed cross-origin API read → mass IDOR.feedback.target.com + cookie scope .target.com → JS hosted on takeover host reads main-app cookies → session hijack.subzy/subjack automation patterns.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.