Découverte d'une vulnérabilité permettant de cacher du code malveillant dans un grand nombre de compilateurs
Les experts de l'Université de Cambridge ont publié des informations sur une vulnérabilité dangereuse (CVE-2021-42574) qui affecte presque tous les compilateurs de code source modernes. L'article Trojan Source décrit une attaque insidieuse qui permet aux pirates de dissimuler un code malveillant dans le code source de divers programmes.
L'attaque repose sur la façon dont les compilateurs traitent les identifiants uniques utilisés pour déterminer si le texte est orienté de gauche à droite ou de droite à gauche. La faiblesse réside dans l'algorithme Bidi d'Unicode, qui permet d'utiliser ensemble des mots écrits de droite à gauche et de gauche à droite. Grâce à cet algorithme, les mots arabes et anglais peuvent être combinés. Il permet de lire le texte écrit de droite à gauche, de gauche à droite et vice versa.
Dans certains cas, la capacité de l'algorithme Unicode Bidi n'est pas suffisante pour modifier la façon dont ces mots sont affichés, et dans ce cas, des caractères de contrôle spéciaux sont utilisés. Toutefois, si des mots ayant un sens de lecture différent sont combinés sur une même ligne, il est possible d'utiliser ces caractères de contrôle pour modifier le sens de lecture de ce texte par le compilateur et, par exemple, faire en sorte que des lignes qui ressemblent à des commentaires fonctionnent comme du code exécutable.
Cette méthode permet d'ajouter une instruction malveillante à un code source normal et de rendre le texte de cette instruction invisible lors de l'affichage du code avec un commentaire ultérieur. Cela conduira à l'insertion de caractères totalement différents, qui pourraient en fait être du code arbitraire. Le code source final reste sémantiquement correct, mais le contraire se produit après la compilation.
Lors de l'examen et de l'analyse d'un tel code source, le programmeur voit du code avec des commentaires qui n'éveillent aucun soupçon, mais le compilateur ou l'interprète inversera l'ordre logique des caractères et un commentaire innocent se transformera en un code supplémentaire inséré dans le programme. Le bogue est présent dans presque tous les compilateurs - pour les langages de programmation C, C++ (gcc et clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go et Python ; dans divers éditeurs de code populaires, notamment VS Code, Emacs, Atom ; et dans les interfaces de révision du code source dans les dépôts GitHub, Gitlab, BitBucket et tous les produits Atlassian.
Source : trojansource, zdnet