Чи захищений Vim від атаки копіювання та вставки?


112

Ніколи не слід вставляти з Інтернету свій термінал . Натомість слід вставити текстовий редактор, перевірити команду та вставити в термінал.

Це нормально, але що робити, якщо Vim є моїм текстовим редактором? Чи можна підробити вміст, який перемикає Vim в командний режим і виконує зловмисну ​​команду?


2
@ryekayo Я знаю, як запускати команди у фоновому режимі. Питання стосується того, чи можна переключити vim з режиму вставки в командний режим, а потім виконати що завгодно
Адам Трхон

3
В останніх версіях Vim встановлена ​​дужка, яка повинна запобігти подібним нападів.
Satō Katsura

2
@ EmilJeřábek Посилання в публікації дає вам достатньо причин бігати за пагорби, а не робити це.
Satō Katsura

1
@ EmilJeřábek Оскільки ви можете підробити прихований текст із символом Escape, я припускаю, що ви також можете підробити текст за допомогою EOF. Тоді прихований текст може містити щось як /bin/bash ; EOF rm -rf ~. Якщо вставити його в термінал, він запустить удар, завершить його та видалить ваш будинок. Якщо вставити його в кішку, це дозволить кішці надрукувати команду, закінчити кішку та видалити ваш будинок.
Адам Трхон

Відповіді:


106

Коротка відповідь: У багатьох ситуаціях 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. Я чую, що це гідна операційна система. :)


2
Ви повинні ввімкнути pasteрежим ( :set paste) перед вставкою у Vim. Тоді введена в дію скора паста, якщо ваш термінал також підтримує її. Ваш доказ концепції не працює, коли pasteрежим увімкнено.
Satō Katsura

1
Я не бачу, наскільки безпечний режим із вставленою скобою. Якщо зловмисник знає, що ви використовуєте скорене вставлену пасту, він просто наклеїть \e[201~послідовність у команді вставки, щоб вийти з режиму скореного вставки, і все одно продовжуватимете забивати вас. (Якщо я не пропустив детальну інформацію про те, як працює
клейка

2
@SatoKatsura: Я спробував це на Vim 8.0.540, який не був вразливим до початкової атаки. Після додавання \x1b[201~експлуатація функціонувала, як і раніше (тобто ls -laзаписувалася лише в буфер і echomкоманда виконувалася). Тому я вважаю, що скоринована паста все ще вразлива для цілеспрямованого нападу, і не є достатньо сильним рішенням. (Дійсно, будь-яка форма внутрішньодіапазонної сигналізації вразлива!)
nneonneo

2
Я спробував це і без, і без :set paste- експлуатація все ще працює. Щоб бути абсолютно ясно, я вставив наступний ( в кодуванні base64) блоб: bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=. В OS X ви можете скопіювати це, запустіть, pbpaste | base64 -D | pbcopyщоб отримати необроблену версію, на яку потрібно вставити vim.
nneonneo

1
Щоб бути ще більш зрозумілим, я тестую підключення SSH до коробки Ubuntu 16.04, використовуючи macOS Terminal.app. Якщо ваш термінальний емулятор знімає послідовність виходу на пасту, ви, ймовірно, можете вкласти послідовність (наприклад \x1b\x1b[201~[201~) або щось, щоб обдурити фільтр.
nneonneo

0

Якщо ви використовуєте функцію буфера обміну X11 або еквівалент платформи, і ви використовуєте вставку середньої кнопки з увімкненою підтримкою миші або командою vim paste, а не будь-якою командою термінальної вставки (Shift-Middle-кнопка або будь-які ярлики терміналу пропозиції), то ви можете бути в безпеці.

Якщо ні, то якщо у вас є термінальний емулятор, який підтримує режим із скобою вставкою, і ви ввімкнули це у своєму терміналі та vim, і цей емулятор термінала реалізує захист від введення послідовності введення, яка закінчується режимом із вставкою, тоді ви можете бути в безпеці.

Якщо ні, то ви можете бути вразливими до атаки, описаної тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.