DEPLOYMENT_NOT_FOUND is a fingerprint, not a confirmed takeover - the team-verification gate decides claimabilityBanked: 2026-06-12 Source: Elastic (HackerOne public bounty) passive subdomain-takeover recon, lane = web2-sprawl-enterprise Class: subdomain-takeover / SaaS-dangling-domain triage
A subdomain CNAME'd to cname.vercel-dns.com (or A to a Vercel edge IP) that returns:
- port 80: 308 Permanent Redirect, server: Vercel (Vercel recognizes the Host)
- port 443: HTTP 404, server: Vercel, x-vercel-error: DEPLOYMENT_NOT_FOUND
- frequently an EXPIRED Let's Encrypt cert (Vercel stops renewing once the deployment is deleted -> expiry date marks roughly when it was abandoned)
is the Vercel dangling-domain FINGERPRINT. It is necessary but NOT sufficient for takeover.
Vercel only lets a new project attach a custom domain if that hostname (and/or its apex) is NOT already verified to another Vercel team. Two sub-cases:
host as a custom domain to their own project and serve content. Real takeover.elastic.dev) is still verified to the owner's Vercel team -> Vercel rejects "domain already in use." Same DEPLOYMENT_NOT_FOUND page, but ZERO takeover. This is the common false-positive.DEPLOYMENT_NOT_FOUND alone CANNOT distinguish these two. The expired-cert + DEPLOYMENT_NOT_FOUND combo is suggestive of abandonment but does not resolve the apex-verification question.
docs.elastic.dev returned 401 deployment-protection = healthy). If a sibling is clearly claimed and healthy, the apex is plausibly still team-verified -> downgrade confidence on claimability.*.elastic.dev staging/docs path = Medium at most (phishing/content-injection under a trusted host). An auth/login/api/admin-labelled host on the same fingerprint would rank higher.x-statuspage-version present = claimed) and the Firebase rule (anycast + "Site Not Found" = candidate): same principle - the provider error page is a FINGERPRINT, and a second provider-specific gate (team-verification / project-attach) decides real claimability. Vercel's gate is apex team-verification.*.elastic.dev (dev/docs brand) staging, not the primary *.elastic.co product surface.demos.swiftype.com -> DigitalOcean IP, HTTP:000) is NOT a SaaS-claim vector (no provider to claim through). Note, do not stage as takeover.