Aller au contenu principal

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​