$SAFE 绕过漏洞关于 Exception#to_s / NameError#to_s (CVE-2012-4464, CVE-2012-4466)
由 usa 发布于 2012 年 10 月 12 日
发现 Exception#to_s、NameError#to_s 和 name_err_mesg_to_s()(Ruby 解释器内部 API)的漏洞。恶意用户代码可以利用其中一个安全漏洞绕过 $SAFE 检查。
详情
Ruby 的 $SAFE 机制允许在 $SAFE >= 4 模式下运行不受信任的用户代码。这是一种沙盒技术,在该模式下,某些操作会受到限制,以保护沙盒之外的其他数据。
该机制存在的问题。Exception#to_s、NameError#to_s 和 name_err_mesg_to_s() 解释器内部 API 未能正确处理 $SAFE 位,因此可以使用它们将一个未被污染的字符串(untied string)错误地标记为已污染(tainted)。利用这一点,沙盒中的不受信任代码可以破坏性地修改一个先前未被污染的字符串。
Ruby 1.8 曾有过一个类似的安全问题。它修复了 Exception#to_s 和 NameError#to_s,但 name_err_mesg_to_str() 问题则逃过了之前的安全修复。
受影响的版本
- 所有 Ruby 1.8.7,在补丁级别 371 之前
- 所有 Ruby 1.9.3,在补丁级别 286 之前
- 所有 Ruby 2.0 的开发分支,在 r37068 版本之前
解决方案
升级到最新版本。
致谢
此漏洞由 Tyler Hickes 发现。
更新
- 最初发布于 2012-10-12 19:17:50 JST。
近期新闻
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 日