Коротка відповідь: У багатьох ситуаціях 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
. У нормальному режимі, коли р 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, але виявляється, що екран фільтрує послідовність запуску, що використовується для вмикання / відключення режиму скріпленої скоби (є патч, але, схоже, він був поданий у той момент, коли проект активно не підтримується). У моєму тестуванні доказ поняття завжди працює під час запуску Vim через екран GNU, незалежно від того, підтримує Vim або емулятор терміналу встановлений в рамці скотч.
Подальше тестування було б корисним, але поки що я виявив, що підтримка режиму скореного вставки за допомогою термінального емулятора блокує моє доказ концепції - доки екран GNU не блокує відповідні послідовності втечі. Однак користувач nneonneo повідомляє, що ретельне складання послідовностей евакуації може бути використане для виходу з режиму вставки , що складається з скобами .
Зауважте, що навіть із оновленою версією Vim, Proof of Concept завжди працює, якщо користувач вставляє з *
реєстру, перебуваючи в режимі Insert, ввівши ( Ctrl- R*). Це також стосується GVim, який може відрізняти введений та вкладений вхід. У цьому випадку Vim залишає його користувачеві довіряти вмісту вмісту свого реєстру. Тому ніколи не використовуйте цей метод, коли вставляєте з недовіреного джерела (це те, що я часто роблю, але зараз я почав тренуватись не робити цього).
Пов'язані посилання
Висновок
Використовуйте звичайний режим під час вставки тексту (з +
або *
реєстрів).
… Або використовувати Emacs. Я чую, що це гідна операційна система. :)