【漏洞预警】Tornado某缺陷可能造成文件读取漏洞 (updated @ 2015-03-04)

更多

昨晚,wooyun上有用户报告Tornado框架某缺陷可能造成文件读取漏洞。该用户没有在公开描述中提到更多的信息。

1. 影响版本
起始版本未知,至少影响3.1及以上版本。

2. 漏洞描述
可能造成不应被读取的文件被读取。
洞主没有明确说明被读取的文件需要满足何种条件。
根据我的猜测,应为全平台,但文件名需满足特定条件(见第4节)。

3. 网友观点

在v2ex的讨论贴(/t/173839)中,用户RIcter认为该漏洞可能是StaticFileHandler造成的,利用条件为:Windows环境,且文件名与指定的静态文件目录名一致,因此利用价值不大。不过,这个说法还没有得到乌云洞主的肯定,不能确定是否是一个问题。

4. 我的观点
下面我根据自己的理解,给出第3节这个说法的分析,最终结论与该网友有所区别

设静态目录为tstatic(绝对路径C:\tornado\project\tstaic)。
设要打开的URL为:http://localhost:8000/static/lvl1\\..\\..\\tstatic.jpg。

a) StaticFileHandler -> get -> self.path = self.parse_url_path(path)
本方法的目的是将”/”变更为服务器所在操作系统的目录分隔符。
此步过后,得到的self.path = ‘lvl1\\..\\..\\tstatic.jpg’

b) StaticFileHandler -> get -> self.get_absolute_path(self.root, self.path)
本方法的目的是得到请求文件的绝对路径。
这里的self.root为静态目录的相对路径,对本例而言为’tstatic’;self.path为a)得到的结果。
此步执行的操作为os.path.abspath(os.path.join(root, path)),得到
绝对路径’C:\\tornado\\project\\tstatic.jpg’

c) StaticFileHandler -> get -> self.absolute_path = self.validate_absolute_path(self.root, absolute_path)
本方法的目的是验证得到的路径是否合法,不合法的请求给出错误。
在这里,程序进行了如下验证:

其中:
absolute_path + os.path.sep = ‘C:\\tornado\\project\\tstatic.jpg\\’
root = ‘C:\\tornado\\project\\tstatic’ (已变为绝对路径)

可知本if语句的raise没有被执行,即认为是合法的请求了,而后续的代码里也没有与此相关的验证,最终返回’C:\\tornado\\project\\tstatic.jpg’。

可以看出,在Windows系统中,如果请求的文件名是以静态目录名称起始,且与静态目录同级的情况下,会被请求到不该被请求到的文件。

那么,Linux系统中就不成立了吗?
实际上并不是!

Tornado文件读取漏洞1

Tornado文件读取漏洞2

只不过在使用浏览器请求的时候,”../”可能被浏览器直接处理了,才造成Linux下没有这个漏洞的错觉。

因此,利用条件应为:全平台,请求文件名以静态目录名为前缀,请求文件与静态目录同级

那么,这个利用条件比较苛刻,因此这个漏洞还是很鸡肋的。当然,洞主也许说的并不是这个漏洞。

4. 解决方法
官方暂未对该漏洞提供解决方案。

不过,在web.py的StaticFileHandler类的docstring中提到:

StaticFileHandler类主要用于开发环境和轻型的文件服务,建议用户在线上的大流量环境中使用更加专注的静态文件服务器(如nginx/Apache)。

本文内容遵从CC3.0版权协议,转载请注明:转自Pythoner

本文链接地址:【漏洞预警】Tornado某缺陷可能造成文件读取漏洞 (updated @ 2015-03-04)

  1. 膜拜大神,看到INTRODUCTION to Tornado的翻译,拜访过来的。因为在线看不方便,所以做成了epub电纸书,我不会外传的,只是跟翻译的人说一下 [em_ksh]

  2. 学习啦, [em_zan]

    • simon
    • 2015/07/30 2:30下午

    http://demo.pythoner.com/itt2zh/ch5.html

    5.1 异步Web请求
    第三段twitter第一次出现写成了twotter

    感谢!

  3. 请问一下楼主用的wordpress的高亮代码的是什么插件?

      • alioth310
      • 2016/05/17 9:58上午

      Crayon Syntax Highlighter

  1. 暂无 Trackback

[em_zan] [em_yali] [em_xiao] [em_xhj] [em_tucao] [em_tu] [em_tiaopi] [em_sx] [em_sdz] [em_sbq] [em_mobai] [em_kzh] [em_ku] [em_ksh] [em_keai] [em_jiong] [em_jing] [em_hx] [em_han] [em_ganga] [em_daxiao] [em_cool] [em_chi] [em_bu] [em_bizui] [em_ai]

return top