SSL 客户端主机名检查绕过漏洞 (CVE-2013-4073)

nahi 于 2013 年 6 月 27 日发布

Ruby 的 SSL 客户端存在漏洞,可能允许中间人攻击者通过受信任的认证机构颁发的有效证书伪装 SSL 服务器。

此漏洞已被指定 CVE 标识符 CVE-2013-4073。

摘要

Ruby 的 SSL 客户端实现了主机名身份检查,但它未能正确处理证书中包含 null 字节的主机名。

详情

OpenSSL::SSL.verify_certificate_identity 为 Ruby 的 SSL 客户端实现了 RFC2818 服务器身份检查,但它未能正确处理 subjectAltName X509 扩展中包含 null 字节的主机名。

位于 lib/openssl/ssl.rb 中的现有代码使用 OpenSSL::X509::Extension#value 来从 subjectAltName 中提取身份。 Extension#value 依赖于 OpenSSL 函数 X509V3_EXT_print(),对于 subjectAltName 的 dNSName,它使用了已知的存在 null 字节不安全问题的 sprintf()。结果是,如果 subjectAltName 是 ‘www.ruby-lang.org\0.example.com’,Extension#value 会返回 ‘www.ruby-lang.org’,导致 OpenSSL::SSL.verify_certificate_identity 错误地将证书识别为 ‘www.ruby-lang.org’。

当 SSL 客户端信任的 CA 允许颁发 subjectAltName 中包含 null 字节的服务器证书时,远程攻击者可以从 CA 获取 ‘www.ruby-lang.org\0.example.com’ 的证书,以伪装成 ‘www.ruby-lang.org’,并在 Ruby 的 SSL 客户端和 SSL 服务器之间进行中间人攻击。

受影响的版本

  • 所有 ruby 1.8 版本,早于 ruby 1.8.7 patchlevel 374
  • 所有 ruby 1.9 版本,早于 ruby 1.9.3 patchlevel 448
  • 所有 ruby 2.0 版本,早于 ruby 2.0.0 patchlevel 247
  • 所有 trunk revision,早于 41671

解决方案

建议所有用户升级到 Ruby 2.0.0-p247、1.9.3-p448 或 1.8.7-p374。

致谢

此漏洞由 William (B.J.) Snow Orvis 发现,并由 iSEC Partners 的 David Thiel 与 security@ruby-lang.org 协调。

历史

  • 最初发布于 2013-06-27 11:00:00 (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 日

更多新闻...