Używanie niewidocznych znaków Unicode do ukrywania działań w kodzie JavaScript

Po metodzie ataku Trojan Source opartej na wykorzystaniu znaków Unicode, które zmieniają kolejność wyświetlania tekstu dwukierunkowego, opublikowano inną technikę wprowadzania ukrytych działań, które można zastosować w kodzie JavaScript. Nowa metoda opiera się na wykorzystaniu znaku Unicode „ㅤ” (kod 0x3164, „HANGUL FILLER”), który jest klasyfikowany jako litera, ale nie ma widocznej zawartości. Kategoria Unicode, do której należy ten znak, jest dozwolona od czasu specyfikacji ECMAScript 2015 do stosowania w nazwach zmiennych JavaScript, dzięki czemu możliwe jest tworzenie niewidocznych zmiennych lub nowych zmiennych, których nie da się odróżnić od innych zmiennych w popularnych edytorach kodu, takich jak Notepad++ i VS Code.

Jako przykład podano kod dla platformy Node.js, w którym ukryte jest tylne wejście przy użyciu zmiennej składającej się z pojedynczego znaku „ㅤ”, co umożliwia wykonanie kodu określonego przez atakującego: app.get('/network_health', async (req, res) => { const { timeout,ㅤ} = req.query; // w rzeczywistości określono „const { timeout,ㅤ \u3164}” const checkCommands = [ 'ping -c 1 google.com', 'curl -s http://example.com/',ㅤ // po przecinku następuje znak \u3164 ];

Na pierwszy rzut oka przez parametr zewnętrzny przekazywana jest tylko wartość limitu czasu, a tablica poleceń do wykonania zawiera nieszkodliwą listę stałych wartości. Ale w rzeczywistości po zmiennej timeout przypisywana jest wartość innej, niewidocznej zmiennej o kodzie znaku \u3164, która również jest podstawiana do tablicy poleceń wykonywalnych. Jeśli zatem taka struktura jest dostępna, atakujący może wysłać żądanie w formie „https://host:8080/network_health?%E3%85%A4=command”, aby aktywować tylne wejście i wykonać swój kod.

Innym przykładem jest symbol „ǃ” (ALVEOLAR CLICK), który można wykorzystać do stworzenia wyglądu wykrzyknika. Na przykład wyrażenie „if(environmentǃ=ENV_PROD){” zawsze będzie prawdziwe po wykonaniu w Node.js 14, ponieważ nie sprawdza różnicy, ale zamiast tego przypisuje zmiennej „environmentǃ” wartość ENV_PROD. Inne wprowadzające w błąd znaki Unicode to „/”, „−”, „+”, „⩵”, „❨”, „⫽”, „꓿” i „∗”.

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster