由 Urabe Shyouhei 发布于 2010 年 1 月 10 日
在 Ruby 标准库的一部分 WEBrick 中发现了一个漏洞。WEBrick 允许攻击者将恶意转义序列注入到其日志中,从而使危险的控制字符能够在受害者的终端模拟器上执行。
我们已经有了修复方案。每个活动分支的版本都将在此公告之后发布。但在过渡期间,我们建议您在更新 WEBrick 进程之前避免查看 WEBrick 日志。
详细描述
终端转义序列用于允许终端和内部进程之间进行各种形式的交互。问题在于这些序列不应由不受信任的来源(例如网络输入)发布。因此,如果远程攻击者可以将转义序列注入到 WEBrick 日志中,并且受害者恰好通过他的/她的终端查阅它们,则攻击者可以利用终端模拟器中的各种漏洞。
而 WEBrick 未能过滤这些终端转义序列。
示例
% xterm -e ruby -rwebrick -e 'WEBrick::HTTPServer.new(:Port=>8080).start' &
% wget https://127.0.0.1:8080/%1b%5d%32%3b%6f%77%6e%65%64%07%0a
注意 xterm 的窗口标题。
受影响的版本
- Ruby 1.8.6 patchlevel 383 及所有早期版本
- Ruby 1.8.7 patchlevel 248 及所有早期版本
- Ruby 1.8 的开发版本(1.8.8dev)
- Ruby 1.9.1 patchlevel 376 及所有早期版本
- Ruby 1.9 的开发版本(1.9.2dev)
解决方案
- 1.8.6、1.8.7 和 1.9.1 的修复程序将在此公告之后发布。
- 更新 1.8.7 pl. 249 已发布以修复此问题。建议 1.8.7 用户升级。
- 更新 1.9.1 pl. 378 已发布以修复此问题。建议 1.9.1 用户升级。
- 更新 1.8.6 pl. 388 已发布以修复此问题。建议 1.8.6 用户升级。
- 对于开发版本,请更新到每个开发分支的最新修订版。
鸣谢
感谢 Giovanni "evilaliv3" Pellerano、Alessandro "jekil" Tanasi 和 Francesco "ascii" Ongaro 发现此漏洞。