This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年03月24日 15:06 by gvanrossum, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| dd852a0f92d6.diff | gvanrossum, 2011年03月24日 15:09 | review | ||
| c6a4d267fe88.diff | orsenthil, 2011年03月24日 15:25 | review | ||
| 3c07ea6a176a.diff | orsenthil, 2011年03月24日 17:02 | review | ||
| ca3b117c40f3.diff | gvanrossum, 2011年03月24日 17:45 | review | ||
| ff71c4416cde.diff | orsenthil, 2011年03月25日 02:45 | review | ||
| f03e2acb9826.diff | gvanrossum, 2011年03月28日 20:54 | review | ||
| Repositories containing patches | |||
|---|---|---|---|
| http://hg.python.org/sandbox/guido#2.5 | |||
| http://hg.python.org/sandbox/orsenthil/ | |||
| Messages (26) | |||
|---|---|---|---|
| msg131981 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月24日 15:06 | |
We received the following on the security list. With the OP's permission I am now filing a public bug with a patch, with the intent to submit the patch ASAP (in time for MvL's planned April security release of Python 2.5). The OP's description is below; I will attach a patch to this issue as soon as I have figured out how. description: -------------------- The Python urllib and urllib2 modules are typically used to fetch web pages but by default also contains handlers for ftp:// and file:// URL schemes. Now unfortunately it appears that it is possible for a web server to redirect (HTTP 302) a urllib request to any of the supported schemes. Examples on how this could turn bad: 1) File disclosure: A web application, that normally fetches and displays a web page, is redirected to file:///etc/passwd and discloses it. 2) Denial of Service: An application is redirected to a system device (e.g. file:///dev/zero) which will result in excessive CPU/memory/disk usage. Affected versions: ------------------ The urllib and urllib2 modules of python 2.4.6 and 2.6.5 where tested but this likely affects all versions. Possible solution: ------------------ The default handlers could be reduced but this will probably break existing python scripts. Alternatively the default HTTPRedirectHandler behaviour can be changed to only allow redirects to HTTP, HTTPS and FTP by checking the scheme of the location URL (this seems to be a common practise in browsers) |
|||
| msg131982 - (view) | Author: Senthil Kumaran (orsenthil) * (Python committer) | Date: 2011年03月24日 15:09 | |
>> HTTPRedirectHandler behaviour can be changed >> to only allow redirects to HTTP, HTTPS and FTP by checking the scheme >> of the location URL (this seems to be a common practise in browsers) This would be the way to go. |
|||
| msg131983 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 15:10 | |
Repository URL is incorrect (missing http:/ prefix). The commit: http://hg.python.org/sandbox/guido/rev/dd852a0f92d6 |
|||
| msg131984 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月24日 15:11 | |
Please review the patch that I created. (Now why doesn't it have a "review" link?) Note that the patch currently only allows http and https. |
|||
| msg131988 - (view) | Author: Senthil Kumaran (orsenthil) * (Python committer) | Date: 2011年03月24日 15:24 | |
>> why doesn't it have a "review" link? Perhaps, as it is not against the 'default'? Let's try my hg sandbox link which has a fix committed. Let's see if it gives the review link. |
|||
| msg131989 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 15:29 | |
The patch has no test. You may read our new "Python Developer’s Guide" for new contributors: http://docs.python.org/devguide/runtests.html#writing |
|||
| msg131990 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月24日 15:35 | |
Oddly, I now see a review link for my own diff but not for orsenthil's. Maybe there's a delay? I could use help with the tests. I suppose orsenthil's patch is for Python 3? |
|||
| msg131991 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年03月24日 15:36 | |
Which patch should be reviewed? They seem to be different. Senthil's patch allows a redirect to ftp while Guido's doesn't. Senthil's patch doesn't seem to fix urllib-inherited code, only urllib2- (see FancyURLopener.redirect_internal()). Guido's patch doesn't close the file (fp.close()) when the redirect is denied. Both patches apparently return silently (?), while it might be better to raise an exception. Both would deserve a test :) |
|||
| msg131992 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 15:38 | |
c6a4d267fe88.diff: This patch doesn't explain why other scheme are not allowed. I like Guido's comment: # For security reasons we do not allow redirects to protocols # other than HTTP or HTTPS. |
|||
| msg131993 - (view) | Author: R. David Murray (r.david.murray) * (Python committer) | Date: 2011年03月24日 15:39 | |
Yes there is a delay. The cron job that creates the link runs every two minutes. Not sure why the delay seems to be longer than that, though. |
|||
| msg132008 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月24日 16:52 | |
> Which patch should be reviewed? They seem to be different. Both. Mine's for the Python 2 line while Senthil seems to deal with Python 3. (However the presence of Senthil's patch somehow overrode my patch in Rietveld. It looks like Martin didn't think of this use case.) I'd like to have agreement over the Python 2 patch first, then we can think about forward porting. > Senthil's patch allows a redirect to ftp while Guido's doesn't. That is a good question. Should we? It doesn't look like ftp: participates in the vulnerability, but I'm not sure how useful it is either. > Senthil's patch doesn't seem to fix urllib-inherited code, only urllib2- (see FancyURLopener.redirect_internal()). Right, that's for Python 3. > Guido's patch doesn't close the file (fp.close()) when the redirect is denied. But the calling code does. Note that when there is no URI or Location header, redirect_internal() also returns without closing the file; if the error handler returns no result, http_error() will call http_error_default() which closes the file. > Both patches apparently return silently (?), while it might be better to raise an exception. This follows the tradition of returning silently when no URI or Location header is found. The 302 error will be treated the same as any other error. > Both would deserve a test :) If someone would contribute one I'd appreciate it. Otherwise I will get on it myself. |
|||
| msg132009 - (view) | Author: Senthil Kumaran (orsenthil) * (Python committer) | Date: 2011年03月24日 17:07 | |
Here is a more complete patch with tests. Please review this. Yes, it is against the default branch (3.x codeline). We can backport this behavior to 2.x codeline. I have raised an URLError exception when the direct to invalid_schemes is detected. Also, ftp redirection should be allowed. It is common to see ISO download mirrors which will redirect itself to an ftp url. Also the security report says about allowing to http, https and ftp. Thanks. |
|||
| msg132010 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年03月24日 17:08 | |
> > Senthil's patch allows a redirect to ftp while Guido's doesn't. > > That is a good question. Should we? It doesn't look like ftp: > participates in the vulnerability, but I'm not sure how useful it is > either. I would say accept it anyway. That way we minimize potential for compatibility breakage. (do we support "ftps" as well? I don't think so) > > Senthil's patch doesn't seem to fix urllib-inherited code, only > urllib2- (see FancyURLopener.redirect_internal()). > > Right, that's for Python 3. FancyURLopener is still present in Python 3 (even though we would like to deprecate it in 3.3). |
|||
| msg132011 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月24日 17:32 | |
I am okay with adding FTP to the list. I still don't think we should raise URLError on the bad redirect; we should treat it the same as a missing URI/Location header, and it will raise HTTPError. |
|||
| msg132068 - (view) | Author: Senthil Kumaran (orsenthil) * (Python committer) | Date: 2011年03月25日 02:42 | |
On Thu, Mar 24, 2011 at 05:32:42PM +0000, Guido van Rossum wrote: > I still don't think we should raise URLError on the bad redirect; we > should treat it the same as a missing URI/Location header, and it > will raise HTTPError. Agreed. Updated the hg repository by raising HTTPError instead of URLError. Thing to note - HTTPError does not change anything from the redirection. It would still give the code as 302 with an additional message saying that Redirection to 'newurl' is not allowed. |
|||
| msg132405 - (view) | Author: Henri Salo (Henri.Salo) | Date: 2011年03月28日 16:27 | |
CVE-2011-1521 has been assigned to this issue. |
|||
| msg132419 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月28日 20:48 | |
Aha. I now see the point of raising an exception instead of just returning None. I have backported Senthil's patch to the 2.5 branch. Please review. |
|||
| msg132487 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月29日 16:43 | |
This issue was first reported by Niels Heinen from the Google Security Team. |
|||
| msg132488 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年03月29日 16:48 | |
I don't have a 2.5 checkout to test but the patch looks ok to me. Under 2.7 I get a test failure, I suppose you'll have some merging work to do: test test_urllib2 failed -- Traceback (most recent call last): File "/home/antoine/cpython/27/Lib/test/test_urllib2.py", line 990, in test_invalid_redirect MockHeaders({"location": valid_url})) File "/home/antoine/cpython/27/Lib/urllib2.py", line 616, in http_error_302 return self.parent.open(new, timeout=req.timeout) File "/home/antoine/cpython/27/Lib/urllib2.py", line 219, in __getattr__ raise AttributeError, attr AttributeError: timeout |
|||
| msg132495 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月29日 18:22 | |
I have the final version of the patch for Python 2 in the 2.5, 2.6 and 2.7 branches in my repo (http://hg.python.org/sandbox/guido). What's the next step? Just push this to the central repo? There are a few separate changes: summary: Merge urllib/urllib2 security fix from 2.6 branch. summary: Merge urllib/urllib2 security fix from 2.5 branch. summary: Adding .hgignore (copied from default branch). summary: Add CVE number to urllib/urllib2 news item. summary: Add tests for the urllib[2] vulnerability. Change to raise exceptions. summary: Add FTP to the allowed url schemes. Add Misc/NEWS. summary: Issue 22663: fix redirect vulnerability in urllib/urllib2. |
|||
| msg132496 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月29日 18:23 | |
Also for the Python 3 family it's best to backport Senthil's patch. I will try that in my tree as well. |
|||
| msg132500 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月29日 19:06 | |
The fix is now also in the 3.1, 3.2 and default branches of my repo (http://hg.python.org/sandbox/guido). Maybe I should just merge the whole bunch into the root repo and be done with it? |
|||
| msg132501 - (view) | Author: Benjamin Peterson (benjamin.peterson) * (Python committer) | Date: 2011年03月29日 19:10 | |
2011年3月29日 Guido van Rossum <report@bugs.python.org>: > > Guido van Rossum <guido@python.org> added the comment: > > The fix is now also in the 3.1, 3.2 and default branches of my repo > (http://hg.python.org/sandbox/guido). > > Maybe I should just merge the whole bunch into the root repo and be > done with it? Sounds good. BTW, you should probably put your name your hg username messages by setting username in .hgrc to username = "Guido van Rossum <guido@python.org>" or so |
|||
| msg132517 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年03月29日 20:10 | |
New changeset 5937d2119a20 by guido in branch '3.1': Issue 11662: Fix vulnerability in urllib/urllib2. http://hg.python.org/cpython/rev/5937d2119a20 New changeset 96a6c128822b by guido in branch '3.2': Merge Issue 11662 from 3.1 branch. http://hg.python.org/cpython/rev/96a6c128822b New changeset a778b963eae3 by guido in branch 'default': Merge Issue 11662 from 3.2 branch. http://hg.python.org/cpython/rev/a778b963eae3 New changeset 9eeda8e3a13f by Guido van Rossum in branch '2.6': Merge issue 11662 from 2.5. http://hg.python.org/cpython/rev/9eeda8e3a13f New changeset b2934d98dac1 by Guido van Rossum in branch '2.7': Merge issue 11662 from 2.6. http://hg.python.org/cpython/rev/b2934d98dac1 New changeset 3dc90ebc540a by Guido van Rossum in branch '3.1': Merge issue 11662. http://hg.python.org/cpython/rev/3dc90ebc540a New changeset 968bca2cab60 by Guido van Rossum in branch '3.2': Merge issue 11662. http://hg.python.org/cpython/rev/968bca2cab60 New changeset c8701b9256cf by Guido van Rossum in branch 'default': Merge issue 11662. http://hg.python.org/cpython/rev/c8701b9256cf |
|||
| msg132518 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2011年03月29日 20:12 | |
Ok, merged into the central repo. Let me know where I screwed up. |
|||
| msg136401 - (view) | Author: Barry A. Warsaw (barry) * (Python committer) | Date: 2011年05月20日 20:52 | |
I think this is another patch that needs to be cross-ported to the 2.6 svn branch (which I'll do). |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:15 | admin | set | nosy:
+ larry github: 55871 |
| 2011年05月20日 20:52:14 | barry | set | messages: + msg136401 |
| 2011年04月25日 10:45:10 | jcea | set | nosy:
+ jcea |
| 2011年03月29日 20:26:14 | Arfrever | set | nosy:
+ Arfrever |
| 2011年03月29日 20:12:20 | gvanrossum | set | status: open -> closed resolution: fixed messages: + msg132518 |
| 2011年03月29日 20:10:56 | python-dev | set | nosy:
+ python-dev messages: + msg132517 |
| 2011年03月29日 19:10:59 | benjamin.peterson | set | messages: + msg132501 |
| 2011年03月29日 19:06:11 | gvanrossum | set | messages: + msg132500 |
| 2011年03月29日 18:23:47 | gvanrossum | set | messages: + msg132496 |
| 2011年03月29日 18:22:29 | gvanrossum | set | nosy:
- serdar.dalgic messages: + msg132495 versions: + Python 3.4 |
| 2011年03月29日 16:48:32 | pitrou | set | messages:
+ msg132488 versions: - Python 3.4 |
| 2011年03月29日 16:43:53 | gvanrossum | set | messages: + msg132487 |
| 2011年03月29日 11:18:20 | serdar.dalgic | set | nosy:
+ serdar.dalgic |
| 2011年03月28日 20:58:10 | gvanrossum | set | files: - 9d06d5eb1a7e.diff |
| 2011年03月28日 20:54:36 | gvanrossum | set | files: + f03e2acb9826.diff |
| 2011年03月28日 20:48:58 | gvanrossum | set | messages: + msg132419 |
| 2011年03月28日 20:47:50 | gvanrossum | set | files: + 9d06d5eb1a7e.diff |
| 2011年03月28日 16:27:20 | Henri.Salo | set | nosy:
+ Henri.Salo messages: + msg132405 |
| 2011年03月25日 02:45:06 | orsenthil | set | files: + ff71c4416cde.diff |
| 2011年03月25日 02:42:05 | orsenthil | set | messages: + msg132068 |
| 2011年03月24日 17:45:28 | gvanrossum | set | files: + ca3b117c40f3.diff |
| 2011年03月24日 17:32:42 | gvanrossum | set | messages: + msg132011 |
| 2011年03月24日 17:08:38 | pitrou | set | messages: + msg132010 |
| 2011年03月24日 17:07:07 | orsenthil | set | messages: + msg132009 |
| 2011年03月24日 17:02:16 | orsenthil | set | files: + 3c07ea6a176a.diff |
| 2011年03月24日 16:52:35 | gvanrossum | set | messages: + msg132008 |
| 2011年03月24日 15:39:09 | r.david.murray | set | nosy:
+ r.david.murray messages: + msg131993 |
| 2011年03月24日 15:38:04 | vstinner | set | messages: + msg131992 |
| 2011年03月24日 15:36:27 | pitrou | set | nosy:
+ pitrou messages: + msg131991 |
| 2011年03月24日 15:35:04 | gvanrossum | set | messages: + msg131990 |
| 2011年03月24日 15:29:17 | vstinner | set | messages: + msg131989 |
| 2011年03月24日 15:25:01 | orsenthil | set | files: + c6a4d267fe88.diff |
| 2011年03月24日 15:24:30 | orsenthil | set | hgrepos:
+ hgrepo7 messages: + msg131988 |
| 2011年03月24日 15:11:43 | gvanrossum | set | messages: + msg131984 |
| 2011年03月24日 15:10:30 | vstinner | set | nosy:
+ vstinner messages: + msg131983 |
| 2011年03月24日 15:09:37 | gvanrossum | set | files:
+ dd852a0f92d6.diff keywords: + patch |
| 2011年03月24日 15:09:30 | orsenthil | set | nosy:
+ orsenthil messages: + msg131982 |
| 2011年03月24日 15:06:57 | gvanrossum | create | |