Subdomain takeover: el subdominio olvidado que se vuelve puerta de entrada
Ese promo.tuempresa.com que apagaste en 2022 todavía apunta a Heroku. Hoy cualquiera puede agarrarlo de vuelta — y mandar phishing con tu dominio.
promo.tuempresa.com se creó en 2022 para una campaña de Black Friday. Subió a Heroku, corrió un mes, nadie más lo miró. En 2023 el equipo apagó la app en Heroku — pero nadie borró el CNAME en DNS.
Hoy, el registro de DNS sigue diciendo "promo.tuempresa.com apunta a tuempresa-promo.herokuapp.com". Solo que ese nombre en Heroku está libre. Cualquiera puede crear una app con ese nombre exacto y, en segundos, promo.tuempresa.com responde con su contenido.
Eso es subdomain takeover. Barato de hacer, devastador de sufrir.
Por qué esto funciona
DNS apunta a servicios en la nube por nombre, no por IP. Cuando creás una app en Heroku, te da mi-app-piola.herokuapp.com. Vos agregás un CNAME promo.tuempresa.com → mi-app-piola.herokuapp.com. Todo funciona.
Cuando borrás la app, el nombre mi-app-piola.herokuapp.com vuelve al pool de nombres disponibles. Quien registre primero se lo queda. El CNAME en tu DNS sigue apuntando ahí — ahora fuera de tu control.
Mismo patrón en:
- AWS S3 (
bucket-name.s3.amazonaws.com) - GitHub Pages (
user.github.io) - Azure (
*.azurewebsites.net,*.cloudapp.net) - Vercel (
*.vercel.app) - Netlify (
*.netlify.app) - Fastly, Surge, Bitbucket, Tumblr, Shopify, Zendesk, Statuspage, Helpscout, Mailgun...
La lista es enorme. Cada servicio de "elegí un nombre único" más DNS-por-nombre es vulnerable.
Lo que el atacante hace después
No es solo "sitio vergonzoso en línea". Es mucho peor:
- Phishing firmado con tu marca. El cliente recibe un email "actualizá tu contraseña", el link apunta a
promo.tuempresa.com/login, parece legítimo (HTTPS válido, tu dominio). La conversión de phishing se dispara. - Robo de cookies. Si el dominio madre
tuempresa.comsetea cookies conDomain=.tuempresa.com, el subdominio comprometido lee esas cookies. Las sesiones de cliente se filtran. - Bypass de CORS. Tu API permite CORS para
*.tuempresa.com. Ahora el atacante tiene origen permitido para llamar tu API directo desde el navegador de la víctima. - Abuso de SEO. El atacante hostea contenido malicioso, hace backlinks en foros, contamina el ranking de marca de tu empresa.
- Distribución de malware. Un dominio con reputación positiva entrega payloads que los filtros corporativos dejan pasar.
Cómo saber si lo tenés
Manualmente
-
Listá todos los subdominios de tu empresa. Lookup activo:
dig +short any tuempresa.comDescubrimiento pasivo vía Certificate Transparency:
https://crt.sh/?q=%25.tuempresa.comcrt.shmuestra cada certificado SSL emitido bajo tu árbol — incluye subdominios olvidados que ni sabías que existían. -
Para cada uno, mirá el CNAME:
dig CNAME promo.tuempresa.com -
Accedé al destino. Si vuelve "No such app", "There isn't a GitHub Pages site here", "Repository not found", "NoSuchBucket", "404 Not Found · The requested URL was not found on this server", tenés candidato a takeover.
Fingerprints clásicos por proveedor
| Proveedor | Mensaje típico de posible takeover |
|---|---|
| Heroku | "No such app" |
| GitHub Pages | "There isn't a GitHub Pages site here." |
| AWS S3 | "NoSuchBucket" / "The specified bucket does not exist" |
| Azure | "404 Web Site not found. You may be seeing this error..." |
| Shopify | "Sorry, this shop is currently unavailable." |
| Fastly | "Fastly error: unknown domain" |
| Tumblr | "Whatever you were looking for doesn't currently exist at this address." |
¿Encontraste una de esas en tu dominio? Borrá el CNAME hoy.
La corrección es gratis y simple
No es parche. No es WAF. No es firewall. Es eliminar el registro DNS huérfano.
- Subdominio que ya no se usa: borrar el CNAME.
- Si todavía se usa: asegurate de que el destino vuelva a ser tuyo (reactivá la app en Heroku, recreá el bucket S3, etc.).
- Establecé proceso: el decommissioning de servicio debe incluir "borrar DNS" en el checklist. Casi nadie lo hace.
El problema es que nadie mira
Una empresa mediana tiene 50–300 subdominios. Nadie mantiene inventario actualizado. Marketing crea promo, lp, quiz, eventos. Producto crea staging, qa, legacy. RRHH crea vacantes. Todo disperso.
La defensa real es descubrimiento continuo + monitoreo de fingerprint:
- Listar subdominios nuevos todas las noches (DNS + CT logs).
- Para cada uno, hacer request HEAD/GET y clasificar la respuesta.
- Cuando aparezca fingerprint de takeover ("No such app", etc.), alerta crítica.
Dónde entra Sentinela
Monitoreamos el árbol de tu dominio principal y:
- Descubrimos subdominios nuevos vía DNS y Certificate Transparency
- Resolvemos cada uno y clasificamos el destino
- Marcamos takeover potencial cuando vemos fingerprint de proveedor abandonado
- Alertamos antes de que sea incidente
Es el tipo de hallazgo que el pentest anual casi nunca atrapa (porque el subdominio nace y muere entre dos pentests) y que la auditoría continua resuelve por diseño.
La regla simple
Un subdominio es como una llave de casa. No dejás una llave en una portería pública porque "nadie la va a agarrar". Pero en DNS sí lo hacés — porque es invisible. La diferencia es que el atacante ve mejor que vos las llaves colgadas en el muro.
Mapeá. Limpiá. Monitoreá. Es la defensa más barata que existe.
Descubre en 30 segundos lo que tu dominio está mostrando.
Comprobación pasiva, sin tocar tu servidor. Sale una nota y una lista de hallazgos por gravedad — y tú decides si quieres seguirlo cada mes.