Hello community,

here is the log from the commit of package python for openSUSE:Factory checked 
in at 2019-07-30 13:03:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python (Old)
 and      /work/SRC/openSUSE:Factory/.python.new.4126 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python"

Tue Jul 30 13:03:27 2019 rev:139 rq:717087 version:2.7.16

Changes:
--------
--- /work/SRC/openSUSE:Factory/python/python-base.changes       2019-06-24 
21:44:46.923718456 +0200
+++ /work/SRC/openSUSE:Factory/.python.new.4126/python-base.changes     
2019-07-30 13:03:31.150412929 +0200
@@ -1,0 +2,14 @@
+Fri Jul 19 13:28:16 CEST 2019 - Matej Cepl <[email protected]>
+
+- boo#1141853 (CVE-2018-20852) add
+  CVE-2018-20852-cookie-domain-check.patch fixing
+  http.cookiejar.DefaultPolicy.domain_return_ok which did not
+  correctly validate the domain: it could be tricked into sending
+  cookies to the wrong server.
+
+-------------------------------------------------------------------
+Fri Jul 19 11:19:42 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Skip test_urllib2_localnet that randomly fails in OBS
+
+-------------------------------------------------------------------
--- /work/SRC/openSUSE:Factory/python/python.changes    2019-06-24 
21:44:47.191718606 +0200
+++ /work/SRC/openSUSE:Factory/.python.new.4126/python.changes  2019-07-30 
13:03:31.278412903 +0200
@@ -1,0 +2,5 @@
+Fri Jul 19 11:19:42 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Skip test_urllib2_localnet that randomly fails in OBS
+
+-------------------------------------------------------------------

New:
----
  CVE-2018-20852-cookie-domain-check.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-base.spec ++++++
--- /var/tmp/diff_new_pack.H68e9p/_old  2019-07-30 13:03:34.506412254 +0200
+++ /var/tmp/diff_new_pack.H68e9p/_new  2019-07-30 13:03:34.510412253 +0200
@@ -81,6 +81,9 @@
 # PATCH-FIX-UPSTREAM CVE-2019-9947-no-ctrl-char-http.patch bsc#1130840 
[email protected]
 # bpo#30458: Disallow control chars in http URLs.
 Patch53:        CVE-2019-9947-no-ctrl-char-http.patch
+# PATCH-FIX-UPSTREAM CVE-2018-20852-cookie-domain-check.patch bsc#1141853 
[email protected]
+# http.cookiejar.DefaultPolicy.domain_return_ok does not correctly validate 
the domain
+Patch54:        CVE-2018-20852-cookie-domain-check.patch
 # COMMON-PATCH-END
 %define         python_version    %(echo %{tarversion} | head -c 3)
 BuildRequires:  automake
@@ -195,6 +198,7 @@
 %patch51 -p1
 %patch52 -p1
 %patch53 -p1
+%patch54 -p1
 
 # drop Autoconf version requirement
 sed -i 's/^version_required/dnl version_required/' configure.ac
@@ -235,7 +239,8 @@
 %ifnarch hppa
 # test_file(2k) fails in autobuild env - "stdin.seek(-1)" wrongly succeeds. 
probably an issue with autobuild's stdin
 # test_urllib2 relies on being able to resolve local address, which is 
notoriously impossible in autobuild
-EXCLUDE="test_urllib2 test_file test_file2k"
+# test_urllib2_localnet randomly fails out
+EXCLUDE="test_urllib2 test_urllib2_localnet test_file test_file2k"
 # test_nis and test_threading are AWFULLY slow.
 EXCLUDE="$EXCLUDE test_nis test_threading"
 # test_gdb fails if gdb with (different) python support is part of the 
buildsystem

++++++ python-doc.spec ++++++
--- /var/tmp/diff_new_pack.H68e9p/_old  2019-07-30 13:03:34.522412250 +0200
+++ /var/tmp/diff_new_pack.H68e9p/_new  2019-07-30 13:03:34.526412249 +0200
@@ -81,6 +81,9 @@
 # PATCH-FIX-UPSTREAM CVE-2019-9947-no-ctrl-char-http.patch bsc#1130840 
[email protected]
 # bpo#30458: Disallow control chars in http URLs.
 Patch53:        CVE-2019-9947-no-ctrl-char-http.patch
+# PATCH-FIX-UPSTREAM CVE-2018-20852-cookie-domain-check.patch bsc#1141853 
[email protected]
+# http.cookiejar.DefaultPolicy.domain_return_ok does not correctly validate 
the domain
+Patch54:        CVE-2018-20852-cookie-domain-check.patch
 # COMMON-PATCH-END
 Provides:       pyth_doc
 Provides:       pyth_ps
@@ -141,6 +144,7 @@
 %patch51 -p1
 %patch52 -p1
 %patch53 -p1
+%patch54 -p1
 
 # drop Autoconf version requirement
 sed -i 's/^version_required/dnl version_required/' configure.ac

++++++ python.spec ++++++
--- /var/tmp/diff_new_pack.H68e9p/_old  2019-07-30 13:03:34.542412246 +0200
+++ /var/tmp/diff_new_pack.H68e9p/_new  2019-07-30 13:03:34.546412246 +0200
@@ -86,6 +86,9 @@
 # PATCH-FIX-UPSTREAM CVE-2019-9947-no-ctrl-char-http.patch bsc#1130840 
[email protected]
 # bpo#30458: Disallow control chars in http URLs.
 Patch53:        CVE-2019-9947-no-ctrl-char-http.patch
+# PATCH-FIX-UPSTREAM CVE-2018-20852-cookie-domain-check.patch bsc#1141853 
[email protected]
+# http.cookiejar.DefaultPolicy.domain_return_ok does not correctly validate 
the domain
+Patch54:        CVE-2018-20852-cookie-domain-check.patch
 # COMMON-PATCH-END
 BuildRequires:  automake
 BuildRequires:  db-devel
@@ -247,6 +250,7 @@
 %patch51 -p1
 %patch52 -p1
 %patch53 -p1
+%patch54 -p1
 
 # drop Autoconf version requirement
 sed -i 's/^version_required/dnl version_required/' configure.ac
@@ -284,7 +288,7 @@
 if test $(ulimit -v) = unlimited || test $(ulimit -v) -gt 10000000; then
   ulimit -v 10000000 || :
 fi
-LIST="test_urllib test_ssl test_hashlib test_hmac test_urllib2_localnet 
test_unicodedata test_tarfile test_sqlite test_tcl test_dbm test_anydbm 
test_dumbdbm test_gdbm test_whichdb test_tk test_ttk_textonly test_bsddb 
test_bsddb3 test_readline"
+LIST="test_urllib test_ssl test_hashlib test_hmac test_unicodedata 
test_tarfile test_sqlite test_tcl test_dbm test_anydbm test_dumbdbm test_gdbm 
test_whichdb test_tk test_ttk_textonly test_bsddb test_bsddb3 test_readline"
 make test TESTOPTS="$LIST" TESTPYTHONOPTS="-R"
 %endif
 

++++++ CVE-2018-20852-cookie-domain-check.patch ++++++
>From def9e64d6aee945c19d9dab896fa91e915d96843 Mon Sep 17 00:00:00 2001
From: Karthikeyan Singaravelan <[email protected]>
Date: Mon, 20 May 2019 00:33:52 +0530
Subject: [PATCH] Prefix dot in domain for proper subdomain validation

---
 Lib/cookielib.py           | 13 +++++++++++--
 Lib/test/test_cookielib.py | 30 ++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/Lib/cookielib.py b/Lib/cookielib.py
index 2dd7c48728e0..0b471a42f296 100644
--- a/Lib/cookielib.py
+++ b/Lib/cookielib.py
@@ -1139,6 +1139,11 @@ def return_ok_domain(self, cookie, request):
         req_host, erhn = eff_request_host(request)
         domain = cookie.domain
 
+        if domain and not domain.startswith("."):
+            dotdomain = "." + domain
+        else:
+            dotdomain = domain
+
         # strict check of non-domain cookies: Mozilla does this, MSIE5 doesn't
         if (cookie.version == 0 and
             (self.strict_ns_domain & self.DomainStrictNonDomain) and
@@ -1151,7 +1156,7 @@ def return_ok_domain(self, cookie, request):
             _debug("   effective request-host name %s does not domain-match "
                    "RFC 2965 cookie domain %s", erhn, domain)
             return False
-        if cookie.version == 0 and not ("."+erhn).endswith(domain):
+        if cookie.version == 0 and not ("."+erhn).endswith(dotdomain):
             _debug("   request-host %s does not match Netscape cookie domain "
                    "%s", req_host, domain)
             return False
@@ -1165,7 +1170,11 @@ def domain_return_ok(self, domain, request):
             req_host = "."+req_host
         if not erhn.startswith("."):
             erhn = "."+erhn
-        if not (req_host.endswith(domain) or erhn.endswith(domain)):
+        if domain and not domain.startswith("."):
+            dotdomain = "." + domain
+        else:
+            dotdomain = domain
+        if not (req_host.endswith(dotdomain) or erhn.endswith(dotdomain)):
             #_debug("   request domain %s does not match cookie domain %s",
             #       req_host, domain)
             return False
diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py
index f2dd9727d137..7f7ff614d61d 100644
--- a/Lib/test/test_cookielib.py
+++ b/Lib/test/test_cookielib.py
@@ -368,6 +368,7 @@ def test_domain_return_ok(self):
             ("http://foo.bar.com/";, ".foo.bar.com", True),
             ("http://foo.bar.com/";, "foo.bar.com", True),
             ("http://foo.bar.com/";, ".bar.com", True),
+            ("http://foo.bar.com/";, "bar.com", True),
             ("http://foo.bar.com/";, "com", True),
             ("http://foo.com/";, "rhubarb.foo.com", False),
             ("http://foo.com/";, ".foo.com", True),
@@ -378,6 +379,8 @@ def test_domain_return_ok(self):
             ("http://foo/";, "foo", True),
             ("http://foo/";, "foo.local", True),
             ("http://foo/";, ".local", True),
+            ("http://barfoo.com";, ".foo.com", False),
+            ("http://barfoo.com";, "foo.com", False),
             ]:
             request = urllib2.Request(url)
             r = pol.domain_return_ok(domain, request)
@@ -938,6 +941,33 @@ def test_domain_block(self):
         c.add_cookie_header(req)
         self.assertFalse(req.has_header("Cookie"))
 
+        c.clear()
+
+        pol.set_blocked_domains([])
+        req = Request("http://acme.com/";)
+        res = FakeResponse(headers, "http://acme.com/";)
+        cookies = c.make_cookies(res, req)
+        c.extract_cookies(res, req)
+        self.assertEqual(len(c), 1)
+
+        req = Request("http://acme.com/";)
+        c.add_cookie_header(req)
+        self.assertTrue(req.has_header("Cookie"))
+
+        req = Request("http://badacme.com/";)
+        c.add_cookie_header(req)
+        self.assertFalse(pol.return_ok(cookies[0], req))
+        self.assertFalse(req.has_header("Cookie"))
+
+        p = pol.set_blocked_domains(["acme.com"])
+        req = Request("http://acme.com/";)
+        c.add_cookie_header(req)
+        self.assertFalse(req.has_header("Cookie"))
+
+        req = Request("http://badacme.com/";)
+        c.add_cookie_header(req)
+        self.assertFalse(req.has_header("Cookie"))
+
     def test_secure(self):
         from cookielib import CookieJar, DefaultCookiePolicy
 



Reply via email to