From eda260094a793f96ee0b8a79d3266f64797ccc8d Mon Sep 17 00:00:00 2001 From: Armin Kuster Date: Sun, 6 Nov 2016 10:54:52 -0800 Subject: python-2.7: Security fix CVE-2016-1000110 affects python-2.7 < 2.7.12 Signed-off-by: Armin Kuster --- .../python/python/CVE-2016-1000110.patch | 145 +++++++++++++++++++++ meta/recipes-devtools/python/python_2.7.9.bb | 1 + 2 files changed, 146 insertions(+) create mode 100644 meta/recipes-devtools/python/python/CVE-2016-1000110.patch diff --git a/meta/recipes-devtools/python/python/CVE-2016-1000110.patch b/meta/recipes-devtools/python/python/CVE-2016-1000110.patch new file mode 100644 index 0000000000..8fd6c457bd --- /dev/null +++ b/meta/recipes-devtools/python/python/CVE-2016-1000110.patch @@ -0,0 +1,145 @@ + +# HG changeset patch +# User Senthil Kumaran +# Date 1469882993 25200 +# Node ID ba915d561667fa0584ad89f8d5a844fd43803c0d +# Parent c8c1ea94379a7706638f1571988576d504d7fc98 +Prevent HTTPoxy attack (CVE-2016-1000110) + +Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which +indicates that the script is in CGI mode. + +Issue reported and patch contributed by Rémi Rampin. + +Upstream-Status: Backport +CVE: CVE-2016-1000110 +Signed-off-by: Armin Kuster + +Index: Python-2.7.9/Doc/howto/urllib2.rst +=================================================================== +--- Python-2.7.9.orig/Doc/howto/urllib2.rst ++++ Python-2.7.9/Doc/howto/urllib2.rst +@@ -523,6 +523,11 @@ setting up a `Basic Authentication`_ han + through a proxy. However, this can be enabled by extending urllib2 as + shown in the recipe [#]_. + ++.. note:: ++ ++ ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see ++ the documentation on :func:`~urllib.getproxies`. ++ + + Sockets and Layers + ================== +Index: Python-2.7.9/Doc/library/urllib.rst +=================================================================== +--- Python-2.7.9.orig/Doc/library/urllib.rst ++++ Python-2.7.9/Doc/library/urllib.rst +@@ -288,6 +288,16 @@ Utility functions + find it, looks for proxy information from Mac OSX System Configuration for + Mac OS X and Windows Systems Registry for Windows. + ++ .. note:: ++ ++ If the environment variable ``REQUEST_METHOD`` is set, which usually ++ indicates your script is running in a CGI environment, the environment ++ variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is ++ because that variable can be injected by a client using the "Proxy:" ++ HTTP header. If you need to use an HTTP proxy in a CGI environment, ++ either use ``ProxyHandler`` explicitly, or make sure the variable name ++ is in lowercase (or at least the ``_proxy`` suffix). ++ + .. note:: + urllib also exposes certain utility functions like splittype, splithost and + others parsing url into various components. But it is recommended to use +Index: Python-2.7.9/Doc/library/urllib2.rst +=================================================================== +--- Python-2.7.9.orig/Doc/library/urllib2.rst ++++ Python-2.7.9/Doc/library/urllib2.rst +@@ -224,6 +224,11 @@ The following classes are provided: + + To disable autodetected proxy pass an empty dictionary. + ++ .. note:: ++ ++ ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; ++ see the documentation on :func:`~urllib.getproxies`. ++ + + .. class:: HTTPPasswordMgr() + +Index: Python-2.7.9/Misc/ACKS +=================================================================== +--- Python-2.7.9.orig/Misc/ACKS ++++ Python-2.7.9/Misc/ACKS +@@ -1090,6 +1090,7 @@ Jérôme Radix + Burton Radons + Jeff Ramnani + Brodie Rao ++Rémi Rampin + Senko Rasic + Antti Rasinen + Nikolaus Rath +Index: Python-2.7.9/Lib/urllib.py +=================================================================== +--- Python-2.7.9.orig/Lib/urllib.py ++++ Python-2.7.9/Lib/urllib.py +@@ -1373,11 +1373,20 @@ def getproxies_environment(): + [Fancy]URLopener constructor. + + """ ++ # Get all variables + proxies = {} + for name, value in os.environ.items(): + name = name.lower() + if value and name[-6:] == '_proxy': + proxies[name[:-6]] = value ++ ++ # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY ++ # (non-all-lowercase) as it may be set from the web server by a "Proxy:" ++ # header from the client ++ # If "proxy" is lowercase, it will still be used thanks to the next block ++ if 'REQUEST_METHOD' in os.environ: ++ proxies.pop('http', None) ++ + return proxies + + def proxy_bypass_environment(host): +Index: Python-2.7.9/Lib/test/test_urllib.py +=================================================================== +--- Python-2.7.9.orig/Lib/test/test_urllib.py ++++ Python-2.7.9/Lib/test/test_urllib.py +@@ -161,6 +161,18 @@ class ProxyTests(unittest.TestCase): + self.env.set('NO_PROXY', 'localhost, anotherdomain.com, newdomain.com') + self.assertTrue(urllib.proxy_bypass_environment('anotherdomain.com')) + ++ def test_proxy_cgi_ignore(self): ++ try: ++ self.env.set('HTTP_PROXY', 'http://somewhere:3128') ++ proxies = urllib.getproxies_environment() ++ self.assertEqual('http://somewhere:3128', proxies['http']) ++ self.env.set('REQUEST_METHOD', 'GET') ++ proxies = urllib.getproxies_environment() ++ self.assertNotIn('http', proxies) ++ finally: ++ self.env.unset('REQUEST_METHOD') ++ self.env.unset('HTTP_PROXY') ++ + + class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin): + """Test urlopen() opening a fake http connection.""" +Index: Python-2.7.9/Misc/NEWS +=================================================================== +--- Python-2.7.9.orig/Misc/NEWS ++++ Python-2.7.9/Misc/NEWS +@@ -13,6 +13,10 @@ What's New in Python 2.7.9? + Library + ------- + ++- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the ++ HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates ++ that the script is in CGI mode. ++ + - Issue #22928: Disabled HTTP header injections in httplib. + Original patch by Demian Brecht. + diff --git a/meta/recipes-devtools/python/python_2.7.9.bb b/meta/recipes-devtools/python/python_2.7.9.bb index 1f0169bd41..03f917d6eb 100644 --- a/meta/recipes-devtools/python/python_2.7.9.bb +++ b/meta/recipes-devtools/python/python_2.7.9.bb @@ -29,6 +29,7 @@ SRC_URI += "\ file://CVE-2016-0772.patch \ file://CVE-2016-5636.patch \ file://CVE-2016-5699.patch \ + file://CVE-2016-1000110.patch \ " S = "${WORKDIR}/Python-${PV}" -- cgit 1.2.3-korg