由 Urabe Shyouhei 发布于 2009 年 6 月 9 日
在 Ruby 的 BigDecimal 标准库中发现了一个拒绝服务 (DoS) 漏洞。从 BigDecimal 对象转换为 Float 数字的过程中存在一个问题,这使攻击者可以有效地导致段错误。
ActiveRecord 依赖于此方法,因此大多数 Rails 应用程序都会受到影响。尽管这不是一个 Rails 特有的问题。
影响
攻击者可以通过导致 BigDecimal 解析一个非常大的数字,例如以下情况,来造成拒绝服务:
BigDecimal("9E69999999").to_s("F")
受影响的版本
1.8 系列
- 1.8.6-p368 和所有更早版本
- 1.8.7-p160 和所有更早版本
1.9 系列
- 所有 1.9.1 版本不受此问题的影响
解决方案
1.8 系列
请升级到 1.8.6-p369 或 ruby-1.8.7-p174。
- https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p369.tar.gz
- https://cache.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
更新
- Ruby 1.8.7-p173 存在一个问题。如果您已经下载了它,请获取更新的版本。Ruby 1.8.6-p369 没有此错误。