CVE-2015-3900 RubyGems 2.4.6 이전의 요청 가로채기 취약점
RubyGems에서는 gem을 가져오고 api 호출을 하는데 사용하는 도메인을 클라이언트에서 별도 호스트를 지정하게 할 수 있습니다. 이 방식은 DNS, 특히 원래 요청된 도메인의 SRV 레코드인 _rubygems._tcp를 사용하여 구현되었습니다.
예를 들어, rubygems.org를 이용하는 사용자들에게는 이렇게 보입니다.
> dig _rubygems._tcp.rubygems.org SRV ;; ANSWER SECTION: _rubygems._tcp.rubygems.org. 600 IN SRV 0 1 80 api.rubygems.org.
RubyGems는 요청을 하기 전에 SRV 레코드 안의 호스트 이름을 검증하지 않습니다.
이 남겨진 클라이언트는 DNS 가로채기 공격이 가능하며, 공격자는 직접 고른 SRV를 반환하고 클라이언트가 그것을 사용하게 할 수 있습니다. 예를 들어,
> dig _rubygems._tcp.rubygems.org SRV ;; ANSWER SECTION: _rubygems._tcp.rubygems.org. 600 IN SRV 0 1 80 gems.nottobetrusted.wtf
수정의 자세한 내용은 github에서 보실 수 있으며, 이제 레코드가 원래 도메인에 있는지 검증합니다. 이렇게 함으로써 그렇지 않았던 클라이언트가 원래 믿을 수 있고 안전한 도메인을 사용하도록 강제할 수 있습니다.
RubyGems 2.0에서 2.4.6까지의 버전은 취약합니다.
RubyGems 2.0.16, 2.2.4, 2.4.7 버전이 이 문제를 해결하기 위해 릴리스되었습니다.
루비 1.9.0에서 2.2.0 버전의 내장된 RubyGems는 취약합니다.
모든 버전에서 쓸 수 있는 패치입니다.
이 취약점은 Jonathan Claudius JClaudius@trustwave.com에 의해 보고되었습니다.