Auditing DNS after decommissioning a service
Deleting the cloud resource without deleting the DNS record is the exact sequence that creates the vulnerability, and it happens on every cleanup.
Inspects DNS CNAME records for dangling pointers to unclaimed cloud services (AWS S3, GitHub Pages, Vercel, Azure) to prevent subdomain takeover.
—Inspects DNS CNAME records for dangling pointers to unclaimed cloud services (AWS S3, GitHub Pages, Vercel, Azure) to prevent subdomain takeover.
Domain: assets.example.com, CNAME: my-bucket.s3.amazonaws.com
Status: VULNERABLE (CRITICAL) · Fingerprint: NoSuchBucket · Provider: Amazon Web Services (S3)
Action needed: Claim the S3 bucket or remove the DNS CNAME record immediately.
An assessment of whether a subdomain's DNS pointer can be hijacked by unauthorized third parties.
Your input is sent to YAS infrastructure because the tool requires server-side processing or public network queries. Input is not stored.
curl -X POST "https://yas.sh/api/v1/tools/dangling-cname-checker" \
-H "Content-Type: application/json" \
-d '{"domain":"assets.example.com","cnameTarget":"my-bucket.s3.amazonaws.com"}'const res = await fetch("https://yas.sh/api/v1/tools/dangling-cname-checker", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"domain": "assets.example.com",
"cnameTarget": "my-bucket.s3.amazonaws.com"
}),
});
const data = await res.json();import requests
r = requests.post("https://yas.sh/api/v1/tools/dangling-cname-checker", json={"domain":"assets.example.com","cnameTarget":"my-bucket.s3.amazonaws.com"})
data = r.json()| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | Yes | Domain name |
| cnameTarget | string | No | Optional CNAME target hostname |
{ "slug": "dangling-cname-checker", "isDangling": false, "riskLevel": "SAFE" }Inspect DNS CNAME records for dangling pointers to S3, GitHub and Vercel.
400 VALIDATION_ERROR — invalid input or unsupported option.413 PAYLOAD_TOO_LARGE — input exceeds the 64 KB limit.429 RATE_LIMIT_EXCEEDED — rate limit exceeded (60 req/min).Subdomain takeover happens when a DNS record points at a third-party service that no longer claims the name. The classic pattern is a CNAME to a cloud provider — an S3 bucket, a Heroku app, a GitHub Pages site, a Vercel or Azure endpoint — that has since been deleted. The DNS record survives the resource, and anyone who can register that resource name on the same platform then controls content served at your subdomain.
Detection resolves the CNAME chain to its target and looks for provider-specific fingerprints in the response: the distinctive 404 body S3 returns for a missing bucket, GitHub Pages' unclaimed-domain page, Heroku's no-such-app response. Each platform has its own signature, and each has its own claim policy — some now require domain verification, which closes the vulnerability, while others still allow first-come registration.
Deleting the cloud resource without deleting the DNS record is the exact sequence that creates the vulnerability, and it happens on every cleanup.
Domains obtained through acquisition carry years of records for services nobody currently operates or remembers.
Subdomain takeover is among the most commonly reported findings. Verifying the fingerprint confirms whether it is genuinely claimable.
In an organisation where many teams create records, periodic scanning is the only way to keep pace with decommissioning.
What this tool deliberately does not do, and where it will disagree with other implementations.