Marques de directionnalité d'Unicode

Une vulnérabilité liée à l’Unicode affecterait la plupart des compilateurs de code source

Des chercheurs de l’Université de Cambridge ont découvert un bogue de sécurité qui affecterait la plupart des compilateurs de code, et de nombreux environnements de développement.

Unicode, le standard d’encodage des caractères qui remplace de plus en plus souvent les anciens, tels que l’ASCII, du fait de sa capacité à représenter les textes dans toutes les langues, serait en cause.

Ou du moins, son algorithme « Bidi », qui gère l’affichage de texte bidirectionnel, soit le mélange de texte s’écrivant de gauche à droite, à du texte s’écrivant de droite à gauche.

Dans certains cas, cet algorithme ne doit pas tenir compte du sens d’écriture par défaut, et inverser l’ordre des caractères d’un groupe de mots, grâce à des caractères de contrôle, les marques directionnelles, pour imposer un sens d’écriture.

Ce changement d’ordre change l’ordre attendu des octets sous-jacents, ce qui permet de cacher du code malveillant.

Une particularité qui a déjà été exploitée afin de cacher l’extension réelle de fichiers attachés à des courriels, afin de disséminer des logiciels malveillants.

Or, la plupart des langages de programmation autorisent l’introduction de ces marques de directionnalité dans des lignes de commentaires, tout comme l’utilisation de chaînes de caractères arbitraires, y compris des caractères de contrôle. Dans les deux cas, les interpréteurs et les compilateurs ne les analysent pas.

On peut dès lors intégrer du code malveillant dans un fichier de code source qui apparaît inoffensif.

La menace est d’autant plus grande pour des projets comme Linux et Webkit, qui acceptent les contributions de code de n’importe qui, à partir du moment où il a été étudié manuellement.

De plus, les marques bidirectionnelles sont conservées par couper-coller. Un développeur pourrait introduire du code malveillant dans un projet en copiant et collant quelques lignes de code d’un extrait sur la toile.

Les chercheurs ont offert aux organisations concernées un embargo de 99 jours sur la divulgation de leur découverte. Seuls neuf des dix-neuf éditeurs de logiciels contactés ont promis de développer des correctifs de sécurité.

Il semble que, d’un côté, les preuves d’existences du bogue en C, C++, C#, JavaScript, Java, Rust, Go, et Python, ne convainquent pas tout le monde, et de l’autre, que le potentiel néfaste de ces marques de directionnalité d’Unicode est déjà connu depuis une vingtaine d’années, et sans doute jugé inoffensif.

On ne sait pas si les chercheurs ont étudié le cas des langues asiatiques qui peuvent s’écrire de haut en bas comme de bas en haut.

L’étude Trojan Source : Invisible Vulnerabilities, est téléchargeable sur la toile au format PDF, on l’espère, sans vulnérabilité cachée.