Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix CVE-2013-4363, remove regexp backtracking
The Gem::Version regexp used backtracking to validate gem versions, but in a different way than CVE-2013-4287. This could cause excessive CPU usage when creating Gem::Version objects including when packaging gems. See CVE-2013-4363.txt (in this commit) for details. See #626
- Loading branch information
Showing
6 changed files
with
76 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
= Algorithmic complexity vulnerability in RubyGems 2.1.4 and older | ||
|
||
The patch for CVE-2013-4287 was insufficiently verified so the combined | ||
regular expression for verifying gem version remains vulnerable following | ||
CVE-2013-4287. | ||
|
||
RubyGems validates versions with a regular expression that is vulnerable to | ||
denial of service due to backtracking. For specially crafted RubyGems | ||
versions attackers can cause denial of service through CPU consumption. | ||
|
||
RubyGems versions 2.1.4 and older are vulnerable. | ||
|
||
Ruby versions 1.9.0 through 2.0.0p247 are vulnerable as they contain embedded | ||
versions of RubyGems. | ||
|
||
It does not appear to be possible to exploit this vulnerability by installing a | ||
gem for RubyGems 1.8.x or newer. Vulnerable uses of RubyGems API include | ||
packaging a gem (through `gem build`, Gem::Package or Gem::PackageTask), | ||
sending user input to Gem::Version.new, Gem::Version.correct? or use of the | ||
Gem::Version::VERSION_PATTERN or Gem::Version::ANCHORED_VERSION_PATTERN | ||
constants. | ||
|
||
Notably, users of bundler that install gems from git are vulnerable if a | ||
malicious author changes the gemspec to an invalid version. | ||
|
||
The vulnerability can be fixed by changing the "*" repetition to a "?" | ||
repetition in Gem::Version::ANCHORED_VERSION_PATTERN in | ||
lib/rubygems/version.rb. For RubyGems 2.1.x: | ||
|
||
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc: | ||
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc: | ||
|
||
For RubyGems 2.0.x: | ||
|
||
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc: | ||
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc: | ||
|
||
For RubyGems 1.8.x: | ||
|
||
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})*\s*\z/ # :nodoc: | ||
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc: | ||
|
||
|
||
This vulnerability was discovered by Alexander Cherepanov <cherepan@mccme.ru> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
.autotest | ||
.document | ||
CVE-2013-4287.txt | ||
CVE-2013-4363.txt | ||
History.txt | ||
LICENSE.txt | ||
MIT.txt | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters