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