10. Considérations de sécurité
Les implémenteurs d'UTF-8 doivent prendre en considération les aspects de sécurité liés à la manière dont ils traitent les séquences UTF-8 illégales. Il est concevable que, dans certaines circonstances, un attaquant parvienne à exploiter un analyseur UTF-8 imprudent en lui envoyant une séquence d'octets non autorisée par la syntaxe UTF-8.
Attaque par codage trop long (overlong)
Une forme particulièrement subtile de cette attaque peut être menée contre un analyseur qui effectue des contrôles de validité critiques pour la sécurité sur la forme codée en UTF-8 de son entrée, mais qui interprète certaines séquences d'octets illégales comme des caractères.
Exemple 1 : caractère NUL
Par exemple, un analyseur pourrait interdire le caractère NUL lorsqu'il est codé sous la forme de la séquence d'un seul octet 00, mais autoriser à tort la séquence illégale de deux octets C0 80 et l'interpréter comme un caractère NUL.
Exemple 2 : traversée de chemin
Un autre exemple serait un analyseur qui interdit la séquence d'octets 2F 2E 2E 2F (« /../ ») mais autorise la séquence d'octets illégale 2F C0 AE 2E 2F.
Impact réel
Cette dernière technique a effectivement été utilisée par un virus largement répandu qui a attaqué des serveurs Web en 2001 ; la menace pour la sécurité est donc bien réelle.
Risque de dépassement de tampon
Un autre problème de sécurité se pose lors du codage en UTF-8 : la description d'UTF-8 dans la norme ISO/IEC 10646 autorise le codage de numéros de caractère allant jusqu'à U+7FFFFFFF, produisant des séquences pouvant atteindre 6 octets.
Il existe par conséquent un risque de dépassement de tampon si :
- La plage des numéros de caractère n'est pas explicitement limitée à U+10FFFF
- Le dimensionnement des tampons ne tient pas compte de la possibilité de séquences de 5 et 6 octets
Problèmes d'équivalence canonique
La sécurité peut également être affectée par une caractéristique de plusieurs codages de caractères, dont UTF-8 : la « même chose » (du point de vue de la perception de l'utilisateur) peut être représentée par plusieurs séquences de caractères distinctes.
Exemple : caractères accentués
Par exemple, un e accent aigu peut être représenté par :
- Le caractère précomposé U+00E9 E ACUTE
- La séquence canoniquement équivalente U+0065 U+0301 (E + COMBINING ACUTE)
Implications pour la sécurité
Bien qu'UTF-8 fournisse une séquence d'octets unique pour chaque séquence de caractères, l'existence de plusieurs séquences de caractères pour la « même chose » peut avoir des conséquences en matière de sécurité chaque fois que sont mises en jeu :
- La comparaison de chaînes
- L'indexation
- La recherche
- Le tri
- La correspondance par expressions régulières
- Les opérations de sélection
Exemple de scénario d'attaque
Un exemple serait la comparaison de chaînes entre un identifiant figurant dans un justificatif d'identité et les entrées d'une liste de contrôle d'accès.
Normalisation Unicode
Ce problème peut être traité au moyen de solutions fondées sur les formes de normalisation Unicode ; voir [UAX15].
Les formes de normalisation fournissent des représentations canoniques garantissant que des caractères équivalents se comparent comme égaux.
Liens connexes
- Précédent : 9. Considérations IANA
- Retour à l'accueil RFC 3629
- Suivant : 11. Remerciements