Näkymättömien unicode-merkkien käyttäminen toimintojen piilottamiseen JavaScript-koodissa

Trojan Source -hyökkäysmenetelmän jälkeen, joka perustuu Unicode-merkkien käyttöön, jotka muuttavat kaksisuuntaisen tekstin näyttöjärjestystä, on julkaistu toinen JavaScript-koodiin soveltuva tekniikka piilotettujen toimien tuomiseksi. Uusi menetelmä perustuu kirjainten luokkaan kuuluvan unicode-merkin "ㅤ" (koodi 0x3164, "HANGUL FILLER") käyttöön, mutta jolla ei ole näkyvää sisältöä. Unicode-luokka, johon tämä merkki kuuluu, on sallittu ECMAScript 2015 -spesifikaatiosta lähtien käyttää JavaScript-muuttujien nimissä, mikä mahdollistaa näkymättömien muuttujien tai uusien muuttujien luomisen, joita ei voi erottaa muista muuttujista suosituissa koodieditoreissa, kuten Notepad++ ja VS Code.

Esimerkkinä on annettu Node.js-alustan koodi, jossa yhdestä merkistä ”ㅤ” koostuvaa muuttujaa käyttämällä piilotetaan takaovi, joka mahdollistaa hyökkääjän määrittämän koodin suorittamisen: app.get('/ network_health', async (req, res) = > { const { aikakatkaisu,ㅤ} = req.query; // itse asiassa se sanoo "const { aikakatkaisu,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // pilkkua seuraa merkki \u3164 ];

Ensi silmäyksellä vain aikakatkaisuarvo välitetään ulkoisen parametrin läpi, ja suoritettavat komennot sisältävä matriisi sisältää vaarattoman kiinteän listan. Mutta itse asiassa aikakatkaisumuuttujan jälkeen määritetään toisen näkymätön muuttujan arvo merkkikoodilla \u3164, joka myös korvataan suoritettavien komentojen joukkoon. Siten, jos tällainen malli on saatavilla, hyökkääjä voi lähettää pyynnön, kuten "https://host:8080/network_health?%E3%85%A4=command", aktivoidakseen takaoven ja suorittaakseen koodinsa.

Toinen esimerkki on merkki "ǃ" (ALVEOLAR CLICK), jota voidaan käyttää osoittamaan huutomerkkiä. Esimerkiksi lauseke "if(environmentǃ=ENV_PROD){", kun se suoritetaan Node.js 14:ssä, on aina tosi, koska se ei tarkista eroja, vaan määrittää ENV_PROD-arvon muuttujalle "environmentǃ". Muita harhaanjohtavia unicode-merkkejä ovat "/", "−", "+", "⩵", "❨", "⫽", "꓿" ja "∗".

Lähde: opennet.ru

Lisää kommentti