Краткий ответ: Во многих ситуациях Vim уязвим для такого рода атак (при вставке текста в режиме вставки) .
Используя связанную статью в качестве отправной точки, я смог быстро создать веб-страницу со следующим кодом, используя элементы диапазона 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
. В обычном режиме, когда p выводит текст из регистра, вставляется полный текст (включая скрытую часть).Этого не происходит в режиме вставки (даже если установлен параметр : 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 - Вставьте или средний щелчок мыши.
Позже я провел некоторое тестирование на настольном компьютере с Lubuntu 16.04, но мои результаты были запутанными и неубедительными. С тех пор я понял, что это потому, что я всегда использую экран GNU , но оказывается, что экран фильтрует escape-последовательность, используемую для включения / выключения режима вставки в скобках (есть патч , но похоже, что он был отправлен в то время, когда проект активно не поддерживался). В моем тестировании доказательство концепции всегда работает при запуске Vim через экран GNU, независимо от того, поддерживает ли Vim или эмулятор терминала режим вставки в скобках.
Дальнейшее тестирование было бы полезно, но до сих пор я обнаружил, что поддержка режима вставки в скобках эмулятором терминала блокирует мое Доказательство концепции - до тех пор, пока экран GNU не блокирует соответствующие escape-последовательности. Однако пользователь nneonneo сообщает , что для выхода из режима вставки в скобки можно использовать тщательную обработку управляющих последовательностей.
Обратите внимание, что даже с последней версией Vim Proof of Concept всегда работает, если пользователь вставляет данные из регистра *
в режиме вставки, набрав ( Ctrl ] - R * ). Это также относится к GVim, который может различать типизированный и вставленный ввод. В этом случае Vim предоставляет пользователю возможность доверять содержимому их регистров. Так что никогда не используйте этот метод при вставке из ненадежного источника (я часто это делаю, но теперь я начал приучать себя не делать этого).
Используйте обычный режим при вставке текста (из регистров +
или *
).
… или используйте Emacs. Я слышал, это приличная операционная система. :)
Опять же, я смог решить свою проблему. Вот как:
на экране входа в систему я вошел в режим терминала и набрал:
cvt 1440 900 75
(мои желаемые разрешения и частота обновления, и скопировал строку модели)su
nano /etc/X11/xorg.conf
Здесь я обновил частоту обновления и добавил всю строку модели.
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 30.0 - 81.0
VertRefresh 56.0 - 76.0
Modeline "1440x900_75.00" 136.75 1440 1536 1688 1936 900 903 909 942 -hsync +vsync
Option "DPMS"
EndSection