Përdorimi i karaktereve të padukshme unicode për të fshehur veprimet në kodin JavaScript

Pas metodës së sulmit të Trojan Source, e cila bazohet në përdorimin e karaktereve Unicode që ndryshojnë rendin e shfaqjes së tekstit me dy drejtime, është publikuar një teknikë tjetër për prezantimin e veprimeve të fshehura, e zbatueshme për kodin JavaScript. Metoda e re bazohet në përdorimin e karakterit unicode “ㅤ” (kodi 0x3164, “HANGUL FILLER”), i cili i përket kategorisë së shkronjave, por nuk ka përmbajtje të dukshme. Kategoria Unicode në të cilën bën pjesë ky karakter është lejuar që nga specifikimi ECMAScript 2015 për përdorim në emrat e ndryshoreve JavaScript, duke bërë të mundur krijimin e variablave të padukshëm ose variablave të rinj që janë të padallueshëm nga variablat e tjerë në redaktuesit e kodit të njohur si Notepad++ dhe VS Code.

Si shembull, jepet kodi për platformën Node.js, në të cilin, duke përdorur një variabël të përbërë nga një karakter i vetëm "ㅤ", fshihet një derë e pasme që lejon ekzekutimin e kodit të specifikuar nga sulmuesi: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // në fakt thotë "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // presja ndiqet nga karakteri \u3164 ];

Në pamje të parë, vetëm vlera e afatit kalohet përmes parametrit të jashtëm dhe grupi me komandat që do të ekzekutohen përmban një listë fikse të padëmshme. Por në fakt, pas ndryshores së afatit, caktohet vlera e një ndryshoreje tjetër të padukshme me kodin e karakterit \u3164, e cila gjithashtu zëvendësohet në grupin e komandave të ekzekutueshme. Kështu, nëse një dizajn i tillë është i disponueshëm, një sulmues mund të dërgojë një kërkesë si "https://host:8080/network_health?%E3%85%A4=command" për të aktivizuar backdoor dhe për të ekzekutuar kodin e tyre.

Një shembull tjetër është karakteri "ǃ" (KLIK ALVEOLAR), i cili mund të përdoret për të dhënë pamjen e një pikëçuditjeje. Për shembull, shprehja "if(environmentǃ=ENV_PROD){" kur ekzekutohet në Node.js 14 do të jetë gjithmonë e vërtetë, pasi nuk kontrollon ndryshimin, por ia cakton vlerën ENV_PROD ndryshores "mjedis". Karaktere të tjera mashtruese unicode përfshijnë "/", "−", "+", "⩵", "❨", "⫽", "꓿" dhe "∗".

Burimi: opennet.ru

Shto një koment