Utilisation de caractères unicode invisibles pour dissimuler des actions dans le code JavaScript.

Suite à la méthode d'attaque Trojan Source, qui repose sur l'utilisation de caractères Unicode modifiant l'ordre d'affichage du texte bidirectionnel, une nouvelle technique d'injection d'actions cachées a été publiée, applicable au code en JavaScript. Cette nouvelle méthode repose sur l'utilisation du caractère unicode «ㅤ» (code 0x3164, «HANGUL FILLER»), qui appartient à la catégorie des lettres, mais n'a aucun contenu visible. La catégorie Unicode à laquelle appartient ce caractère est autorisée depuis la spécification ECMAScript 2015 pour être utilisée dans les noms de variables JavaScript, ce qui permet de créer des variables invisibles ou de nouvelles variables indiscernables des autres variables dans des éditeurs de code populaires, tels que Notepad++ et VS Code.

À titre d'exemple, voici un code pour la plateforme Node.js, dans lequel un backdoor est caché derrière une variable contenant un seul caractère «ㅤ», permettant d'exécuter le code spécifié par l'attaquant : app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // en réalité, c'est indiqué «const { timeout,ㅤ \u3164}» const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // après la virgule, il y a le caractère \u3164 ];

À première vue, seule la valeur de timeout est transmise via le paramètre externe, et le tableau des commandes exécutées contient une liste fixe inoffensive. Mais en réalité, après la variable timeout, une autre variable invisible avec le code de symbole \u3164 lui est assignée, qui est également intégrée dans le tableau des commandes exécutables. Ainsi, en présence d'une telle construction pour activer le backdoor et exécuter son propre code, l'attaquant peut envoyer une requête du type «https://host:8080/network_health?=commande».

Comme un autre exemple, le caractère «ǃ» (ALVEOLAR CLICK) peut être utilisé pour créer l'illusion d'une exclamation. Par exemple, l'expression «if(environmentǃ=ENV_PROD){» s'évaluera toujours à vrai dans Node.js 14, car elle ne vérifie pas la différence, mais assigne à la variable «environmentǃ» la valeur ENV_PROD. Parmi les caractères Unicode trompeurs, on note également «/», «−», «+», «⩵», «❨», «⫽», «꓿» et «∗».

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster