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

tenderlove 于 2013 年 11 月 22 日发布

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

详情

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

易受攻击的代码看起来像这样

untrusted_data.to_f

但是任何从外部数据生成浮点数 Thus the code is vulnerable, such as this

JSON.parse untrusted_data

请注意,此 bug 与 CVE-2009-0689 类似。

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

受影响的版本

  • 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

近期新闻

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 日

更多新闻...