parent
231671376a
commit
6e71046ad5
@ -1,6 +1 @@
|
||||
/addressable-2.3.2.gem
|
||||
/addressable-2.3.5.gem
|
||||
/addressable-2.3.6.gem
|
||||
/addressable-2.3.8.gem
|
||||
/addressable-2.5.2.gem
|
||||
/addressable-2.7.0.gem
|
||||
/addressable-*.gem
|
||||
|
@ -1,57 +0,0 @@
|
||||
From b48ff03347a6d46e8dc674e242ce74c6381962a5 Mon Sep 17 00:00:00 2001
|
||||
From: Security Curious <security-curious@pm.me>
|
||||
Date: Fri, 2 Jul 2021 15:30:02 -0400
|
||||
Subject: [PATCH] Prevent ReDOS vuln on URI Template matching
|
||||
|
||||
The regular expression used to match a template against a URL is
|
||||
vulnerable to a regular expression denial-of-service via catastrophic
|
||||
backtracking.
|
||||
|
||||
This commit includes a test that demonstrates the failure without
|
||||
the fix as well as updates the regexp to remove the vulnerability.
|
||||
The vulnerability is removed by updating the grouping to be atomic.
|
||||
---
|
||||
lib/addressable/template.rb | 2 +-
|
||||
spec/addressable/template_spec.rb | 9 +++++++++
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/addressable/template.rb b/lib/addressable/template.rb
|
||||
index 2696695..45967ce 100644
|
||||
--- a/lib/addressable/template.rb
|
||||
+++ b/lib/addressable/template.rb
|
||||
@@ -37,7 +37,7 @@ class Template
|
||||
Addressable::URI::CharacterClasses::DIGIT + '_'
|
||||
|
||||
var_char =
|
||||
- "(?:(?:[#{variable_char_class}]|%[a-fA-F0-9][a-fA-F0-9])+)"
|
||||
+ "(?>(?:[#{variable_char_class}]|%[a-fA-F0-9][a-fA-F0-9])+)"
|
||||
RESERVED =
|
||||
"(?:[#{anything}]|%[a-fA-F0-9][a-fA-F0-9])"
|
||||
UNRESERVED =
|
||||
diff --git a/spec/addressable/template_spec.rb b/spec/addressable/template_spec.rb
|
||||
index a019165..d47589a 100644
|
||||
--- a/spec/addressable/template_spec.rb
|
||||
+++ b/spec/addressable/template_spec.rb
|
||||
@@ -19,6 +19,7 @@
|
||||
require "spec_helper"
|
||||
|
||||
require "bigdecimal"
|
||||
+require "timeout"
|
||||
require "addressable/template"
|
||||
|
||||
shared_examples_for 'expands' do |tests|
|
||||
@@ -1340,6 +1341,14 @@ def self.match(name)
|
||||
expect(subject).not_to match("foo_bar*")
|
||||
expect(subject).not_to match("foo_bar:20")
|
||||
end
|
||||
+
|
||||
+ it 'should parse in a reasonable time' do
|
||||
+ expect do
|
||||
+ Timeout.timeout(0.1) do
|
||||
+ expect(subject).not_to match("0"*25 + "!")
|
||||
+ end
|
||||
+ end.not_to raise_error
|
||||
+ end
|
||||
end
|
||||
context "VARIABLE_LIST" do
|
||||
subject { Addressable::Template::VARIABLE_LIST }
|
@ -1 +1 @@
|
||||
SHA512 (addressable-2.7.0.gem) = 4c438bbfa8874fdcf11eef1d1f7cceb1855ea85948daff13615a0af129d35f92cc918f4bd5bbe4cd6ebccc67a86fc582265f915dc39831ec64209de0bdeeb732
|
||||
SHA512 (addressable-2.8.0.gem) = c684f17940f717c2a65f9716ab9b3659948d6d51a60c38a7295fcf6fdc1c5785d2d315d2de7dab9f66a6c31f62247177d78d5d6eb556f5bb49926d4f00f8e4c8
|
||||
|
Loading…
Reference in new issue