Pratiquement tous les compilateurs – programmes qui transforment le code source lisible par l’homme en code machine exécutable par ordinateur – sont vulnérables à une attaque insidieuse dans laquelle un adversaire peut introduire des vulnérabilités ciblées dans n’importe quel logiciel sans être détecté, prévient une nouvelle recherche publiée aujourd’hui. La divulgation de la vulnérabilité a été coordonnée avec plusieurs organisations, dont certaines publient maintenant des mises à jour pour remédier à la faille de sécurité.
Des chercheurs avec le Université de Cambridge a découvert un bogue qui affecte la plupart des compilateurs de code informatique et de nombreux environnements de développement de logiciels. Il s’agit d’un composant de la norme de codage de texte numérique Unicode, qui permet aux ordinateurs d’échanger des informations quelle que soit la langue utilisée. Unicode définit actuellement plus de 143 000 caractères dans 154 scripts de langage différents (en plus de nombreux jeux de caractères non script, tels que les emojis).
Plus précisément, la faiblesse implique le bidirectionnel d’Unicode ou « Algorithme « Bidi »qui gère l’affichage de texte comprenant des scripts mixtes avec différents ordres d’affichage, tels que l’arabe (qui se lit de droite à gauche) et l’anglais (de gauche à droite).
Mais les systèmes informatiques doivent disposer d’un moyen déterministe de résoudre les conflits de direction dans le texte. Entrez le « Bidi override », qui peut être utilisé pour que le texte de gauche à droite soit lu de droite à gauche, et vice versa.
« Dans certains scénarios, l’ordre par défaut défini par l’algorithme Bidi peut ne pas être suffisant », ont écrit les chercheurs de Cambridge. « Dans ces cas, les caractères de contrôle de remplacement Bidi permettent de changer l’ordre d’affichage des groupes de caractères. »
Les remplacements Bidi permettent même d’afficher des caractères à écriture unique dans un ordre différent de leur codage logique. Comme le soulignent les chercheurs, ce fait a déjà été exploité pour masquer les extensions de fichiers de logiciels malveillants diffusés par e-mail.
Voici le problème : la plupart des langages de programmation vous permettent de mettre ces remplacements Bidi dans les commentaires et les chaînes. C’est mauvais car la plupart des langages de programmation autorisent les commentaires dans lesquels tout le texte, y compris caractères de contrôle — est ignoré par les compilateurs et les interpréteurs. De plus, c’est mauvais car la plupart des langages de programmation autorisent littéraux de chaîne pouvant contenir des caractères arbitraires, y compris des caractères de contrôle.
« Vous pouvez donc les utiliser dans un code source qui semble inoffensif pour un examinateur humain [that] peut réellement faire quelque chose de méchant », a déclaré Ross Anderson, professeur de sécurité informatique à Cambridge et co-auteur de la recherche. « C’est une mauvaise nouvelle pour des projets comme Linux et Webkit qui acceptent des contributions de personnes aléatoires, les soumettent à une révision manuelle, puis les intègrent dans du code critique. Cette vulnérabilité est, autant que je sache, la première à affecter presque tout.
Le document de recherche, qui a surnommé la vulnérabilité « Source de cheval de Troie, » note que bien que les commentaires et les chaînes aient une sémantique spécifique à la syntaxe indiquant leur début et leur fin, ces bornes ne sont pas respectées par les forçages Bidi. Du papier:
« Par conséquent, en plaçant les caractères de remplacement Bidi exclusivement dans les commentaires et les chaînes, nous pouvons les introduire clandestinement dans le code source d’une manière que la plupart des compilateurs accepteront. Notre idée clé est que nous pouvons réorganiser les caractères du code source de manière à ce que l’ordre d’affichage résultant représente également un code source syntaxiquement valide.
« En rassemblant tout cela, nous arrivons à une nouvelle attaque de la chaîne d’approvisionnement contre le code source. En injectant des caractères de remplacement Unicode Bidi dans les commentaires et les chaînes, un adversaire peut produire un code source syntaxiquement valide dans la plupart des langues modernes pour lesquelles l’ordre d’affichage des caractères présente une logique qui diverge de la logique réelle. En effet, nous anagrammerons le programme A en programme B.
Anderson a déclaré qu’une telle attaque pourrait être difficile à détecter pour un examinateur de code humain, car le code source rendu semble parfaitement acceptable.
« Si le changement de logique est suffisamment subtil pour ne pas être détecté lors de tests ultérieurs, un adversaire pourrait introduire des vulnérabilités ciblées sans être détecté », a-t-il déclaré.
Tout aussi préoccupant est que Bidi remplace les caractères persister grâce aux fonctions copier-coller sur la plupart des navigateurs, éditeurs et systèmes d’exploitation modernes.
« Tout développeur qui copie du code d’une source non fiable dans une base de code protégée peut introduire par inadvertance une vulnérabilité invisible », a déclaré Anderson à BreachTrace. « Une telle copie de code est une source importante d’exploits de sécurité dans le monde réel. »

Image : XKCD.com/2347/
Matthieu Vertprofesseur agrégé à la Institut de sécurité de l’information Johns Hopkinsa déclaré que la recherche de Cambridge montre clairement que la plupart des compilateurs peuvent être trompés avec Unicode pour traiter le code d’une manière différente de celle à laquelle un lecteur s’attendrait à ce qu’il soit traité.
« 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é Green à BreachTrace. « Ce qui me surprend, c’est le nombre de compilateurs qui parseront volontiers Unicode sans aucune défense, et l’efficacité de leur technique d’encodage de droite à gauche pour introduire le code dans les bases de code. C’est une astuce vraiment astucieuse dont je ne savais même pas qu’elle était possible. Aïe.
Green a déclaré que la bonne nouvelle est que les chercheurs ont effectué une analyse de vulnérabilité généralisée, mais n’ont pas été en mesure de trouver des preuves que quiconque exploitait cela. Encore.
« La mauvaise nouvelle, c’est qu’il n’y avait aucune défense contre cela, et maintenant que les gens le savent, ils pourraient commencer à l’exploiter », a déclaré Green. « Espérons que les développeurs de compilateurs et d’éditeurs de code corrigeront cela rapidement ! Mais comme certaines personnes ne mettent pas à jour leurs outils de développement régulièrement, il y aura un risque pendant un certain temps au moins.
Nicolas Tisserandchargé de cours au département d’informatique de Université de Californie, Berkeleya déclaré que la recherche de Cambridge présente « un ensemble d’attaques très simples et élégantes qui pourraient aggraver les attaques de la chaîne d’approvisionnement ».
« Il est déjà difficile pour les humains de distinguer » c’est OK « de » c’est mal « dans le code source », a déclaré Weaver. « Avec cette attaque, vous pouvez utiliser le changement de direction pour modifier la façon dont les choses s’affichent avec des commentaires et des chaînes de sorte que, par exemple, » Ça va » correspond à la manière dont cela s’affiche, mais » Ça va » correspond à la manière dont il existe dans le code. Cela a heureusement une signature très facile à rechercher, donc les compilateurs peuvent [detect] s’ils le rencontrent à l’avenir.
La seconde moitié de l’article de Cambridge est une étude de cas fascinante sur les complexités de l’orchestration de la divulgation des vulnérabilités avec autant de langages de programmation et d’éditeurs de logiciels concernés. Les chercheurs ont déclaré avoir offert une période d’embargo de 99 jours après leur divulgation initiale pour permettre aux produits concernés d’être réparés avec des mises à jour logicielles.
« Nous avons rencontré une variété de réponses allant des engagements de correctifs et des primes de bogues au licenciement rapide et aux références aux politiques juridiques », ont écrit les chercheurs. «Sur les dix-neuf fournisseurs de logiciels avec lesquels nous nous sommes engagés, sept utilisaient une plate-forme externalisée pour recevoir les divulgations de vulnérabilités, six disposaient de portails Web dédiés aux divulgations de vulnérabilités, quatre acceptaient les divulgations via des e-mails cryptés PGP et deux acceptaient les divulgations uniquement via des e-mails non PGP. Ils ont tous confirmé la réception de notre divulgation, et finalement neuf d’entre eux se sont engagés à publier un correctif.
Onze des destinataires avaient des programmes de primes de bogue offrant un paiement pour les divulgations de vulnérabilité. Mais parmi ceux-ci, seuls cinq primes ont été payées, avec un paiement moyen de 2 246 $ et une fourchette de 4 475 $, ont rapporté les chercheurs.
Anderson a déclaré que jusqu’à présent, environ la moitié des organisations qui maintiennent les langages de programmation informatiques concernés contactées ont promis des correctifs. D’autres traînent les pieds.
« Nous surveillerons leur déploiement au cours des prochains jours », a déclaré Anderson. « Nous attendons également des actions de Github, Gitlab et Atlassian, de sorte que leurs outils devraient détecter les attaques sur le code dans les langages qui manquent encore de filtrage des caractères bidis. »
Quant à ce qui doit être fait à propos de Trojan Source, les chercheurs exhortent les gouvernements et les entreprises qui s’appuient sur des logiciels critiques à identifier la position de leurs fournisseurs, à faire pression sur eux pour qu’ils mettent en place des défenses adéquates et à s’assurer que toute lacune est couverte par des contrôles ailleurs dans leur chaîne d’outils.
« Le fait que la vulnérabilité Trojan Source affecte presque tous les langages informatiques en fait une opportunité rare pour une comparaison des réponses entre plates-formes et entre fournisseurs à l’échelle du système et écologiquement valide », conclut l’article. « Comme de puissantes attaques de la chaîne d’approvisionnement peuvent être lancées facilement à l’aide de ces techniques, il est essentiel pour les organisations qui participent à une chaîne d’approvisionnement logicielle de mettre en œuvre des défenses. »
Weaver a qualifié la recherche de « très bon travail pour arrêter quelque chose avant qu’il ne devienne un problème ».
« Les leçons de divulgation coordonnée sont une excellente étude sur ce qu’il faut pour résoudre ces problèmes », a-t-il déclaré. « La vulnérabilité est réelle, mais met également en évidence la vulnérabilité encore plus grande de l’évolution des dépendances et des packages sur lesquels repose notre code moderne. »
La rouille a publié un avis de sécurité pour cette faille de sécurité, qui est suivie comme CVE-2021-42574 et CVE-2021-42694. Des avis de sécurité supplémentaires provenant d’autres langues concernées seront ajoutés sous forme de mises à jour ici.
Le document de recherche Trojan Source est disponible ici (PDF).