Насколько безопасно использовать cat для произвольного файла?

Насколько безопасно использовать cat для произвольного файла?

Иногда, когда я catпо ошибке открываю двоичный файл, мой терминал портится. Ничего такого, что resetнельзя было бы быстро исправить, но разве не может злоумышленник теоретически создать файл, который при отображении на терминале выполнит некий произвольный код? Через эксплойт в эмуляторе терминала или иным образом.

решение1

Можно ли использовать такой вывод, зависит от терминальной программы и того, что делает этот терминал в зависимости от отправляемых escape-кодов. Я не знаю терминальных программ с такими эксплуатируемыми функциями, и единственная проблема сейчас заключается в том, что если есть неизвестное переполнение буфера или что-то в этом роде, что может быть использовано.

С некоторыми старыми hardwareтерминалами это может быть проблемой, так как вы программируете, например, функциональные клавиши с такими последовательностями выхода, сохраняя последовательность команд для этой клавиши в оборудовании. Вам все равно понадобится физическое нажатие клавиши, чтобы активировать это.

Но всегда есть (как справедливо отметил Хауке, «безмозглые») люди, готовые добавить такую ​​функцию, если она решит для них проблему, не понимая, какую лазейку они создают. По моему опыту работы с открытым исходным кодом, из-за множества глаз, смотрящих на код, это происходит реже, чем с закрытым исходным кодом. (Я помню, что в почтовой программе на Silicon Grahpics' Irix в середине девяностых можно было включать команды, которые должны были выполняться на машине получателя, реальные пути к исполняемым файлам, ....)

решение2

Большинство эмуляторов терминала отправят ответ, если получат определенные escape-последовательности (см.документация по управляющим последовательностям xterm). Например, вы можете отправить \e[0cэмулятору типа VT100, и он отправит обратно атрибуты устройства, что-то вроде \e[?1;2c (Вероятно, это то, что заметил Кит.) Но эти ответы не являются произвольными строками. Тем не менее, иметь исполняемый файл, названный 2cгде-то в вашей системе, который делает что-то фатальное, — плохая идея.

Обновление: Риски на самом деле больше, чем я думал, из-за возможности задать заголовок окна xtermи отправить обратно названиеиспользуя соответствующие управляющие последовательности (http://www.securityfocus.com/bid/6940/). В отличие от примера выше, заголовок может быть практически произвольной строкой.

решение3

Это изменяет заголовок терминала в GNOME Terminal 3.6.1, если только он не переопределен чем-то вродеПС1:

printf "\033]2;Script Kiddie was here\007"

Теперь откройте новое окно терминала GNOME, чтобы проверить версию cat:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin

Да, это также устанавливает название терминала.

Раньше была проблема безопасности сescape-код, приводящий к выводу заголовка в командную строку, так что вы могли бы эффективно создать файл, который при запуске cated печатал бы (я не уверен, можно ли вставить туда новую строку) произвольные команды. Ой!

решение4

Я определенно сталкивался со xtermвставкой произвольных символов в себя, как будто я их набрал. И иногда это, по-видимому, включало символ новой строки, так что я получил ngwerm:0riu: command not foundв ответ. Я не вижу причин, по которым кто-то не мог бы создать файл, который отправлял бы определенные вредоносные команды. Так что да, по крайней мере некоторые терминалы подвержены атакам с произвольным воздействием.

Связанный контент