VT100终端(所有现代终端仿真器都在某种程度上进行了仿真)支持许多有问题的命令,但是现代仿真器或发行版禁用了问题更多,使用较少的命令。这是潜在风险转义序列的不完整列表(不包括仅使显示无法以某种方式显示的序列):
- HD Moore报告的 rxvt和Eterm中的任意日志文件命令。这些确实是主要的错误,所幸已长期修复。
- 由
ENQ
(Ctrl+E
)调用的answerback命令,也称为“返回终端状态” 。这会将文本插入终端,就像用户键入文本一样。但是,此文本不受攻击者的控制:它是终端的自己的名称,通常类似于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
资源来启用它们。Ubuntu 10.04下的Gnome-terminal默认情况下甚至实现标题应答。我没有检查其他终端或版本。
- 用于设置终端标题或图标名称的命令。在xterm和大多数其他X终端下,它们是。在“屏幕”下,转义序列为。我发现这些命令被高估了。尽管它们确实允许一些恶作剧,但是任何网页都存在相同的问题。在窗口上仅根据其标题而不是根据其类别进行操作类似于打开一个文件,该文件的名称是由不信任方提供给您的,或者不引用shell脚本中的可变扩展名,或者在鼻子上拍打狂犬病—如果被咬,请不要抱怨。
ESC ] digit ; title ESC \
ESC k title ESC \
我发现Varnish的回应很轻率。感觉就像是在试图怪罪别人,还是在安全性纳粹模式下(任何安全问题,无论是真实的还是不安全的,都在为功能打黑)。
通常会定期询问终端响应转义的智慧,但是仍然没有一个主要的终端仿真程序适合丢弃这些序列,这可能是在与不再使用的1970's技术兼容的错误尝试。(…)
从安全性的角度来看,与其责怪编写日志文件的所有程序,不如让终端仿真程序停止做愚蠢的事情,从而一劳永逸地解决此问题和其他安全问题,这将更有效率。对所有人。
许多答案都是有用的功能:应用程序确实需要了解诸如光标位置和窗口大小之类的内容。设置窗口标题也非常有用。可能完全依赖ioctl
于这些调用,但是这将需要其他代码和实用程序来进行这些ioctl
调用,并将它们转换为传递给文件描述符的unix样式的文本。现在更改这些接口将是一项繁重的工作,但收效甚微。
文本文件不应包含非打印字符,例如控制字符。日志文件通常应为文本文件。日志文件不应包含控制字符。
如果您担心某个文件可能包含转义序列,请在编辑器中将其打开,或者使用less
不带-r
or -R
选项的文件进行查看,或者通过进行查看cat -v
。