浮点数解析中的堆溢出 (CVE-2013-4164)

Ruby 中的浮点数解析存在溢出。此漏洞已分配 CVE 标识符 CVE-2013-4164。

详细信息

每当字符串转换为浮点数值时,一个特制字符串可能导致堆溢出。 这可能导致通过段错误进行的拒绝服务攻击,甚至可能导致任意代码执行。任何将未知来源的输入转换为浮点数值的程序(在接受 JSON 时尤其常见)都存在漏洞。

存在漏洞的代码类似于这样

untrusted_data.to_f

但任何从外部数据生成浮点值的代码都存在漏洞,例如这样

JSON.parse untrusted_data

请注意,此错误类似于 CVE-2009-0689。

所有运行受影响版本的用户都应升级到已修复的 Ruby 版本。

受影响的版本

  • Ruby 1.8.6 patchlevel 230 之后的所有 Ruby 1.8 版本
  • Ruby 1.9.3 patchlevel 484 之前的所有 Ruby 1.9 版本
  • Ruby 2.0.0 patchlevel 353 之前的所有 Ruby 2.0 版本
  • Ruby 2.1.0 preview2 之前的所有 Ruby 2.1 版本
  • trunk revision 43780 之前的版本

解决方案

建议所有用户升级到 Ruby 1.9.3 patchlevel 484、Ruby 2.0.0 patchlevel 353 或 Ruby 2.1.0 preview2。

请注意,Ruby 1.8 系列或任何更早的版本都已过时。 没有计划为它们发布新的已修复版本。建议这些版本的用户尽快升级,因为我们无法保证对不受支持的版本继续提供安全修复。

鸣谢

感谢 Charlie Somerville 报告此问题!

历史记录

  • 最初发布于 2013-11-22 04:00:00 UTC
  • 第二次发布于 2013-11-22 06:46:00 UTC
  • 第三次发布于 2013-11-22 22:46:00 UTC
  • 第四次发布于 2013-12-10 12:09:38 UTC