Takeover risk

Heroku subdomain takeover.

A subdomain still pointing at a Heroku account that no longer exists is not untidy. It is claimable.

What it looks like

A subdomain on your domain has a CNAME record pointing at appname.herokuapp.com or a herokudns.com target, and loading that subdomain returns Heroku's unclaimed page rather than a working site. The visible signature is a page containing text along the lines of "No such app".

Both signals are needed. A CNAME pointing at Heroku is completely normal when the service is in use. It only matters when the target is no longer claimed.

Why it can be taken over

Heroku app names are released when an app is deleted and can be created again by any account. A subdomain pointing at a deleted app can be captured by creating an app with the same name.

What an attacker gets

  • Content served from your subdomain, on your domain, usually with a valid certificate that Heroku issues automatically.
  • A phishing address that passes every check a cautious person would run, because it genuinely is your domain.
  • Access to any cookie your main site scopes to the parent domain, which can include session data.

How to fix it

Delete the DNS record. If the app still exists but was renamed, update the record to the new target rather than leaving the old one.

The full removal steps for any provider are in the dangling record guide.

Stopping the next one

These appear whenever a hosted service is trialled and dropped, so a single cleanup does not settle it. The habit worth building is deleting the DNS record in the same sitting as the cancellation, because those are separate actions and only one of them is on anyone's mind.

Related

Check yours

See whether anything on your domain points nowhere.

The free subdomain check finds every name still resolving and confirms which targets are unclaimed.

Other services with the same risk

Each has its own detection signature and removal steps.

Netlify · Firebase Hosting · Webflow · Kajabi · GitLab Pages · Pantheon

All 24 in this set