A revised patch has been released for a flaw in the distribution platform for Ruby applications, RubyGems, which could be used to deliver malware to someone trying to download a program.
RubyGems lets people search for a “gem,” which is a packaging format for Ruby applications and code libraries. Ruby developers publish a gem when an application is ready.
Security researchers from Trustwave found a problem with the platform. When people search for a gem, RubyGems uses a DNS (Domain Name System) SRV record request to find a server hosting a particular gem.
The request, however, “does not require that DNS replies come from the same security domain as the original gem source,” according to a writeup, which Trustwave plans to release on its blog on Tuesday.
An attacker using the flaw could redirect a RubyGems client to download a gem from a different server and instead supply a malicious program, Trustwave wrote. It then bypasses any SSL/TLS check.
“We wrote a fully functional gem trojaning service that demonstrates how an attacker could simply trojan Ruby gems transparently over the wire while the user was installing them,” Trustwave wrote.
Most gems aren’t digitally signed, either, so there’s no second check to ensure a program is what it purports to be. Some 1.2 million gems are installed a day, so there’s a large potential group of victims, according to Trustwave, which also collaborated with OpenDNS to get insight on the number of DNS SRV requests for gems.
RubyGems issued a patch for the flaw in mid-May, but it was incomplete, wrote Jonathan Claudius, lead security researcher at Trustwave, in an email. The organization released a second patch on June 8. The fix validates the SRV record under the original domain, according to a RubyGems blog post.
Trustwave decided to hold off publishing information on the flaw until now to give people time to patch, Claudius said. “Users are slow to fix it,” he wrote.
The flaw is CVE-2015-3900, and users should be running version 2.4.8 or greater of RubyGems. Versions between 2.0 and 2.4.6 are vulnerable.