Saturday, May 14, 2011

urllib/urllib2 修复一个安全漏洞

原文链接: urllib Security Vulnerability Fixed

Guido van Rossum 针对 CVE-2011-1521 提到的Python URL库中的安全问题 最近提交了一个补丁. 尽管安全问题很少,但这提供了机会让社区了解当问题产生时如何报告,处理以及解决的步骤。

报告问题

当你发现了CPython的安全问题时,首先要做的事情是把问题细节保持隐蔽。当你确定 发现的是真正意义上的安全漏洞的时候,请提供给核心开发人员一份语义明朗,内容详细 的报告。

一份好的报告需要清晰的解释这个安全漏洞影响了系统的哪些相关部分。如果能提供安全 漏洞发生的特定平台和相应的依赖关系,就更好了。能知道受影响的版本是很有帮助的, 尽管这个安全漏洞一般会针对当前所有的有效版本进行测试。最后,如果你有相关的测试 用例,也请附带提供。报告的接受地址是: security@python.org.

来自Google 安全组的Niels Heinen 最近 提交了一份很好的报告. 他发现了标准库 urlliburllib2 模块中存在的处理HTTP 302 重定向的一个问题。他发现 服务器会把请求转发到不合理的scheme,这样会危及数据甚至是整个系统。在他最初的报告 中,他解释了这种重定向会导致问题的2种情形。

第一:因为 urllib/urllib2 会处理 file:// URL scheme, 如果重定向 到 file:///etc/passwd 就可能暴露所有的密码信息。 第二,Neils还指明,当 重定向指向一个类似于 file://dev/zero 的系统设备时,就能引起系统资源的损耗, 造成拒绝服务攻击。

处理报告

处于安全报告的敏感性, 只有很少数受信任的开发者维护着 security@python.org 列表,他们会尽快分析问题并采取相应的对策。如果你想提交加密报告,请查看在 security news 页上关于 OpenPGP 的详细信息。

如果安全组确认确实存在这样的安全漏洞,他们会公开发表这个bug报告,并提供相应 的补丁。在我们现在这个例子中,Guido van Rossum 完整公开了 issue #11662,以及 相应的补丁。

解决问题

Guido的补丁主要是限制了重定向只能到 http://, https://ftp:// URL scheme。 FTP重定向是可以接受的,因为这在FTP 中是经常发生的: 下载镜像时,系统 经常会把请求转发给地理位置更近也更方便的FTP 服务器。

在 Python 2.x版本中, 当重定向到一个不合理的URL scheme时, FancyURLopenerredirect_internal 方法会抛出一个 IOError 异常。 HTTPRedirectHandlerhttp_error_302 方法也这样处理,它会抛出 HTTPError 异常。 在Python 3 版本中, urllib.request 也用同样的方式解决了问题。在提交的补丁中 还包括了2组 针对有效和无效重定向的测试。

对于正接收补丁的用户,还要提及几点,Python 2.5 最后的安全发行版本马上会发布。 尽管对于其他的维护分支- 2.6, 2.7, 3.1 和 3.2 还没有明确的日程发布相应的漏洞 修复版本,但这些分支都已经修改相应的代码解决了漏洞。

No comments:

Post a Comment