Nganggo karakter unicode anu teu katingali pikeun nyumputkeun tindakan dina kode JavaScript

Saatos metode serangan Sumber Trojan, anu didasarkeun kana panggunaan karakter Unicode anu ngarobih tatanan tampilan téks dua arah, téknik sanés pikeun ngawanohkeun tindakan disumputkeun parantos diterbitkeun, lumaku pikeun kode JavaScript. Metodeu anyar dumasar kana panggunaan karakter unicode "ㅤ" (kode 0x3164, "HANGUL FILLER"), anu kalebet kana kategori hurup, tapi henteu aya eusi anu katingali. Kategori Unicode nu karakter ieu milik geus diwenangkeun saprak spésifikasi ECMAScript 2015 pikeun pamakéan dina ngaran variabel JavaScript, sahingga bisa nyieun variabel halimunan atawa variabel anyar nu teu bisa dibédakeun tina variabel séjén dina redaktur kode populér kayaning Notepad ++ jeung VS Code.

Salaku conto, kodeu pikeun platform Node.js dipasihkeun, dimana, ngagunakeun variabel anu diwangun ku karakter tunggal "ㅤ", panto tukang disumputkeun anu ngamungkinkeun ngalaksanakeun kode anu ditangtukeun ku panyerang: app.get('/ network_health', async (req, res) => {const {timeout,ㅤ} = req.query; // kanyataanna nyebutkeun "const {timeout,ㅤ \u3164}"const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // koma dituturkeun ku karakter \u3164];

Dina glance kahiji, ngan nilai timeout ngaliwatan parameter éksternal, sarta Asép Sunandar Sunarya jeung paréntah pikeun dieksekusi ngandung daptar tetep bahya. Tapi dina kanyataanana, sanggeus variabel timeout, nilai variabel halimunan sejen kalawan kodeu karakter \u3164 ditugaskeun, nu ogé diganti kana Asép Sunandar Sunarya ti paréntah laksana. Janten, upami desain sapertos kitu sayogi, panyerang tiasa ngirim pamundut sapertos "https://host:8080/network_health?%E3%85%A4=command" pikeun ngaktipkeun backdoor sareng ngaéksekusi kodena.

Conto séjénna nyaéta aksara "ǃ" (ALVEOLAR CLICK), anu bisa dipaké pikeun méré penampilan nuduhkeun tanda seru. Contona, éksprési "lamun (environmentǃ=ENV_PROD){" lamun dieksekusi dina Node.js 14 bakal salawasna bener, sabab teu mariksa bédana, tapi nangtukeun nilai ENV_PROD kana variabel "environmentǃ". Karakter unicode anu nyasabkeun sanésna kalebet "/", "−", "+", "⩵", "❨", "⫽", "꓿" sareng "∗".

sumber: opennet.ru

Tambahkeun komentar