下载 Bash 的源代码后,我浏览了doc
目录并遇到了以下文件:
这些控制字符不会显示在 Git Web 界面提供的表示中,但可以下载实际文件并在 Vim 等文本编辑器中检查。
在file
on 上运行命令会bash.0
打印以下输出:
bash.0: ASCII text, with overstriking
Run Code Online (Sandbox Code Playgroud)
我以前从未遇到过这种文件格式,我想知道它的用途是什么以及如何使用。在 Web 上搜索短语“ASCII 文本,加粗”并不是很有启发性。
阅读CVE-2009-4487 的细节(这是关于日志文件中转义序列的危险)我有点惊讶。
nginx 0.7.64 将数据写入日志文件而不清理不可打印的字符,这可能允许远程攻击者通过包含终端模拟器转义序列的 HTTP 请求修改窗口的标题,或可能执行任意命令或覆盖文件。
显然,这实际上并不是 nginx 中的安全漏洞,而是终端模拟器中的安全漏洞。
当然,也许cat
将日志文件写入终端只是偶然发生的,但是将日志文件写入grep
是很常见的。less
也许清理转义序列,但谁知道什么 shell 命令不会改变转义序列......
我倾向于同意Varnish 的回应:
终端响应转义的智慧通常定期受到质疑,但仍然没有一个主要的终端仿真程序认为适合丢弃这些序列,这可能是在与不再使用的 1970 年代技术兼容的误导尝试中。[..] 从安全的角度来看,让终端仿真程序停止做愚蠢的事情,从而解决这个和其他安全问题,而不是责怪任何和所有写入日志文件的程序,这将更有效率和所有人。
因此我的问题:
我如何保护我的 xterm,以便不再可能通过转义序列执行命令或覆盖文件?
X 的哪些终端模拟器可以抵御这种攻击?
security terminal-emulator xterm special-characters escape-characters