WEBrick 存在转义序列注入漏洞

在 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)

解决方案

鸣谢

感谢 Giovanni "evilaliv3" Pellerano、Alessandro "jekil" Tanasi 和 Francesco "ascii" Ongaro 发现此漏洞。