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 日