Trojan Source'i rünnakumeetodi, mis kasutab Unicode märke, et muuta kahe suuna tekstide kuvamisjärjestust, kõrval on avaldatud veel üks tehnika, mis võimaldab peidetud tegevusi integreerida JavaScripti koodis. Uus meetod põhineb unicode-märgil „ㅤ” (kood 0x3164, „HANGUL FILLER”), mis kuulub tähemärkide kategooriasse, kuid ei oma nähtavat sisu. Selle märgi unicode-kategooria on alates ECMAScript 2015 spetsifikatsioonist lubatud kasutada JavaScripti muutujate nimetustes, võimaldades luua nähtamatuid muutujaid või uusi muutujaid, mis ei erine teistest muutujatest populaarsetes koodiredaktorites, nagu Notepad++ ja VS Code.
Näitena tuuakse Node.js platvormi kood, kus ühekohaline muutuja „ㅤ” varjab tagaukse, mis võimaldab käivitada ründaja määratud koodi: app.get('/network_health', async (req, res) => { const { timeout,ㅤ} = req.query; // tegelikult on siin märgitud „const { timeout,ㅤ \u3164}” const checkCommands = [ 'ping -c 1 google.com', 'curl -s http://example.com/',ㅤ // pärast koma järgneb märk \u3164 ];
На первый взгляд через внешний параметр передаётся только значение timeout, а массив с выполняемыми командами содержит безобидный фиксированный список. Но на деле после переменной timeout присваивается значение ещё одной невидимой переменной с кодом символа \u3164, которая также подставлена в массив исполняемых команд. Таким образом, при наличии подобной конструкции для активации бэкдора и выполнения своего кода атакующий может отправить запрос вида «https://host:8080/network_health?%E3%85%A4=команда».
Kuna veel ühe näiteks tuuakse sümbol «ǃ» (ALVEOLAR CLICK), mida võib kasutada hüüumärgi näiliseks näitamiseks. Näiteks avalduses «if(environmentǃ=ENV_PROD){» Node.js 14 puhul on see alati tõene, kuna see ei kontrolli erinevust, vaid omistab muutuja «environmentǃ» väärtuseks ENV_PROD. Segadust tekitavate unicode-sümbolite seas märgitakse ka «/», «−», «+», «⩵», «❨», «⫽», «꓿» ja «∗».
Allikas: opennet.ru
