Является ли Vim иммунным для атаки с копией-пастой?

Вы должны никогда не вставлять из Интернета к вашему терминалу . Вместо этого вы должны вставить в текстовый редактор, проверить команду и затем вставить ее в терминал.

Все в порядке, но что, если Vim - мой текстовый редактор? Можно ли подделать контент, который переключает Vim в командный режим и выполняет вредоносную команду?

110 голосов | спросил Adam Trhon 3 PMpMon, 03 Apr 2017 16:07:21 +030007Monday 2017, 16:07:21

1 ответ


105

Краткий ответ: Во многих ситуациях Vim уязвим для такого рода атак (при вставке текста в режим вставки).

Доказательство концепции

Используя связанную статью в качестве отправной точки, я смог быстро создать веб-страницу со следующим кодом, используя элементы HTML span и 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), Команда - V (Mac OS X), Shift - Вставить или щелкнуть средним щелчком мыши.

Тестирование

Я провел некоторое тестирование с настольной машины Lubuntu 16.04 позже, но мои результаты были непонятными и неубедительными. Я понял, что это потому, что я всегда использую экран GNU , но оказывается, что screen фильтрует escape-последовательность, используемую для включения /выключения режима вставки в скобки (там это патч , но похоже, что это было представленный в то время, когда проект не активно поддерживался). В моем тестировании доказательство концепции всегда работает при запуске Vim через экран GNU, независимо от того, поддерживает ли Vim или эмулятор терминала режим вставки в скобки.

Дальнейшее тестирование было бы полезным, но до сих пор я обнаружил, что поддержка режима вставки в скобки с помощью эмулятора терминала блокирует мое доказательство концепции â € ", пока экран GNU не блокирует соответствующие escape-последовательности. Однако пользователь nneonneo , что для выхода из режима вставки в скобках можно использовать тщательное создание управляющих последовательностей.

Обратите внимание, что даже с обновленной версией Vim Proof of Concept всегда работает, если пользователь вставляет из регистра * в режиме Вставки, набрав ( Ctrl - R * ). Это также относится к GVim, который может различать введенный и вставленный ввод. В этом случае Vim оставляет за собой право доверять содержимому содержимого своего регистра. Поэтому никогда не используйте этот метод при вставке из ненадежного источника (это то, что я часто делаю), но теперь я начал тренироваться, чтобы не делать этого.

Ссылки по теме

Заключение

Используйте обычный режим при вставке текста (из регистров + или *).

  

â € | или используйте Emacs. Я слышал, что это приличная операционная система. :)

ответил Anthony Geoghegan 3 PMpMon, 03 Apr 2017 17:03:23 +030003Monday 2017, 17:03:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132