Vulnérabilités d'authentification¶
L'authentification est le mécanisme qui confirme qu'un utilisateur est bien celui qu'il prétend être. Comme elle constitue souvent la première barrière protégeant un compte, ses failles ont un impact direct : elles permettent de prendre le contrôle de comptes, parfois en masse. Cette section couvre les faiblesses les plus exploitées, autour du brute-force et de la réinitialisation de mot de passe.
Techniques de brute-force¶
Le brute-force consiste à tester un grand nombre de combinaisons pour deviner un identifiant ou un mot de passe. Plusieurs faiblesses courantes le facilitent ou le rendent possible malgré des protections apparentes.
Contourner les limites par adresse IP¶
Quand l'application limite les tentatives par adresse IP, l'en-tête X-Forwarded-For permet souvent de contourner cette restriction, l'application s'y fiant pour déterminer l'IP d'origine. En faisant varier sa valeur à chaque tentative — typiquement via une attaque Pitchfork dans Burp Intruder — on simule autant d'adresses différentes :
Réinitialiser le compteur d'échecs¶
Sur certaines applications, réussir une connexion — même sur un autre compte que l'on contrôle — réinitialise le compteur de tentatives erronées du compte ciblé. La technique consiste à intercaler une connexion valide toutes les une ou deux tentatives incorrectes, ce qui évite le verrouillage. Dans Burp, il faut alors configurer une seule requête concurrente dans le Resource Pool, faute de quoi plusieurs tentatives erronées peuvent partir simultanément et déclencher malgré tout le verrouillage.
Énumérer les noms d'utilisateur valides¶
Une application réagit parfois différemment selon qu'un nom d'utilisateur est valide ou non, indépendamment du mot de passe. Plusieurs indicateurs trahissent cette différence : un temps de réponse plus long pour un identifiant valide (l'application allant alors jusqu'à vérifier le mot de passe), un message d'erreur subtilement distinct, ou un comportement réseau différent. Repérer ces écarts permet d'établir une liste d'identifiants valides avant de lancer le brute-force des mots de passe, ce qui réduit considérablement l'espace de recherche.
Abus de la réinitialisation de mot de passe¶
La fonctionnalité de réinitialisation est une cible privilégiée, car elle génère un jeton qui donne, le temps de sa validité, un contrôle total sur le compte.
Exfiltration du jeton via X-Forwarded-Host¶
Lorsque l'application construit le lien de réinitialisation à partir d'un en-tête d'hôte contrôlable, on peut détourner ce lien vers un serveur que l'on contrôle. La méthode : déclencher une demande de réinitialisation pour la victime, intercepter la requête qui génère le jeton, et y ajouter un en-tête X-Forwarded-Host pointant vers son propre serveur :
L'application génère alors un lien de réinitialisation contenant le domaine de l'attaquant. Quand la victime — ou un système automatique — suit ce lien, le jeton est transmis au serveur contrôlé, qui peut alors réinitialiser le mot de passe à la place de la victime. À noter : cet en-tête ne doit pas inclure le schéma (https://), seulement le nom d'hôte.
Aide-mémoire¶
| Faille | Approche |
|---|---|
| Limite par IP | Faire varier X-Forwarded-For (Pitchfork) |
| Verrouillage de compte | Intercaler une connexion valide ; une seule requête concurrente |
| Énumération d'identifiants | Écarts de temps de réponse, de message ou de comportement |
| Réinitialisation détournée | X-Forwarded-Host vers un serveur contrôlé |
Au-delà de ces techniques, toute incohérence entre la réponse à un identifiant valide et celle à un identifiant invalide est un signal à explorer : c'est souvent le premier fil à tirer dans un test d'authentification.