La normalisation Unicode conduit à la prise de contrôle de compte
Bonjour à tous,
J'ai trouvé une faille qui me permettait d'accéder aux comptes utilisateurs en utilisant la normalisation Unicode lors de mon analyse de sécurité de l'application web.
Résumé:
Une vulnérabilité de sécurité du système qui permet aux attaquants d'effectuer une attaque de prise de contrôle de compte. Le problème résulte de l'absence de tests de normalisation Unicode suffisants du système. Les attaquants peuvent profiter de cette faille pour contourner les mesures de sécurité et obtenir un accès non autorisé aux comptes d'utilisateurs.
Qu'est-ce qu'un caractère Unicode ?
Unicode est un jeu de caractères universel ou une norme qui définit tous les caractères requis pour écrire la majorité des langues vivantes utilisées sur les ordinateurs en un seul endroit.
Il aspire à être, et est déjà dans une large mesure, un sur-ensemble de tous les autres jeux de caractères codés.
Détails de la vulnérabilité :
La faille réside dans la procédure de normalisation Unicode du système.
La normalisation Unicode est le processus de normalisation des représentations distinctes du même caractère afin d'éliminer les problèmes tels que de nombreux encodages de caractères pour le même caractère.
Étant donné que le système n'exécute pas suffisamment de vérifications de normalisation Unicode sur les entrées utilisateur, les attaquants peuvent tirer parti de cette faille.
Les attaquants peuvent entrer une chaîne Unicode spécialement construite qui ressemble à la chaîne légale mais contient des caractères Unicode différents.
Le système est incapable de différencier les deux chaînes, ce qui permet à l'attaquant de contourner la sécurité et d'accéder au compte de la victime.
Étapes à reproduire :
- Créez un compte sur le site Web avec une adresse e-mail contenant des caractères Unicode. Par exemple, utilisez une adresse e-mail comme « té [email protected] » au lieu de « [email protected] ».
3. À l'aide d'un langage de programmation prenant en charge la normalisation Unicode (tel que Python), effectuez une normalisation Unicode sur l'adresse e-mail à l'aide d'un formulaire de normalisation différent du formulaire utilisé par le site Web. Par exemple, utilisez le formulaire de normalisation NFKD au lieu du formulaire de normalisation NFC.
4. Utilisez l'adresse e-mail normalisée pour vous reconnecter au compte. Cette fois, la tentative de connexion devrait réussir même si l'adresse e-mail a été modifiée par le processus de normalisation.
5. Si la tentative de connexion réussit, l'attaquant a réussi à prendre le contrôle du compte de l'utilisateur.
6. L'attaquant peut désormais accéder aux informations personnelles de la victime, aux détails de paiement et à d'autres données sensibles.
Preuve de concept :
- Créer un compte avec une adresse e-mail contenant des caractères Unicode
2. Effectuez une normalisation Unicode sur l'adresse e-mail
normalized_email = unicodedata.normalize('NFKD', email)
import unicodedata
email = "té[email protected]"
# Normalize the email address using NFKD
normalized_email = unicodedata.normalize('NFKD', email)
print(normalized_email)
3. Connectez-vous avec l'adresse e-mail normalisée
data = {"email": normalized_email, "password": mot de passe} réponse = demandes.post("https://example.com/api/login", json=données)
4. Le système authentifie le compte avec succès
assert response.status_code == 200
Recommandation:
Tous les caractères Unicode saisis par les utilisateurs doivent être vérifiés par le site Web et ceux qui sont interdits doivent être rejetés.
Le problème peut être réduit en implémentant une liste blanche de caractères Unicode autorisés et de formulaires de normalisation.
L'ajout d'une authentification à deux facteurs et la surveillance des comportements de connexion inhabituels peuvent également empêcher l'accès illégal aux comptes d'utilisateurs.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































