Une attaque invisible, voici ce que promet « Trojan Source », une technique découverte par des chercheurs de l’université de Cambridge. Elle cible les compilateurs et les environnements de développement en s’appuyant sur une faille dans Unicode. Cette norme permet aux ordinateurs d’échanger des informations indépendamment de la langue utilisée. Aujourd’hui, elle définit plus de 143 000 caractères dans 154 langues différentes.

La vulnérabilité se trouve plus exactement dans l’algorithme bidirectionnel ou Bidi d’Unicode, qui gère l’affichage des textes comprenant des écritures mixtes avec un ordre d’affichage différent. C’est le cas notamment de l’arabe qui se lit de droite à gauche. Mais « dans certains scénarios, l’algorithme Bidi n’est pas suffisant. On y ajoute alors des caractères de contrôle pour changer l’ordre d’affichage des groupes d’écriture », expliquent les chercheurs.

Des PoC sur plusieurs langages

Et c’est là que le bât blesse, il est possible d’intégrer dans ces caractères de contrôle des éléments malveillants. En effet, la plupart des compilateurs et interpréteurs ignorent ces caractères de contrôle, car ils provoquent des erreurs de syntaxe. Pour cela, les langages de programmation les placent dans des commentaires ou des chaînes de caractères. Et c’est là que les pirates peuvent placer du code malveillant qui passera sous le radar des compilateurs et interpréteurs, mais aussi de l’analyse humaine de code.

« En injectant des caractères Unicode Bidi dans les commentaires et les chaînes de caractères, un attaquant peut produire un code source syntaxiquement valide dans la plupart des langages modernes pour lesquelles l'ordre d'affichage des caractères présente une logique qui diverge de la logique réelle », soulignent les chercheurs. Pour appuyer leurs dires, ils ont publié des PoC d’attaques dans les langages de programmation C, C++, C#, JavaScript, Java, Rust, Go et Python.

Des mises à jour publiées

La publication de cette faille a été coordonnée avec 19 sociétés, dont beaucoup ont publié des mises à jour pour remédier à cette faiblesse dans les compilateurs, les interpréteurs, les éditeurs de code et les dépôts de code. Dans la foulée, deux CVE ont été émises à propos d’Unicode.

La première est répertoriée comme CVE-2021-42574 et vise l’algorithme bidirectionnel (Bidi) d’Unicode jusqu’à la version 14.0. L’autre est la CVE-2021-42694 portant sur des attaques via homoglyphe (utilisation de caractères visuellement similaires).