Na het Trojan Source-aanvalsmethode, die gebaseerd is op het gebruik van Unicode-tekens die de volgorde van weergave van bidirectionele tekst wijzigen, is er een andere techniek gepubliceerd voor het invoegen van verborgen acties die toepasbaar is op code in JavaScript. De nieuwe methode is gebaseerd op het gebruik van het unicode-teken «ㅤ» (code 0x3164, «HANGUL FILLER»), dat behoort tot de categorie letters, maar geen zichtbare inhoud heeft. De Unicode-categorie waartoe dit teken behoort, is toegestaan vanaf de specificatie ECMAScript 2015 voor gebruik in JavaScript-variabelen, wat de mogelijkheid biedt om onzichtbare variabelen te creëren of nieuwe variabelen die niet van andere variabelen kunnen worden onderscheiden in populaire code-editors zoals Notepad++ en VS Code.
Als voorbeeld wordt code voor het Node.js-platform gegeven, waarin met behulp van een variabele die uit één teken «ㅤ» bestaat, een backdoor wordt verborgen waarmee kwaadwillenden de opgegeven code kunnen uitvoeren: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // in feite staat hier «const { timeout,ㅤ \u3164}» const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // na de komma volgt het teken \u3164 ];
Op het eerste gezicht wordt via de externe parameter alleen de timeout-waarde doorgegeven, terwijl de array met uit te voeren commando's een onschadelijke vaste lijst bevat. Maar in werkelijkheid wordt na de timeout-variabele de waarde van een andere onzichtbare variabele met de karaktercode \u3164 toegewezen, die ook in de array met uit te voeren commando's wordt geplaatst. Dus bij het bestaan van een dergelijke constructie kan de aanvaller een verzoek verzenden zoals «https://host:8080/network_health?=commando» om de backdoor te activeren en zijn eigen code uit te voeren.
Als een ander voorbeeld wordt het teken «ǃ» (ALVEOLAR CLICK) gegeven, dat kan worden gebruikt om de indruk te wekken dat er een uitroepteken wordt aangegeven. Bijvoorbeeld, de expressie «if(environmentǃ=ENV_PROD){» zal bij uitvoering in Node.js 14 altijd waar zijn, omdat hier geen vergelijking wordt gemaakt, maar de variabele «environmentǃ» de waarde ENV_PROD wordt toegewezen. Onder de misleidende unicode-tekens worden ook «/», «−», «+», «⩵», «❨», «⫽», «꓿» en «∗» genoemd.
Bron: opennet.ru
