[rubygem-activerecord/f20] Fix CVE-2014-3483 regression

Josef Stribny jstribny at fedoraproject.org
Wed Jul 9 14:22:09 UTC 2014


commit a93a4ccec4f60d6de0a8faf3f684b2032445b988
Author: Josef Stribny <jstribny at redhat.com>
Date:   Wed Jul 9 16:22:09 2014 +0200

    Fix CVE-2014-3483 regression

 ...cord-4.0.8-CVE-2014-3483-range-regression.patch |   74 ++++++++++++++++++++
 rubygem-activerecord.spec                          |    8 ++-
 2 files changed, 81 insertions(+), 1 deletions(-)
---
diff --git a/rubygem-activerecord-4.0.8-CVE-2014-3483-range-regression.patch b/rubygem-activerecord-4.0.8-CVE-2014-3483-range-regression.patch
new file mode 100644
index 0000000..4a7a803
--- /dev/null
+++ b/rubygem-activerecord-4.0.8-CVE-2014-3483-range-regression.patch
@@ -0,0 +1,74 @@
+From c1156bfc43dd90e89acb8ffdd4e844f4e4e404ca Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?=
+ <rafaelmfranca at gmail.com>
+Date: Wed, 2 Jul 2014 15:15:21 -0300
+Subject: [PATCH] Make sure range strings are quoted after we quote the range.
+
+---
+ .../connection_adapters/postgresql/quoting.rb      |  2 +-
+ .../test/cases/adapters/postgresql/quoting_test.rb |  2 +-
+ .../test/cases/adapters/postgresql/range_test.rb   | 26 ++++++++++++++++++++++
+ 3 files changed, 28 insertions(+), 2 deletions(-)
+ create mode 100644 activerecord/test/cases/adapters/postgresql/range_test.rb
+
+diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb b/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb
+index 06b6478..1b5109a 100644
+--- a/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb
++++ b/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb
+@@ -24,7 +24,7 @@ module ActiveRecord
+           when Range
+             if /range$/ =~ sql_type
+               escaped = quote_string(PostgreSQLColumn.range_to_string(value))
+-              "#{escaped}::#{sql_type}"
++              "'#{escaped}'::#{sql_type}"
+             else
+               super
+             end
+diff --git a/activerecord/test/cases/adapters/postgresql/quoting_test.rb b/activerecord/test/cases/adapters/postgresql/quoting_test.rb
+index 0cafb63..488cd61 100644
+--- a/activerecord/test/cases/adapters/postgresql/quoting_test.rb
++++ b/activerecord/test/cases/adapters/postgresql/quoting_test.rb
+@@ -56,7 +56,7 @@ module ActiveRecord
+         def test_quote_range
+           range = "1,2]'; SELECT * FROM users; --".."a"
+           c = PostgreSQLColumn.new(nil, nil, OID::Range.new(:integer), 'int8range')
+-          assert_equal "[1,2]''; SELECT * FROM users; --,a]::int8range", @conn.quote(range, c)
++          assert_equal "'[1,2]''; SELECT * FROM users; --,a]'::int8range", @conn.quote(range, c)
+         end
+       end
+     end
+diff --git a/activerecord/test/cases/adapters/postgresql/range_test.rb b/activerecord/test/cases/adapters/postgresql/range_test.rb
+new file mode 100644
+index 0000000..d16f990
+--- /dev/null
++++ b/activerecord/test/cases/adapters/postgresql/range_test.rb
+@@ -0,0 +1,26 @@
++require "cases/helper"
++
++if ActiveRecord::Base.connection.supports_ranges?
++  class PostgresqlRange < ActiveRecord::Base
++    self.table_name = "postgresql_ranges"
++  end
++
++  class PostgresqlRangeTest < ActiveRecord::TestCase
++    test "update_all with ranges" do
++      PostgresqlRange.create!
++
++      PostgresqlRange.update_all(int8_range: 1..100)
++
++      assert_equal 1...101, PostgresqlRange.first.int8_range
++    end
++
++    test "ranges correctly escape input" do
++      e = assert_raises(ActiveRecord::StatementInvalid) do
++        range = "1,2]'; SELECT * FROM users; --".."a"
++        PostgresqlRange.update_all(int8_range: range)
++      end
++
++      assert e.message.starts_with?("PG::InvalidTextRepresentation")
++    end
++  end
++end
+-- 
+2.0.0
+
diff --git a/rubygem-activerecord.spec b/rubygem-activerecord.spec
index 28bbf3f..77fbd5e 100644
--- a/rubygem-activerecord.spec
+++ b/rubygem-activerecord.spec
@@ -5,7 +5,7 @@ Summary: Implements the ActiveRecord pattern for ORM
 Name: rubygem-%{gem_name}
 Epoch: 1
 Version: 4.0.0
-Release: 3%{?dist}
+Release: 4%{?dist}
 Group: Development/Languages
 License: MIT
 URL: http://www.rubyonrails.org
@@ -22,6 +22,8 @@ Patch0: rubygem-activerecord-4.0.3-CVE-2014-0080-PostgreSQL.patch
 Patch1: rubygem-activerecord-sqlite-3.2.8-test.patch
 # Fix for CVE-2014-3483 rubygem-activerecord: SQL injection vulnerability in 'range' quoting
 Patch2: rubygem-activerecord-4.0.7-CVE-2014-3483-range.patch
+# Fix for CVE-2014-3483 introduced regression (from v4.0.8)
+Patch3: rubygem-activerecord-4.0.8-CVE-2014-3483-range-regression.patch
 Requires: ruby(release)
 Requires: ruby(rubygems)
 Requires: rubygem(activesupport) = %{version}
@@ -69,6 +71,7 @@ tar xzvf %{SOURCE1}
 %patch0 -p1
 %patch1 -p1
 %patch2 -p2
+%patch3 -p2
 popd
 
 %build
@@ -114,6 +117,9 @@ popd
 
 
 %changelog
+* Wed Jul 09 2014 Josef Stribny <jstribny at redhat.com> - 1:4.0.0-4
+- Fix CVE-2014-3483 regression
+
 * Thu Jul 03 2014 Josef Stribny <jstribny at redhat.com> - 1:4.0.0-3
 - Fix CVE-2014-3483
 


More information about the scm-commits mailing list