BigDecimal 中的 DoS 漏洞

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

更新

  • Ruby 1.8.7-p173 存在一个问题。如果您已经下载了它,请获取更新的版本。Ruby 1.8.6-p369 没有此错误。