Menggunakan karakter unicode yang tidak terlihat untuk menyembunyikan tindakan dalam kode JavaScript

Mengikuti metode serangan Sumber Trojan berdasarkan penggunaan karakter Unicode yang mengubah urutan tampilan teks dua arah, teknik lain untuk memperkenalkan tindakan tersembunyi telah diterbitkan, berlaku untuk kode JavaScript. Metode baru didasarkan pada penggunaan karakter unicode "γ…€" (kode 0x3164, "HANGUL FILLER"), yang berupa huruf tetapi tidak memiliki konten yang terlihat. Kategori Unicode milik karakter ini telah diizinkan sejak spesifikasi ECMAScript 2015 untuk digunakan dalam nama variabel JavaScript, yang memungkinkan untuk membuat variabel tak terlihat atau variabel baru yang tidak dapat dibedakan dari variabel lain dalam editor kode populer seperti Notepad++ dan VS Code.

Sebagai contoh, kode untuk platform Node.js diberikan, di mana, menggunakan variabel yang terdiri dari satu karakter "γ…€", pintu belakang disembunyikan yang memungkinkan Anda mengeksekusi kode 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 ];

Sekilas, hanya nilai batas waktu yang dilewatkan melalui parameter eksternal, dan larik dengan perintah yang akan dijalankan berisi daftar tetap yang tidak berbahaya. Namun nyatanya, setelah variabel timeout, nilai variabel tak terlihat lainnya dengan kode simbol \u3164 ditetapkan, yang juga diganti ke dalam larik perintah yang dapat dieksekusi. Jadi, dengan adanya struktur seperti itu, penyerang dapat mengirim permintaan seperti "https://host:8080/network_health?%E3%85%A4=command" untuk mengaktifkan pintu belakang dan menjalankan kodenya.

Sebagai contoh lain, karakter "Ηƒ" (ALVEOLAR CLICK) diberikan, yang dapat digunakan untuk memberikan tampilan tanda seru. Misalnya, ekspresi "if(environmentΗƒ=ENV_PROD){" saat dieksekusi di Node.js 14 akan selalu benar, karena tidak memeriksa perbedaan, tetapi menyetel variabel "environmentΗƒ" ke ENV_PROD. Karakter unicode yang menyesatkan termasuk "/", "βˆ’", "οΌ‹", "β©΅", "❨", "β«½", "κ“Ώ", dan "βˆ—".

Sumber: opennet.ru

Tambah komentar