Icônes SCW
héros bg sans séparateur
Blog

Qu'est-ce que Trojan Source et comment s'introduit-il dans votre code source ?

Laura Verheyde
Publié le 23 février 2022
Dernière mise à jour le 6 mars 2026

Début novembre, l'université de Cambridge a publié une étude intitulée Trojan-Source. Cette étude s'est concentrée sur la manière dont les portes dérobées peuvent être dissimulées dans le code source et les commentaires, à l'aide de caractères de mise en forme directionnels. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur par rapport à un réviseur de code humain.

Cette vulnérabilité est nouvelle, bien qu'Unicode ait déjà été utilisé de manière malveillante par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant l'ordre de la dernière partie du nom du fichier. Des recherches récentes ont révélé que de nombreux compilateurs ignorent les caractères Unicode du code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent redistribuer les lignes contenant des commentaires et du code basé sur ceux-ci. Ainsi, l'éditeur peut afficher le code et les commentaires différemment et dans un ordre différent de la façon dont le compilateur les analysera, voire en échangeant le code et les commentaires.

Veuillez lire la suite pour obtenir plus d'informations. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à visiter notre site gratuit et notre mission publique afin de vivre cette expérience par vous-même.

Texte bidirectionnel

L'une de ces attaques Trojan-Source utilise l'algorithme Unicode Bidi (bidirectionnel), qui permet de regrouper du texte dans un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de mise en forme directionnelle peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement Bidi pertinents pour l'attaque. Prenons, par exemple,

RLI et PDI

L'abréviation RLI signifie « Isolation de droite à gauche ». Elle isolera le texte de son contexte (délimité par PDI, Isolation directionnelle pop) et le lira de droite à gauche. Résultat :

c ou d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de mise en forme, y compris les remplacements Bidi, avant d'analyser le code source. S'ils ignorent simplement les caractères de mise en forme directionnelle, ils analyseront :

e d à c

Du vin ancien dans des bouteilles neuves ?

Bien entendu, cela n'est pas nouveau. Dans le passé, des caractères de mise en forme directionnelle étaient insérés dans les noms de fichiers afin de masquer leur nature malveillante. Une pièce jointe à un e-mail affichée sous la forme « myspecialexe.doc » pourrait sembler assez innocente, sans le caractère RLO (Remplacer de droite à gauche) présent qui révèle que le vrai nom est « myspecialcod.exe ».

L'attaque Trojan Source insère des caractères de mise en forme directionnels dans les commentaires et les chaînes présents dans le code source, car ils ne généreront aucune erreur de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, ce qui amène le compilateur à interpréter quelque chose de complètement différent de ce qu'un humain comprendrait.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit en fonction des caractères de mise en forme directionnels

Caractères de formatage directionnels

provoquant le rendu du code comme suit si les caractères de mise en forme directionnels ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme l'entretoise de fermeture en une entretoise d'ouverture, et inversement sur la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes administrateur ». La vérification d'administration a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Comment cela pourrait-il vous affecter ?

De nombreux langages sont susceptibles d'être affectés par cette vulnérabilité : C, C++, C#, JavaScript, Java, Rust, Go et Python, et il est probable qu'il y en ait d'autres. À présent, le développeur moyen peut froncer les sourcils en voyant des caractères de mise en forme directionnelle dans le code source, mais un novice pourrait tout aussi bien hausser les épaules et ne pas y prêter attention. De plus, la visualisation de ces caractères dépend fortement de l'IDE, il n'est donc jamais garanti qu'ils seront repérés.

Mais comment cette vulnérabilité a-t-elle pu se faufiler dans le code source ? Tout d'abord, cela peut se produire lors de l'utilisation de code source provenant de sources non fiables, où les contributions de code malveillant sont passées inaperçues. Deuxièmement, cela peut se produire par un simple copier-coller à partir de code trouvé sur Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait auparavant. La plupart des organisations s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire entièrement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher le code source contenant des portes dérobées cachées ?

À qui incombe ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plusieurs directions, sauf si l'une des directions est strictement limitée aux chaînes et aux commentaires. Veuillez noter qu'un caractère de mise en forme directionnel dans une chaîne ou un commentaire peut, s'il n'est pas affiché, prolonger un changement de direction jusqu'à la fin de la ligne. En général, les éditeurs de code doivent afficher et mettre en évidence de manière explicite les caractères Unicode suspects, tels que les homoglyphes et les caractères de mise en forme directionnelle. Depuis novembre, GitHub ajoute désormais un signe d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères sur la ligne. Cela peut tout de même permettre à des changements de direction malveillants de se faufiler, ainsi qu'à des changements de direction bénins.

La sensibilisation des développeurs et des réviseurs de code est essentielle, c'est pourquoi nous avons créé une procédure étape par étape illustrant cette vulnérabilité. Actuellement, cette procédure étape par étape est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions ) de Trojan Source et à consulter la Recherche sur Trojan Source.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation dans GO

Simulation en Python

Source de Troie
Source de Troie
Afficher la ressource
Afficher la ressource

Souhaitez-vous obtenir davantage d'informations ?

En savoir plus

Secure Code Warrior là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.
Partager sur :
marques LinkedInSocialLogo x
Auteur
Laura Verheyde
Publié le 23 février 2022

Laura Verheyde est une développeuse de logiciels chez Secure Code Warrior qui se concentre sur la recherche de vulnérabilités et la création de contenu pour les missions et les laboratoires de codage.

Partager sur :
marques LinkedInSocialLogo x
Source de Troie
Source de Troie

Début novembre, l'université de Cambridge a publié une étude intitulée Trojan-Source. Cette étude s'est concentrée sur la manière dont les portes dérobées peuvent être dissimulées dans le code source et les commentaires, à l'aide de caractères de mise en forme directionnels. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur par rapport à un réviseur de code humain.

Cette vulnérabilité est nouvelle, bien qu'Unicode ait déjà été utilisé de manière malveillante par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant l'ordre de la dernière partie du nom du fichier. Des recherches récentes ont révélé que de nombreux compilateurs ignorent les caractères Unicode du code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent redistribuer les lignes contenant des commentaires et du code basé sur ceux-ci. Ainsi, l'éditeur peut afficher le code et les commentaires différemment et dans un ordre différent de la façon dont le compilateur les analysera, voire en échangeant le code et les commentaires.

Veuillez lire la suite pour obtenir plus d'informations. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à visiter notre site gratuit et notre mission publique afin de vivre cette expérience par vous-même.

Texte bidirectionnel

L'une de ces attaques Trojan-Source utilise l'algorithme Unicode Bidi (bidirectionnel), qui permet de regrouper du texte dans un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de mise en forme directionnelle peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement Bidi pertinents pour l'attaque. Prenons, par exemple,

RLI et PDI

L'abréviation RLI signifie « Isolation de droite à gauche ». Elle isolera le texte de son contexte (délimité par PDI, Isolation directionnelle pop) et le lira de droite à gauche. Résultat :

c ou d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de mise en forme, y compris les remplacements Bidi, avant d'analyser le code source. S'ils ignorent simplement les caractères de mise en forme directionnelle, ils analyseront :

e d à c

Du vin ancien dans des bouteilles neuves ?

Bien entendu, cela n'est pas nouveau. Dans le passé, des caractères de mise en forme directionnelle étaient insérés dans les noms de fichiers afin de masquer leur nature malveillante. Une pièce jointe à un e-mail affichée sous la forme « myspecialexe.doc » pourrait sembler assez innocente, sans le caractère RLO (Remplacer de droite à gauche) présent qui révèle que le vrai nom est « myspecialcod.exe ».

L'attaque Trojan Source insère des caractères de mise en forme directionnels dans les commentaires et les chaînes présents dans le code source, car ils ne généreront aucune erreur de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, ce qui amène le compilateur à interpréter quelque chose de complètement différent de ce qu'un humain comprendrait.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit en fonction des caractères de mise en forme directionnels

Caractères de formatage directionnels

provoquant le rendu du code comme suit si les caractères de mise en forme directionnels ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme l'entretoise de fermeture en une entretoise d'ouverture, et inversement sur la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes administrateur ». La vérification d'administration a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Comment cela pourrait-il vous affecter ?

De nombreux langages sont susceptibles d'être affectés par cette vulnérabilité : C, C++, C#, JavaScript, Java, Rust, Go et Python, et il est probable qu'il y en ait d'autres. À présent, le développeur moyen peut froncer les sourcils en voyant des caractères de mise en forme directionnelle dans le code source, mais un novice pourrait tout aussi bien hausser les épaules et ne pas y prêter attention. De plus, la visualisation de ces caractères dépend fortement de l'IDE, il n'est donc jamais garanti qu'ils seront repérés.

Mais comment cette vulnérabilité a-t-elle pu se faufiler dans le code source ? Tout d'abord, cela peut se produire lors de l'utilisation de code source provenant de sources non fiables, où les contributions de code malveillant sont passées inaperçues. Deuxièmement, cela peut se produire par un simple copier-coller à partir de code trouvé sur Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait auparavant. La plupart des organisations s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire entièrement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher le code source contenant des portes dérobées cachées ?

À qui incombe ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plusieurs directions, sauf si l'une des directions est strictement limitée aux chaînes et aux commentaires. Veuillez noter qu'un caractère de mise en forme directionnel dans une chaîne ou un commentaire peut, s'il n'est pas affiché, prolonger un changement de direction jusqu'à la fin de la ligne. En général, les éditeurs de code doivent afficher et mettre en évidence de manière explicite les caractères Unicode suspects, tels que les homoglyphes et les caractères de mise en forme directionnelle. Depuis novembre, GitHub ajoute désormais un signe d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères sur la ligne. Cela peut tout de même permettre à des changements de direction malveillants de se faufiler, ainsi qu'à des changements de direction bénins.

La sensibilisation des développeurs et des réviseurs de code est essentielle, c'est pourquoi nous avons créé une procédure étape par étape illustrant cette vulnérabilité. Actuellement, cette procédure étape par étape est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions ) de Trojan Source et à consulter la Recherche sur Trojan Source.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation dans GO

Simulation en Python

Afficher la ressource
Afficher la ressource

Veuillez remplir le formulaire ci-dessous pour télécharger le rapport.

Nous souhaiterions obtenir votre autorisation pour vous envoyer des informations sur nos produits et/ou sur des sujets liés au codage sécurisé. Nous traiterons toujours vos données personnelles avec le plus grand soin et ne les transmettrons jamais à d'autres entreprises à des fins de marketing.

Soumettre
icône de réussite scw
icône d'erreur scw
Pour soumettre le formulaire, veuillez activer les cookies « Analytics ». N'hésitez pas à les désactiver à nouveau une fois que vous aurez terminé.
Source de Troie

Début novembre, l'université de Cambridge a publié une étude intitulée Trojan-Source. Cette étude s'est concentrée sur la manière dont les portes dérobées peuvent être dissimulées dans le code source et les commentaires, à l'aide de caractères de mise en forme directionnels. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur par rapport à un réviseur de code humain.

Cette vulnérabilité est nouvelle, bien qu'Unicode ait déjà été utilisé de manière malveillante par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant l'ordre de la dernière partie du nom du fichier. Des recherches récentes ont révélé que de nombreux compilateurs ignorent les caractères Unicode du code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent redistribuer les lignes contenant des commentaires et du code basé sur ceux-ci. Ainsi, l'éditeur peut afficher le code et les commentaires différemment et dans un ordre différent de la façon dont le compilateur les analysera, voire en échangeant le code et les commentaires.

Veuillez lire la suite pour obtenir plus d'informations. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à visiter notre site gratuit et notre mission publique afin de vivre cette expérience par vous-même.

Texte bidirectionnel

L'une de ces attaques Trojan-Source utilise l'algorithme Unicode Bidi (bidirectionnel), qui permet de regrouper du texte dans un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de mise en forme directionnelle peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement Bidi pertinents pour l'attaque. Prenons, par exemple,

RLI et PDI

L'abréviation RLI signifie « Isolation de droite à gauche ». Elle isolera le texte de son contexte (délimité par PDI, Isolation directionnelle pop) et le lira de droite à gauche. Résultat :

c ou d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de mise en forme, y compris les remplacements Bidi, avant d'analyser le code source. S'ils ignorent simplement les caractères de mise en forme directionnelle, ils analyseront :

e d à c

Du vin ancien dans des bouteilles neuves ?

Bien entendu, cela n'est pas nouveau. Dans le passé, des caractères de mise en forme directionnelle étaient insérés dans les noms de fichiers afin de masquer leur nature malveillante. Une pièce jointe à un e-mail affichée sous la forme « myspecialexe.doc » pourrait sembler assez innocente, sans le caractère RLO (Remplacer de droite à gauche) présent qui révèle que le vrai nom est « myspecialcod.exe ».

L'attaque Trojan Source insère des caractères de mise en forme directionnels dans les commentaires et les chaînes présents dans le code source, car ils ne généreront aucune erreur de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, ce qui amène le compilateur à interpréter quelque chose de complètement différent de ce qu'un humain comprendrait.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit en fonction des caractères de mise en forme directionnels

Caractères de formatage directionnels

provoquant le rendu du code comme suit si les caractères de mise en forme directionnels ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme l'entretoise de fermeture en une entretoise d'ouverture, et inversement sur la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes administrateur ». La vérification d'administration a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Comment cela pourrait-il vous affecter ?

De nombreux langages sont susceptibles d'être affectés par cette vulnérabilité : C, C++, C#, JavaScript, Java, Rust, Go et Python, et il est probable qu'il y en ait d'autres. À présent, le développeur moyen peut froncer les sourcils en voyant des caractères de mise en forme directionnelle dans le code source, mais un novice pourrait tout aussi bien hausser les épaules et ne pas y prêter attention. De plus, la visualisation de ces caractères dépend fortement de l'IDE, il n'est donc jamais garanti qu'ils seront repérés.

Mais comment cette vulnérabilité a-t-elle pu se faufiler dans le code source ? Tout d'abord, cela peut se produire lors de l'utilisation de code source provenant de sources non fiables, où les contributions de code malveillant sont passées inaperçues. Deuxièmement, cela peut se produire par un simple copier-coller à partir de code trouvé sur Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait auparavant. La plupart des organisations s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire entièrement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher le code source contenant des portes dérobées cachées ?

À qui incombe ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plusieurs directions, sauf si l'une des directions est strictement limitée aux chaînes et aux commentaires. Veuillez noter qu'un caractère de mise en forme directionnel dans une chaîne ou un commentaire peut, s'il n'est pas affiché, prolonger un changement de direction jusqu'à la fin de la ligne. En général, les éditeurs de code doivent afficher et mettre en évidence de manière explicite les caractères Unicode suspects, tels que les homoglyphes et les caractères de mise en forme directionnelle. Depuis novembre, GitHub ajoute désormais un signe d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères sur la ligne. Cela peut tout de même permettre à des changements de direction malveillants de se faufiler, ainsi qu'à des changements de direction bénins.

La sensibilisation des développeurs et des réviseurs de code est essentielle, c'est pourquoi nous avons créé une procédure étape par étape illustrant cette vulnérabilité. Actuellement, cette procédure étape par étape est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions ) de Trojan Source et à consulter la Recherche sur Trojan Source.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation dans GO

Simulation en Python

Afficher le webinaire
Veuillez commencer
En savoir plus

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.

Secure Code Warrior là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez consulter le rapportVeuillez réserver une démonstration.
Télécharger le PDF
Afficher la ressource
Partager sur :
marques LinkedInSocialLogo x
Souhaitez-vous obtenir davantage d'informations ?

Partager sur :
marques LinkedInSocialLogo x
Auteur
Laura Verheyde
Publié le 23 février 2022

Laura Verheyde est une développeuse de logiciels chez Secure Code Warrior qui se concentre sur la recherche de vulnérabilités et la création de contenu pour les missions et les laboratoires de codage.

Partager sur :
marques LinkedInSocialLogo x

Début novembre, l'université de Cambridge a publié une étude intitulée Trojan-Source. Cette étude s'est concentrée sur la manière dont les portes dérobées peuvent être dissimulées dans le code source et les commentaires, à l'aide de caractères de mise en forme directionnels. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur par rapport à un réviseur de code humain.

Cette vulnérabilité est nouvelle, bien qu'Unicode ait déjà été utilisé de manière malveillante par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant l'ordre de la dernière partie du nom du fichier. Des recherches récentes ont révélé que de nombreux compilateurs ignorent les caractères Unicode du code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent redistribuer les lignes contenant des commentaires et du code basé sur ceux-ci. Ainsi, l'éditeur peut afficher le code et les commentaires différemment et dans un ordre différent de la façon dont le compilateur les analysera, voire en échangeant le code et les commentaires.

Veuillez lire la suite pour obtenir plus d'informations. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à visiter notre site gratuit et notre mission publique afin de vivre cette expérience par vous-même.

Texte bidirectionnel

L'une de ces attaques Trojan-Source utilise l'algorithme Unicode Bidi (bidirectionnel), qui permet de regrouper du texte dans un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de mise en forme directionnelle peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement Bidi pertinents pour l'attaque. Prenons, par exemple,

RLI et PDI

L'abréviation RLI signifie « Isolation de droite à gauche ». Elle isolera le texte de son contexte (délimité par PDI, Isolation directionnelle pop) et le lira de droite à gauche. Résultat :

c ou d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de mise en forme, y compris les remplacements Bidi, avant d'analyser le code source. S'ils ignorent simplement les caractères de mise en forme directionnelle, ils analyseront :

e d à c

Du vin ancien dans des bouteilles neuves ?

Bien entendu, cela n'est pas nouveau. Dans le passé, des caractères de mise en forme directionnelle étaient insérés dans les noms de fichiers afin de masquer leur nature malveillante. Une pièce jointe à un e-mail affichée sous la forme « myspecialexe.doc » pourrait sembler assez innocente, sans le caractère RLO (Remplacer de droite à gauche) présent qui révèle que le vrai nom est « myspecialcod.exe ».

L'attaque Trojan Source insère des caractères de mise en forme directionnels dans les commentaires et les chaînes présents dans le code source, car ils ne généreront aucune erreur de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, ce qui amène le compilateur à interpréter quelque chose de complètement différent de ce qu'un humain comprendrait.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit en fonction des caractères de mise en forme directionnels

Caractères de formatage directionnels

provoquant le rendu du code comme suit si les caractères de mise en forme directionnels ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme l'entretoise de fermeture en une entretoise d'ouverture, et inversement sur la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes administrateur ». La vérification d'administration a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Comment cela pourrait-il vous affecter ?

De nombreux langages sont susceptibles d'être affectés par cette vulnérabilité : C, C++, C#, JavaScript, Java, Rust, Go et Python, et il est probable qu'il y en ait d'autres. À présent, le développeur moyen peut froncer les sourcils en voyant des caractères de mise en forme directionnelle dans le code source, mais un novice pourrait tout aussi bien hausser les épaules et ne pas y prêter attention. De plus, la visualisation de ces caractères dépend fortement de l'IDE, il n'est donc jamais garanti qu'ils seront repérés.

Mais comment cette vulnérabilité a-t-elle pu se faufiler dans le code source ? Tout d'abord, cela peut se produire lors de l'utilisation de code source provenant de sources non fiables, où les contributions de code malveillant sont passées inaperçues. Deuxièmement, cela peut se produire par un simple copier-coller à partir de code trouvé sur Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait auparavant. La plupart des organisations s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire entièrement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher le code source contenant des portes dérobées cachées ?

À qui incombe ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plusieurs directions, sauf si l'une des directions est strictement limitée aux chaînes et aux commentaires. Veuillez noter qu'un caractère de mise en forme directionnel dans une chaîne ou un commentaire peut, s'il n'est pas affiché, prolonger un changement de direction jusqu'à la fin de la ligne. En général, les éditeurs de code doivent afficher et mettre en évidence de manière explicite les caractères Unicode suspects, tels que les homoglyphes et les caractères de mise en forme directionnelle. Depuis novembre, GitHub ajoute désormais un signe d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères sur la ligne. Cela peut tout de même permettre à des changements de direction malveillants de se faufiler, ainsi qu'à des changements de direction bénins.

La sensibilisation des développeurs et des réviseurs de code est essentielle, c'est pourquoi nous avons créé une procédure étape par étape illustrant cette vulnérabilité. Actuellement, cette procédure étape par étape est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions ) de Trojan Source et à consulter la Recherche sur Trojan Source.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation dans GO

Simulation en Python

Table des matières

Télécharger le PDF
Afficher la ressource
Souhaitez-vous obtenir davantage d'informations ?

En savoir plus

Secure Code Warrior là pour aider votre organisation à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture dans laquelle la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité informatique ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre organisation à réduire les risques associés à un code non sécurisé.

Veuillez réserver une démonstration.Télécharger
Partager sur :
marques LinkedInSocialLogo x
Centre de ressources

Ressources pour vous aider à démarrer

Plus de publications
Centre de ressources

Ressources pour vous aider à démarrer

Plus de publications