Efter Trojan Source-angrebsmetoden, som er baseret på brugen af Unicode-tegn, der ændrer visningsrækkefølgen af tovejstekst, er der blevet offentliggjort en anden teknik til at introducere skjulte handlinger, der gælder for JavaScript-kode. Den nye metode er baseret på brugen af unicode-tegnet "ㅤ" (kode 0x3164, "HANGUL FILLER"), som hører til kategorien bogstaver, men som ikke har noget synligt indhold. Unicode-kategorien, som denne karakter tilhører, har været tilladt siden ECMAScript 2015-specifikationen til brug i JavaScript-variabelnavne, hvilket gør det muligt at oprette usynlige variabler eller nye variabler, der ikke kan skelnes fra andre variabler i populære kodeeditorer som Notepad++ og VS Code.
Som et eksempel er koden til Node.js-platformen givet, hvor der ved hjælp af en variabel bestående af et enkelt tegn "ㅤ" skjules en bagdør, der tillader eksekvering af koden specificeret af angriberen: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // faktisk står der "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // kommaet efterfølges af tegnet \u3164 ];
Ved første øjekast sendes kun timeoutværdien gennem den eksterne parameter, og arrayet med de kommandoer, der skal udføres, indeholder en harmløs fast liste. Men faktisk, efter timeout-variablen, tildeles værdien af en anden usynlig variabel med tegnkoden \u3164, som også erstattes af rækken af eksekverbare kommandoer. Så hvis et sådant design er tilgængeligt, kan en angriber sende en anmodning som "https://host:8080/network_health?%E3%85%A4=command" for at aktivere bagdøren og udføre deres kode.
Et andet eksempel er tegnet "ǃ" (ALVEOLAR KLIK), som kan bruges til at give et udråbstegn. For eksempel vil udtrykket "if(environmentǃ=ENV_PROD){", når det udføres i Node.js 14, altid være sandt, da det ikke tjekker for forskel, men tildeler værdien af ENV_PROD til variablen "environmentǃ". Andre vildledende unicode-tegn omfatter "/", "−", "+", "⩵", "❨", "⫽", "꓿" og "∗".
Kilde: opennet.ru