RubyGems 导航菜单

博客

返回博客文章

CVE-2015-3900 对 RubyGems 2.4.6 及更早版本中的请求劫持漏洞

RubyGems 使域能够将客户端定向到用于获取软件包并对 API 进行调用的单独主机。该机制通过 DNS 实施,尤其是在原始请求的域下设置为 _rubygems._tcp 的 SRV 记录。

例如,以下是使用 rubygems.org 的用户所看到的:

  > dig _rubygems._tcp.rubygems.org SRV

  ;; ANSWER SECTION:
  _rubygems._tcp.rubygems.org. 600 IN	SRV	0 1 80 api.rubygems.org.

在向 SRV 记录中返回的主机名发送请求之前,RubyGems 不会对该记录进行验证。

这使得客户端面临 DNS 劫持攻击的风险,在这种攻击中,攻击者可以返回其选择的 SRV,并让客户端使用它。例如

  > dig _rubygems._tcp.rubygems.org SRV

  ;; ANSWER SECTION:
  _rubygems._tcp.rubygems.org. 600 IN	SRV	0 1 80 gems.nottobetrusted.wtf

修复方法已在 github 上详细介绍,其中表明我们现在验证原始域下的记录。这将限制客户端使用原始信任/安全域,就像它们原本会做的那样。

2.0 至 2.4.6 版本的 RubyGems 具有漏洞。

已发布修复此问题的 RubyGems 2.0.16、2.2.4 和 2.4.7 版。

1.9.0 至 2.2.0 的 Ruby 版本具有漏洞,因为它们包含 RubyGems 的嵌入版本。

所有版本的修补程序:https://github.com/rubygems/rubygems/commit/6bbee35fd6daed045103f3122490a588d97c066a

此漏洞由 Jonathan Claudius [email protected] 报告。

Evan Phoenix