Nach der Trojan Source-Angriffs-Methode, die auf der Verwendung von Unicode-Zeichen basiert, die die Anzeigereihenfolge von bidirektionalem Text Ă€ndern, wurde eine weitere Technik zur Einbettung versteckter Aktionen veröffentlicht, die fĂŒr Code in JavaScript anwendbar ist. Diese neue Methode basiert auf der Verwendung des Unicode-Zeichens âă €â (Code 0x3164, âHANGUL FILLERâ), das zu den Buchstaben gehört, aber keinen sichtbaren Inhalt hat. Die Unicode-Kategorie, zu der dieses Zeichen gehört, ist seit der Spezifikation ECMAScript 2015 fĂŒr die Verwendung in Variablennamen von JavaScript zulĂ€ssig, was es ermöglicht, unsichtbare Variablen oder neue Variablen zu erstellen, die sich nicht von anderen Variablen in beliebten Code-Editoren wie Notepad++ und VS Code unterscheiden lassen.
Als Beispiel wird Code fĂŒr die Node.js-Plattform angegeben, in dem durch eine Variablen, die aus einem 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 ĂŒber den externen Parameter nur der Wert fĂŒr den Timeout ĂŒbergeben, wĂ€hrend das Array mit den auszufĂŒhrenden Befehlen eine harmlose feste Liste enthĂ€lt. In der RealitĂ€t wird jedoch nach der Timeout-Variablen der Wert einer weiteren unsichtbaren Variablen mit dem Zeichencode \u3164 zugewiesen, die ebenfalls in das Array der auszufĂŒhrenden Befehle eingefĂŒgt wird. So kann ein Angreifer, bei Vorliegen einer solchen Konstruktion, um den Backdoor zu aktivieren und eigenen Code auszufĂŒhren, eine Anfrage wie âhttps://host:8080/network_health?=ĐșĐŸĐŒĐ°ĐœĐŽĐ°â senden.
Als weiteres Beispiel wird das Zeichen âÇâ (ALVEOLAR CLICK) angefĂŒhrt, das verwendet werden kann, um die Anzeichen eines Ausrufezeichens zu erzeugen. Beispielsweise wird der Ausdruck âif(environmentÇ=ENV_PROD){â bei AusfĂŒhrung in Node.js 14 immer wahr sein, da dabei keine UnterschiedsprĂŒfung stattfindet, sondern der Variable âenvironmentÇâ der Wert ENV_PROD zugewiesen wird. Zu den irrefĂŒhrenden Unicode-Zeichen gehören auch âïŒâ, âââ, âïŒâ, ââ©”â, ââšâ, â⫝̸â, âêżâ und âââ.
Quelle: opennet.ru
