Краткий ответ: во многих ситуациях Vim уязвим для такого рода атак (при вставке текста в режиме вставки).
Доказательство концепции
Используя связанную статью в качестве отправной точки, я смог быстро создать веб-страницу со следующим кодом, используя элементы span HTML и CSS, чтобы скрыть среднюю часть текста, чтобы ls -la
она была видна только случайному зрителю (не просматривая источник). Примечание: ^[
символ Escape и символ ^M
возврата каретки. Stack Exchange очищает пользовательский ввод и защищает от сокрытия содержимого с помощью CSS, поэтому я загрузил подтверждение концепции .
ls ^[:echom "This could be a silent command."^Mi -la
Если бы вы были в режиме вставки и вставили этот текст в терминал Vim (с некоторыми квалификаторами, см. Ниже), вы увидите, ls -la
но если вы запустите :messages
команду, вы увидите результаты скрытой команды Vim.
Оборона
Чтобы защититься от этой атаки, лучше оставаться в обычном режиме и вставлять, используя "*p
или "+p
. В нормальном режиме, когда р Utting текст из регистра, полный текст (включая скрытую часть) приклеивается. Этого не происходит в режиме вставки (даже если :set paste
).
Режим вставки в скобках
Последние версии Vim поддерживают режим вставки в скобках, который уменьшает этот тип атаки копирования-вставки. Сато Кацура пояснил, что «Поддержка вставки в скобках появилась в Vim 8.0.210 и была исправлена в версии 8.0.303 (выпущена 2 февраля 2017 г.)».
Примечание: Как я понимаю, версии Vim с поддержкой режима в квадратных скобках паста должна защитить вас при вставке с помощью Ctrl- Shift- V(большинство настольных сред GNU / Linux), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Insertили мышь щелчок средней кнопкой мыши.
тестирование
Позже я провел некоторое тестирование на настольном компьютере Lubuntu 16.04, но мои результаты были запутанными и неубедительными. С тех пор я понял, что это потому, что я всегда использую экран GNU, но оказывается, что экран фильтрует escape-последовательность, используемую для включения / отключения режима вставки в скобках ( патч есть, но похоже, что он был представлен в то время, когда проект активно не обслуживался). В моем тестировании проверка концепции всегда работает при запуске Vim через экран GNU, независимо от того, поддерживает ли Vim или эмулятор терминала режим вставки в скобках.
Дальнейшее тестирование было бы полезно, но пока я обнаружил, что поддержка режима вставки в квадратных скобках эмулятором терминала блокирует мое подтверждение концепции - до тех пор, пока экран GNU не блокирует соответствующие escape-последовательности. Однако пользователь nneonneo сообщает, что для выхода из режима вставки в скобках можно использовать тщательную обработку escape-последовательностей.
Обратите внимание, что даже в обновленной версии Vim Proof of Concept всегда работает, если пользователь вставляет данные из *
регистра в режиме вставки, набирая ( Ctrl- R*). Это также относится к GVim, который может различать типизированный и вставленный ввод. В этом случае Vim оставляет за пользователем право доверять содержимому их содержимого регистра. Так что никогда не используйте этот метод при вставке из ненадежного источника (это то, что я часто делаю - но сейчас я начал учиться не делать этого).
Ссылки по теме
Заключение
Используйте обычный режим при вставке текста (из регистров +
или *
).
... или используйте Emacs. Я слышал, что это достойная операционная система. :)