博客
返回博客文章
2015 年 5 月 14 日
CVE-2015-3900 对 RubyGems 2.4.6 及更早版本中的请求劫持漏洞
Evan Phoenix 撰写
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] 报告。