Comment prévenir les attaques Trojan Source avec Snyk Code
Frank Fischer
17 novembre 2021
0 minutes de lecturePlus tôt ce mois-ci, un groupe de chercheurs de l’Université de Cambridge a publié un article universitaire, accompagné d’un site web, sur un nouveau type de vulnérabilité potentielle pouvant apparaître dans le code source. Ils l’ont baptisé Trojan Source.
Le principe de cette vulnérabilité repose sur l’utilisation de caractères Unicode dans le code. Si ces caractères offrent des possibilités intéressantes pour les noms de variables ou les commentaires (par exemple, utiliser des émojis pour exprimer ce que l’on ressent dans des commentaires), ils peuvent malheureusement aussi dissimuler des éléments potentiellement malveillants à la vue de tous dans le code. Un attaquant pourrait, par exemple, faire croire que le code contient une logique d’authentification valide, alors qu’en réalité (ou du point de vue du compilateur ou de l’interpréteur), il effectue une action complètement différente. Ou encore, ce qui semble être du code actif n’est en fait qu’un commentaire, ignoré à l’exécution. Tout cela en utilisant des caractères Unicode pour tromper l’œil humain.
Si vous souhaitez découvrir les subtilités de cette vulnérabilité, nous vous recommandons de consulter le site web ou l’article d’origine. Et si vous voulez voir la vulnérabilité à l’œuvre en JavaScript, mon collègue Liran Tal a publié un article de blog expliquant comment détecter et atténuer efficacement les attaques Trojan Source dans les bases de code JavaScript avec ESLint.
Dans cet article, nous allons utiliser Snyk Code pour détecter et corriger les attaques Trojan Source dans le code source. C’est parti !
« Snyk Code peut-il corriger Trojan Source ? »
C’est la question que nous avons reçue le jour même de la publication du site web (preuve que les clients de Snyk sont généralement bien informés et bien connectés). Voici, en substance, la discussion que nous avons eue en interne : après avoir consulté l’équipe, la première réaction a été que (1) cela semblait être une attaque de la chaîne d’approvisionnement envisageable, mais moins probable pour votre propre code, car elle nécessite un accès au code source, et (2) cette attaque opère au niveau syntaxique.
Remarque : Comme vous pouvez le voir dans l’article de Liran, Trojan Source est une attaque au niveau syntaxique. ESLint est donc utile aux développeurs JavaScript. Malheureusement, d’autres écosystèmes comme Java, Ruby, C# et bien d’autres ne disposent peut-être pas de nouveaux outils permettant d’atténuer cette menace. Snyk Code devient alors un outil d’autant plus important à ajouter à votre arsenal.
Compte tenu des réactions de la communauté et des demandes de nos clients, nous avons décidé d’ajouter des règles pour traiter les problèmes liés à Trojan Source. Comme il ne s’agit pas d’un problème de gravité élevée (sa visibilité est simplement forte en raison de la couverture médiatique récente), nous n’avons pas précipité la correction : nous l’avons plutôt ajoutée au sprint en cours. Mais nous ne voulions pas nous arrêter là. En ajoutant cette règle, nous avons également couvert une catégorie de vulnérabilités UTF connexes impliquant des caractères confondables. Enfin, nous avons veillé à ce que le jeu de règles couvre tous les langages pris en charge par Snyk Code.
Il est important de noter qu’il n’a fallu que 10 jours pour développer et publier les règles contre Trojan Source et les problèmes connexes dans tous les langages pris en charge par Snyk Code — sans procédure accélérée, simplement dans le cadre du sprint en cours. C’est un parfait exemple de l’agilité de Snyk Code : décision, développement, tests sur des centaines de milliers de projets dans tous les langages pris en charge, optimisation et publication en 10 jours. C’est aussi la preuve de la puissance du moteur de Snyk Code optimisé par le machine learning : en quelques heures de développement, nous avons non seulement couvert Trojan Source, mais aussi traité des problèmes connexes.


Snyk Code détecte Trojan Source et d’autres variantes dangereuses
Trojan Source pourrait se manifester sous la forme d’une attaque de la chaîne d’approvisionnement open source, mais pourrait aussi être exécuté par un simple copier-coller directement dans le code de l’application (comme le montre le blog de Liran). C’est pourquoi Snyk Code analyse votre base de code à la recherche de problèmes de type Trojan Source.
Remarque : Snyk est également un outil puissant pour sécuriser la chaîne d’approvisionnement open source et vous permet de surveiller et de corriger facilement les problèmes liés à la sécurité des dépendances et à la conformité des licences.
Comme indiqué plus haut, l’équipe n’a mis que quelques jours à développer la détection de Trojan Source. Mais Snyk Code détecte davantage de variantes de cette attaque que la plupart des autres outils. Par exemple, Snyk Code ne détecte pas seulement les caractères de contrôle bidirectionnels : il repère également les caractères UTF confondables utilisés dans les noms de méthodes et de variables, qui peuvent potentiellement masquer la véritable sémantique du code. Ainsi, aujourd’hui, Snyk Code détecte un éventail plus large de problèmes décrits par Trojan Source que tout autre outil de vérification que nous connaissons.
Remarque : Snyk Code prend en charge Java, JavaScript, TypeScript, PHP et Python, ainsi que C#, Ruby et Go en version bêta publique. Trojan Source pourrait cibler d’autres langages (par exemple, les scripts Bash), mais Snyk Code ne peut pas analyser les langages non pris en charge.
Snyk Code, le talon d’Achille de Trojan Source
Comme vous pouvez le voir ci-dessus, Snyk Code dispose d’un moteur puissant capable d’effectuer un large éventail d’analyses. De manière générale, il tire parti des connaissances de la communauté mondiale des développeurs grâce à un algorithme unique, guidé par l’expertise humaine. Nous pouvons également réagir rapidement aux évolutions du marché et aux nouvelles menaces comme Trojan Source. Résultat : Snyk Code détecte Trojan Source et les vulnérabilités connexes, tout en s’appuyant sur une base de connaissances existante pour offrir une précision de premier plan dans le secteur. Les problèmes sont expliqués à partir du code source d’origine, avec des conseils supplémentaires et des exemples de la manière dont des projets open source ont résolu des problèmes similaires, afin d’aider les développeurs à comprendre et à corriger les problèmes.
Tout cela, à une vitesse inégalée et directement depuis votre IDE préféré. Et vous pouvez l’utiliser gratuitement : voilà une excellente raison de l’essayer !
Sécurisez votre code grâce à des informations de pointe
Découvrez toutes les fonctionnalités SAST de Snyk Code en seulement 30 minutes.



