Använda osynliga Unicode-tecken för att dölja åtgärder i JavaScript-kod

Efter attackmetoden Trojan Source, som är baserad på användningen av Unicode-tecken som ändrar visningsordningen för dubbelriktad text, har en annan teknik för att introducera dolda åtgärder publicerats, tillämplig på JavaScript-kod. Den nya metoden är baserad på användningen av unicode-tecknet "ㅤ" (kod 0x3164, "HANGUL FILLER"), som tillhör kategorin bokstäver, men som inte har något synligt innehåll. Unicode-kategorin som detta tecken tillhör har varit tillåten sedan ECMAScript 2015-specifikationen för användning i JavaScript-variabelnamn, vilket gör det möjligt att skapa osynliga variabler eller nya variabler som inte går att skilja från andra variabler i populära kodredigerare som Notepad++ och VS Code.

Som ett exempel ges koden för Node.js-plattformen, där, med hjälp av en variabel som består av ett enda tecken "ㅤ", en bakdörr döljs som tillåter exekvering av koden som specificerats av angriparen: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // det står faktiskt "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // kommatecken följs av tecknet \u3164 ];

Vid första anblicken skickas endast timeoutvärdet genom den externa parametern, och arrayen med de kommandon som ska utföras innehåller en ofarlig fast lista. Men i själva verket, efter timeout-variabeln, tilldelas värdet av en annan osynlig variabel med teckenkoden \u3164, som också ersätts i arrayen av körbara kommandon. Således, om en sådan design är tillgänglig, kan en angripare skicka en begäran som "https://host:8080/network_health?%E3%85%A4=command" för att aktivera bakdörren och exekvera sin kod.

Ett annat exempel är tecknet "ǃ" (ALVEOLÄR KLICK), som kan användas för att ge intryck av att indikera ett utropstecken. Till exempel, uttrycket "if(environmentǃ=ENV_PROD){" när det körs i Node.js 14 kommer alltid att vara sant, eftersom det inte letar efter skillnad, utan tilldelar värdet av ENV_PROD till variabeln "environmentǃ". Andra vilseledande unicode-tecken inkluderar "/", "−", "+", "⩵", "❨", "⫽", "꓿" och "∗".

Källa: opennet.ru

Lägg en kommentar