Термінали VT100 (які певною мірою емулюють усі сучасні емулятори терміналів) підтримують ряд проблемних команд, але сучасні емулятори чи дистрибутиви відключають більш проблемні та менш корисні. Ось невичерпний список потенційно ризикованих послідовностей втечі (не враховуючи тих, які просто роблять відображення певним чином нечитаним):
- Довільні команди журнальних файлів у rxvt та Eterm повідомляють HD Moore . Це справді основні помилки, на щастя, давно виправлені.
- Команда відповіді, також відома як Стан терміналу повернення, на яку викликається
ENQ
( Ctrl+E
). Це вставляє текст у термінал так, ніби користувач ввів його. Однак цей текст не знаходиться під контролем зловмисника: це власне ім'я терміналу, як правило, щось на зразок xterm
або screen
. У моїй системі (стиснення Debian) xterm повертає порожню рядок за замовчуванням (цим керує answerbackString
ресурс).
- Команди
ESC [ c
та друзі команди "Надіслати атрибути пристрою" . Термінал відповідає з ESC [ … c
(де …
може містити цифри та розділові знаки ASCII). Це спосіб запиту деяких можливостей терміналу, здебільшого застарілих, але, можливо, використовуються старими програмами. Знову ж таки, відповідь терміналу не відрізняється від введення користувачем, але він не знаходиться під контролем зловмисника. Послідовність керування може виглядати як функціональна клавіша, але лише у випадку, якщо користувач має незвичну конфігурацію (жоден із звичайних налаштувань, з якими я стикався, не має дійсної послідовності виходу функціональної клавіші, яка є префіксом термінальної відповіді).
- Різні функції управління пристроєм (DCS вимикається, починаючи з
ESC P
).
- Я не знаю, яку шкоду можна зробити
DECUDK
(встановити визначені користувачем клавіші) на типовому емуляторі терміналу.
DECRQSS
(Рядок запиту статусу) - це ще одна команда, на яку термінал відповідає відповідною послідовністю, на цей раз починаючи з \eP
; це може бути проблематично, оскільки \eP
це дійсний ключ ( Alt+ Shift+ P).
- Xterm має ще дві експериментальні особливості:
ESC P + p …
і ESC P + q …
, щоб отримати та встановити рядки termcap. З опису це може бути використане принаймні для зміни ефекту функціональних клавіш.
- Кілька команд звіту про стан:
ESC [ … n
(Звіт про стан пристрою). Термінал відповідає послідовністю відходу. Більшість цих послідовностей евакуації не відповідають функціональним послідовностям функціональних клавіш. Одне виглядає проблематично: звіт ESC [ 6 n
складається у формі, де є і знакові послідовності, і це могло б виглядати як з деякими модифікаторами.ESC [ x ; y R
x
y
F3
- Команди віконних маніпуляцій
ESC [ … t
.
- Деякі з них дозволяють змінити розмір вікна xterm, іконіфікувати тощо, що є руйнівним.
- Деякі з них призводять до того, що термінал реагує на будь-яку послідовність виходу. Більшість цих послідовностей евакуації виглядають з низьким рівнем ризику, однак є дві небезпечні команди: відповіді
ESC [ 2 0 t
та відповідні ESC [ 2 1 t
ярлики та заголовки вікна терміналу відповідно, а зловмисник може вибрати їх.
- Принаймні під натисканням Debian, xterm ігнорує ці команди за замовчуванням; їх можна ввімкнути, встановивши
allowWindowOps
ресурс, або вибірково через disallowedWindowOps
ресурс. Gnome-термінал в Ubuntu 10.04 реалізує навіть відповіді заголовків за замовчуванням. Я не перевіряв інші термінали чи версії.
- Команди, щоб встановити назву термінала або ім'я піктограми. Під xterm та більшості інших X-терміналів вони є . Під екраном послідовність відходу є . Я вважаю занепокоєння з приводу цих команд завищеним. Хоча вони допускають певну кількість пустощів, будь-яка веб-сторінка має той самий випуск. Діяти у вікні, заснованому виключно на його заголовку, а не на своєму класі, це подібне до відкриття файлу, ім'я якого вам дала недовірена сторона, або не цитування змінного розширення в сценарії оболонки, або погладжування шаленої собаки по носу - не нарікайте, якщо вас покусали.
ESC ] digit ; title ESC \
ESC k title ESC \
Я вважаю, що відповідь Варніса є сумлінною. Складається враження, що він або намагається перекласти звинувачення, або в режимі нацистів безпеки (будь-яка турбота про безпеку, справжня чи ні, виправдовує функцію шантажу).
Загалом, мудрість уникнення термінальної відповіді ставилася під сумнів через регулярні проміжки часу, але все ще жодна з основних програм емуляції терміналів не вважає за потрібне відкинути ці послідовності, ймовірно, в помилковій спробі сумісності з уже не використовуваною технологією 1970-х років. (…)
Замість того, щоб звинувачувати будь-яку програму, яка записує логіни, було б набагато продуктивніше з точки зору безпеки отримати програми емуляції терміналів перестати робити дурні речі і таким чином виправити цю та інші проблеми безпеки раз і за всіх.
Багато відповідей є корисними функціями: програмі потрібно знати такі речі, як положення курсору та розмір вікна. Налаштування заголовка вікна також дуже корисно. ioctl
Для цих дзвінків можна повністю покластися , однак для цього потрібні були додаткові код та утиліти для здійснення цих ioctl
викликів та переведення їх у текст у стилі unix, передаючи дескриптори файлів. Змінити ці інтерфейси зараз було б багато роботи, мало користі.
Текстові файли не повинні містити символи, що не друкуються, такі як контрольні символи. Файли журналу, як правило, очікуються текстовими файлами. Файли журналу не повинні містити контрольних символів.
Якщо ви переживаєте, що файл може містити послідовності запуску, відкрийте його в редакторі або перегляньте його less
без опції -r
або -R
опції або перегляньте його cat -v
.