Des chercheurs de l’université de Cambridge ont découvert un bogue qui affecte la plupart des compilateurs de code informatique et de nombreux environnements de développement de logiciels. La vulnérabilité concerne un composant de la norme de codage de texte numérique Unicode, qui permet aux ordinateurs d’échanger des informations indépendamment du langage utilisé. Précisément, elle concerne l’algorithme bidirectionnel ou « Bidi » d’Unicode, qui gère l’affichage de textes comprenant des écritures mixtes avec des ordres d’affichage différents, comme l’anglais et l’arabe – qui se lit de droite à gauche.
Unicode, officiellement la norme Unicode, est un standard informatique pour l’encodage, la représentation et la manipulation cohérents de textes exprimés dans la plupart des systèmes d’écriture du monde. La norme, qui est maintenue par le Consortium Unicode, définit actuellement 144 697 caractères couvrant 159 écritures modernes et historiques, ainsi que des symboles, des emoji et des codes de contrôle et de formatage non visuels. Mais une nouvelle étude a révélé que la norme contient une vulnérabilité qui pourrait (dans le pire des cas) entraîner des attaques à grande échelle de la chaîne d’approvisionnement.
La faille en question a été découverte par des chercheurs de l’université de Cambridge, en Angleterre, qui l’ont appelée la vulnérabilité « Trojan Source ». Trojan Source repose sur l’utilisation de caractères de contrôle bidirectionnels dans les commentaires du code source. Aussi connus sous le nom de caractères BiDi, ces caractères de contrôle Unicode sont utilisés dans une ligne de texte pour signaler le passage d’un mode LTR (gauche à droite) à un mode RTL (droite à gauche) ou vice versa. Dans la pratique, ces caractères sont en effet destinés uniquement aux applications logicielles et sont invisibles à l’œil humain.
Ils ne sont utilisés que pour intégrer du texte dans un sens de lecture différent à l’intérieur de grands blocs de texte (comme l’insertion de chaînes arabes ou hébraïques dans de grands blocs de texte latin). L’équipe de recherche a déclaré avoir découvert que la plupart des compilateurs et éditeurs de code ne disposent pas de protocoles permettant de gérer les caractères BiDi ou de signaler leur présence dans les commentaires du code source. Les chercheurs ont déclaré que les attaquants pourraient insérer des caractères de contrôle BiDi à l’intérieur des commentaires que les réviseurs humains ne pourront pas voir.
« Vous pouvez les [les caractères BiDi] utiliser dans un code source qui semble inoffensif pour un examinateur humain et qui peut en fait faire quelque chose de méchant », a déclaré Ross Anderson, professeur de sécurité informatique à Cambridge et co-auteur de l’étude, dans un billet de blogue publié lundi. « C’est une mauvaise nouvelle pour des projets comme Linux et Webkit qui acceptent des contributions de personnes aléatoires, les soumettent à un examen manuel, puis les incorporent dans du code critique. Cette vulnérabilité est, pour autant que je sache, la première à affecter presque tout », a-t-il ajouté.
Ainsi, une fois compilés, ces caractères déplaceront le texte du champ de commentaire dans le code exécutable ou déplaceront le code (lié à la sécurité) dans une section commentée, ouvrant les applications aux attaques ou annulant les contrôles de sécurité. « Nous avons vérifié que cette attaque fonctionne contre C, C++, C#, JavaScript, Java, Rust, Go et Python, et nous soupçonnons qu’elle fonctionnera contre la plupart des autres langages modernes », explique Anderson. Selon lui, une telle attaque pourrait être difficile à détecter pour un examinateur de code humain, car le code source rendu semble parfaitement acceptable.
En plus des compilateurs de code, Anderson et son collègue Nicholas Boucher ont déclaré que de nombreux éditeurs de code et services d’hébergement de code source étaient également vulnérables [voir tableau ci-dessous]. En tant que tel, Trojan Source pourrait hypothétiquement être utilisé par les acteurs malveillants pour lancer des attaques à grande échelle de la chaîne d’approvisionnement. De telles attaques, comme la récente campagne de SolarWinds, impliquent le déploiement silencieux de programmes malveillants dans des logiciels afin de compromettre les systèmes et réseaux de cibles spécifiques.
En théorie, les pirates pourraient utiliser cet exploit pour encoder des vulnérabilités dans des écosystèmes logiciels entiers, ce qui leur permettrait d’être utilisés pour des piratages plus ciblés. Ainsi, les chercheurs indiquent que la vulnérabilité constitue « une menace immédiate ». Outre l’attaque liée aux caractères BiDi, les deux chercheurs ont également découvert que les compilateurs de code source étaient également vulnérables à un deuxième problème, connu sous le nom d’attaque par homoglyphe – où les lettres latines classiques sont remplacées par des caractères similaires provenant d’autres ensembles de la famille Unicode (alphabets).
Les chercheurs ont déclaré que cette deuxième attaque pouvait être utilisée pour créer deux fonctions différentes qui semblent identiques aux yeux d’un réviseur de code humain, mais qui sont en réalité différentes l’une de l’autre. Selon l’équipe, un attaquant pourrait utiliser une dépendance ou un plug-in pour définir la fonction homoglyphe en dehors de la base de code principale de l’application et ajouter du code malveillant à un projet à l’insu du responsable.
Étant donné que la plupart des processus de codage actuels reposent sur les contributions d’une équipe de plusieurs développeurs, l’équipe de recherche a fait valoir qu’il était important que les compilateurs et les éditeurs de code détectent les caractères BiDi et les homoglyphes et signalent aux réviseurs de code humains que des glyphes Unicode non standard sont utilisés dans le code source – généralement écrit dans le jeu de caractères latins.
Les deux chercheurs ont déclaré avoir donné à toutes les parties concernées un délai de 99 jours pour corriger les deux attaques dans leurs outils avant de publier les détails de l’attaque Trojan Source lundi. Le document suggère de mettre en œuvre diverses nouvelles protections visant spécifiquement à défendre les compilateurs comme moyen d’écarter ce nouveau problème majeur. Quelques heures après, l’équipe à l’origine du compilateur officiel du langage Rust a publié une mise à jour de sécurité pour corriger les deux attaques – identifiées comme CVE-2021-42574 (l’attaque utilisant les caractères BiDi) et CVE-2021-42694 (l’attaque utilisant les homoglyphes).
D’autres corrections sont attendues dans les jours à venir. « Avant de lire cet article, l’idée qu’Unicode puisse être exploité d’une manière ou d’une autre ne m’aurait pas surpris », a déclaré Matthew Green, professeur associé à l’Institut de sécurité informatique Johns Hopkins. « Ce qui me surprend, c’est le nombre de compilateurs qui analysent joyeusement l’Unicode sans aucune défense, et l’efficacité de leur technique d’encodage de droite à gauche pour introduire du code dans les bases de données. C’est une astuce très intelligente que je ne savais même pas possible. Oups ! », a jouté Green.
Selon lui, la bonne nouvelle est que les chercheurs ont procédé à une analyse généralisée des vulnérabilités. Mais qu’ils n’ont pas pu trouver de preuves que quelqu’un exploitait cette technique. « La mauvaise nouvelle, c’est qu’il n’y avait aucune défense contre cette faille, et maintenant que les gens sont au courant, ils pourraient commencer à l’exploiter. Espérons que les développeurs de compilateurs et d’éditeurs de code appliqueront rapidement des correctifs. Mais comme certaines personnes ne mettent pas à jour leurs outils de développement régulièrement, il y aura un certain risque pendant un certain temps au moins », a déclaré Green.
Sources : Rapport de l’étude (PDF), Trojan Source, Preuve de concept