Blog · 13 may 2026 · 5 min de lectura

Subdomain takeover: cómo un CNAME huérfano se convierte en un dominio hostil

Un subdominio que apunta por CNAME a un servicio SaaS retirado puede ser reclamado por cualquiera. El atacante hereda tu nombre, tu cert TLS válido y la confianza de tus usuarios. Cómo detectarlo y prevenirlo.

Un patrón que detectamos en muchos clientes durante recon: subdominios huérfanos que apuntan a servicios SaaS retirados. El equipo de marketing creó promo2024.cliente.cl apuntando a un sitio de campaña en Heroku, terminó la campaña, alguien borró la app — pero nadie tocó el DNS.

Resultado: un atacante crea una cuenta en Heroku, reclama exactamente el mismo nombre que tenía la app borrada, y ahora promo2024.cliente.cl resuelve a un servidor controlado por él. Con TLS válido. En tu zona.

A esto se le llama subdomain takeover, y es una vulnerabilidad de impacto alto que vive en el espacio entre “responsabilidad de DevOps” y “responsabilidad del equipo que usa el SaaS”. Por eso suele quedar sin dueño.

El mecanismo, paso a paso

  1. Tu zona DNS tiene un CNAME del tipo sub.cliente.cl. → algo.saas.com.
  2. El recurso en el SaaS se borra o expira (la app de Heroku, el bucket de S3, el sitio de Netlify, el subdomain de Shopify, etc.). El CNAME en tu zona queda apuntando a un nombre que ya no existe en ese SaaS.
  3. El SaaS permite “claim” del nombre: cualquier usuario puede crear un recurso nuevo con ese mismo subdomain interno. La mayoría de proveedores no valida que vos seas el dueño del CNAME que apunta hacia ahí.
  4. El atacante reclama el nombre. Su recurso ahora responde cuando alguien resuelve sub.cliente.cl → CNAME a algo.saas.com → el contenido del atacante.
  5. Heredás la URL completa: tu nombre, en tu dominio, con TLS válido (porque muchos SaaS proveen cert automático para el hostname configurado), con la confianza acumulada de la zona.

El atacante puede ahora:

Dónde pasa más seguido

Cualquier SaaS que use CNAME a hostnames internos y permita claim libre. La lista cambia con el tiempo — muchos proveedores arreglaron el bug exigiendo verificación de ownership — pero a 2026 los patrones más comunes siguen siendo:

Cada proveedor tiene un “fingerprint” — texto en la respuesta HTTP que indica “este nombre no está reclamado”. Por ejemplo, GitHub Pages devuelve "There isn't a GitHub Pages site here.", Heroku devuelve "No such app". Herramientas de detección como subjack y takeover usan exactamente esa lista.

Cómo verificás tu zona

Manual, para un subdominio puntual

# 1) ¿el sub tiene CNAME?
dig +short CNAME sub.cliente.cl

# 2) ¿resuelve a una IP?
dig +short A sub.cliente.cl

# 3) ¿qué responde el destino?
curl -sI https://sub.cliente.cl/
curl -s https://sub.cliente.cl/ | head -20

Las señales rojas:

A escala, para todo el dominio

Inventario de subdominios desde CT logs:

curl -s 'https://crt.sh/?q=%25.cliente.cl&output=json' \
  | jq -r '.[].name_value' \
  | tr ',' '\n' | sort -u > subs.txt

Después corrés algo como subjack contra esa lista. Lo importante: el inventario debe rehacerse seguido, porque CT logs solo te dan dominios que tuvieron cert TLS en algún momento, y los CNAME a SaaS típicamente disparan eso (los SaaS auto-provisionan TLS).

La parte que más cuesta: prevención

La detección es relativamente fácil. Lo difícil es que el patrón no reaparezca, y eso requiere disciplina organizacional, no técnica.

Regla operativa: DNS first on creation, DNS last on retirement

Inventario versionado

Tu zona DNS debería estar en git, o al menos exportarse periódicamente a un repo. Cualquier CNAME hacia un host externo necesita un comentario que diga para qué servicio es y quién lo creó. Si nadie reconoce el CNAME, candidato a borrar.

Verificación de ownership en el SaaS, cuando exista

Varios proveedores hoy permiten “domain verification” — un TXT record en tu zona que prueba que sos vos el dueño. Si el SaaS lo soporta, activalo. Eso bloquea el claim externo aunque el CNAME quede huérfano.

Monitoreo continuo, no auditoría puntual

Una auditoría manual cada 6 meses NO sirve. El CNAME huérfano puede aparecer mañana y ser reclamado pasado mañana. La detección efectiva es diaria, automatizada, con alerta al equipo de seguridad cuando aparece un nuevo huérfano.

Es exactamente el problema que nos llevó a construir el Dangling Monitor de Asentic — auto-descubre subdominios desde CT logs, clasifica cada uno en 5 estados (healthy, dangling-cname-nxdomain, dangling-cname-saas-claimable, dangling-ip-recycled, dangling-ns) y alerta cuando aparece uno nuevo o cuando uno existente cambia de estado. El servicio corre como monitoreo continuo con cadencia diaria y entrega los hallazgos por email.

Casos reales que vimos

Ofuscando contexto:

El patrón común: nadie sabía que el CNAME existía. No es un problema técnico, es un problema de inventario.

Cierre

Si tu zona DNS tiene más de 20 subdominios y nunca corriste un check de takeover, asumí que tenés al menos uno. La probabilidad sube con cada equipo que usa SaaS sin coordinación con seguridad — marketing, eventos, dev, customer success.

La detección manual te resuelve el problema de ahora. La detección continua te lo resuelve para siempre.

¿Quieres una segunda opinión sobre tu sitio?

Si lo que leíste te dejó preguntas sobre tu propio dominio, podemos partir conversando — sin compromiso.

Conversemos