HTTP : contourner une restriction par User-Agent
Certains serveurs restreignent l’accès à des ressources selon le navigateur ou le client détecté dans la requête. Cette détection repose sur l’en-tête User-Agent, modifiable librement par le client.
Anatomie d’un User-Agent
Section titled “Anatomie d’un User-Agent”Un User-Agent est une chaîne de texte envoyée dans chaque requête HTTP. Elle identifie le logiciel client : navigateur, version, système d’exploitation, moteur de rendu.
Exemple pour Chrome 120 sur Windows :
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36Décomposé :
| Segment | Signification |
|---|---|
Mozilla/5.0 | Token historique présent dans presque tous les User-Agents modernes pour des raisons de compatibilité |
(Windows NT 10.0; Win64; x64) | Système d’exploitation et architecture |
AppleWebKit/537.36 | Moteur de rendu (WebKit, base de Chromium) |
(KHTML, like Gecko) | Mention de compatibilité héritée de Gecko (Firefox) |
Chrome/120.0.0.0 | Navigateur et version réels |
Safari/537.36 | Token de compatibilité Safari, présent dans tous les navigateurs Chromium |
D’autres exemples courants :
# Firefox sur LinuxMozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0
# Safari sur macOSMozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15
# Googlebot (robot d'indexation Google)Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
# curl par défautcurl/8.5.0Cas d’usage côté serveur
Section titled “Cas d’usage côté serveur”Un filtrage par User-Agent peut s’appliquer pour :
- Bloquer les bots et scrapers (détection de
curl,python-requests,wget…) - Restreindre l’accès à certains navigateurs ou versions
- Servir un contenu différent selon le type de client (mobile, desktop, bot d’indexation)
- Donner accès à une interface d’administration uniquement depuis un navigateur interne
Exploitation
Section titled “Exploitation”Forger le User-Agent avec curl
Section titled “Forger le User-Agent avec curl”L’option -A de curl remplace le User-Agent par défaut :
# Se faire passer pour Chrome sur Windowscurl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" https://exemple.com/ressource
# Se faire passer pour Firefox sur Linuxcurl -A "Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0" https://exemple.com/ressource
# Se faire passer pour Googlebot pour accéder à du contenu réservé aux moteurs de recherchecurl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://exemple.com/ressource
# Supprimer complètement le User-Agentcurl -A "" https://exemple.com/ressourceModifier le User-Agent dans les DevTools
Section titled “Modifier le User-Agent dans les DevTools”Dans les DevTools du navigateur (F12) → onglet Network conditions (Chrome) ou Paramètres réseau (Firefox) : un champ permet de définir un User-Agent personnalisé sans quitter le navigateur.
Dans Chrome :
- Ouvrir les DevTools
- Menu trois points → More tools → Network conditions
- Décocher Use browser default
- Saisir le User-Agent souhaité
Via un proxy d’interception (Burp Suite)
Section titled “Via un proxy d’interception (Burp Suite)”Intercepter la requête et modifier l’en-tête directement dans le proxy avant de la transmettre au serveur :
GET /admin HTTP/1.1Host: exemple.comUser-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)Ce qu’on cible
Section titled “Ce qu’on cible”Selon le contexte, tester plusieurs catégories de User-Agents :
| Catégorie | Objectif |
|---|---|
| Navigateurs desktop courants | Contourner un blocage des clients non-navigateurs |
| Googlebot / Bingbot | Accéder à du contenu réservé aux robots d’indexation |
| Navigateurs mobiles | Accéder à une interface mobile différente de la desktop |
| User-Agent vide ou invalide | Tester le comportement par défaut du serveur |
| Clients internes | Si un pattern est identifiable dans les sources (ex. InternalBrowser/1.0) |
Remédiation
Section titled “Remédiation”Le User-Agent est un en-tête que le client contrôle entièrement. Il ne constitue pas un mécanisme d’authentification ou d’autorisation.
- Ne pas utiliser le User-Agent comme contrôle d’accès : utiliser des sessions authentifiées, des tokens, ou des certificats clients
- Si le filtrage par User-Agent sert à bloquer des bots, le compléter avec des mécanismes côté serveur : rate limiting, analyse comportementale, CAPTCHA
- Pour restreindre l’accès à des interfaces d’administration, utiliser un VPN ou une liste d’IPs autorisées au niveau réseau, pas un contrôle applicatif basé sur des en-têtes HTTP
À retenir
Section titled “À retenir”Le User-Agent est une valeur déclarative : le client annonce ce qu’il est, rien ne le contraint à dire la vérité. Tout filtrage de sécurité qui repose sur cet en-tête peut être contourné en trente secondes avec curl -A.