Jawaban singkat: Dalam banyak situasi, Vim rentan terhadap serangan semacam ini (saat menempelkan teks dalam mode Sisipkan).
Bukti dari konsep
Menggunakan artikel yang ditautkan sebagai titik awal, saya dapat dengan cepat membuat halaman web dengan kode berikut, menggunakan elemen rentang HTML dan CSS untuk menyembunyikan bagian tengah teks sehingga hanya ls -la
dapat dilihat oleh pengunjung biasa (tidak melihat sumber). Catatan: ^[
adalah karakter Escape dan ^M
adalah karakter carriage return. Stack Exchange membersihkan input pengguna dan melindungi dari penyembunyian konten menggunakan CSS jadi saya telah mengunggah bukti konsep .
ls ^[:echom "This could be a silent command."^Mi -la
Jika Anda berada dalam mode Sisipkan dan menempelkan teks ini ke terminal Vim (dengan beberapa kualifikasi, lihat di bawah) Anda akan melihat ls -la
tetapi jika Anda menjalankan :messages
perintah, Anda dapat melihat hasil dari perintah Vim tersembunyi.
Pertahanan
Untuk bertahan melawan serangan ini, yang terbaik adalah tetap dalam mode Normal dan menempelkan menggunakan "*p
atau "+p
. Dalam mode Normal, ketika p mengucapkan teks dari register, teks lengkap (termasuk bagian tersembunyi) ditempel. Hal yang sama tidak terjadi pada mode Sisipkan (bahkan jika :set paste
) telah ditetapkan.
Mode pasta braket
Versi terbaru Vim mendukung mode tempel kurung yang memitigasi jenis serangan salin-tempel ini. Sato Katsura telah mengklarifikasi bahwa "Dukungan untuk pasta braket muncul di Vim 8.0.210, dan yang terbaru diperbaiki dalam versi 8.0.303 (dirilis pada 2 Februari 2017)".
Catatan: Seperti yang saya pahami, versi Vim dengan dukungan untuk mode tempel kurung akan melindungi Anda saat menempel menggunakan Ctrl- Shift- V(sebagian besar lingkungan desktop GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Insertatau mouse klik tengah.
Pengujian
Saya melakukan beberapa pengujian dari mesin desktop Lubuntu 16.04 kemudian, tetapi hasil saya membingungkan dan tidak meyakinkan. Saya sejak menyadari bahwa ini adalah karena saya selalu menggunakan layar GNU tetapi ternyata layar menyaring urutan melarikan diri yang digunakan untuk mengaktifkan / menonaktifkan mode tempel kurung (ada tambalan tetapi sepertinya itu disampaikan pada saat ketika proyek tidak dipelihara secara aktif). Dalam pengujian saya, bukti konsep selalu berfungsi ketika menjalankan Vim melalui layar GNU, terlepas dari apakah Vim atau terminal emulator mendukung mode tempel kurung.
Pengujian lebih lanjut akan bermanfaat tetapi, sejauh ini, saya menemukan bahwa dukungan untuk mode rekatkan kurung oleh emulator terminal memblokir Bukti Konsep saya - selama layar GNU tidak memblokir urutan pelarian yang relevan. Namun, pengguna nneonneo melaporkan bahwa pembuatan urutan escape yang hati-hati dapat digunakan untuk keluar dari mode tempel di kurung.
Perhatikan bahwa bahkan dengan versi terbaru Vim, Bukti Konsep selalu berfungsi jika pengguna menempel dari *
register saat dalam mode Sisipkan dengan mengetik ( Ctrl- R*). Ini juga berlaku untuk GVim yang dapat membedakan antara input yang diketik dan yang ditempel. Dalam hal ini, Vim menyerahkannya kepada pengguna untuk mempercayai konten dari konten register mereka. Jadi jangan pernah menggunakan metode ini ketika menempelkan dari sumber yang tidak terpercaya (ini adalah sesuatu yang sering saya lakukan - tapi sekarang saya sudah mulai melatih diri untuk tidak melakukannya).
Tautan yang berhubungan
Kesimpulan
Gunakan mode Normal saat menempelkan teks (dari +
atau *
mendaftar).
... atau gunakan Emacs. Saya dengar ini sistem operasi yang bagus. :)