Utilizarea simbolurilor unicode invizibile pentru a ascunde acțiunile în codul JavaScript

După metoda de atac Trojan Source, care se bazează pe utilizarea simbolurilor Unicode pentru a schimba ordinea afișării textului bidirecțional, a fost publicată o altă tehnică de introducere a acțiunilor ascunse, aplicabilă codului JavaScript. Noua metodă se bazează pe utilizarea simbolului unicode „ㅤ” (cod 0x3164, „HANGUL FILLER”), care face parte din categoria literelor, dar nu are conținut vizibil. Categoria Unicode din care face parte acest simbol este permisă începând cu specificația ECMAScript 2015 pentru utilizarea în denumirile variabilelor JavaScript, ceea ce permite crearea de variabile invizibile sau variabile noi, nedistincte de alte variabile în editoarele de cod populare, precum Notepad++ și VS Code.

Ca exemplu, este prezentat codul pentru platforma Node.js, în care, printr-o variabilă formată dintr-un singur simbol „ㅤ”, este ascuns un backdoor care permite executarea codului specificat de atacator: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // de fapt este specificat „const { timeout,ㅤ \u3164}” const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // după virgulă se află simbolul \u3164 ];

La prima vedere, prin parametrul extern se transmite doar valoarea timeout, iar array-ul cu comenzile executate conține o listă fixă inofensivă. Dar, de fapt, după variabila timeout este atribuită valoarea unei alte variabile invizibile cu codul caracterului \u3164, care este de asemenea inclusă în array-ul comenzilor de execuție. Astfel, în prezența unei astfel de construcții, pentru a activa un backdoor și a executa propriul cod, atacatorul poate trimite o solicitare de tipul „https://host:8080/network_health?=comandă”.

Ca un alt exemplu, este prezentat simbolul „ǃ” (ALVEOLAR CLICK), care poate fi utilizat pentru a crea impresia de a indica un semn de exclamare. De exemplu, expresia „if(environmentǃ=ENV_PROD){” va fi întotdeauna adevărată în Node.js 14, deoarece nu se efectuează o verificare a diferenței, ci se atribuie variabilei „environmentǃ” valoarea ENV_PROD. Printre simbolurile unicode care induc în eroare, se mai menționează „/”, „−”, „+”, „⩵”, „❨”, „⫽”, „꓿” și „∗”.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster