V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
RIcter
V2EX  ›  Python

Tornado 框架某缺陷可能造成文件读取漏洞

  •  
  •   RIcter ·
    RicterZ · 2015-03-02 00:08:01 +08:00 via iPad · 5825 次点击
    这是一个创建于 3555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    19 条回复    2015-03-02 12:26:39 +08:00
    kslr
        1
    kslr  
       2015-03-02 00:15:46 +08:00 via Android
    可能,期待公布过程
    mywaiting
        2
    mywaiting  
       2015-03-02 00:17:40 +08:00
    StaticFileHandler的问题?
    RIcter
        3
    RIcter  
    OP
       2015-03-02 00:18:18 +08:00 via iPad   ❤️ 1
    @mywaiting 我估计也是,但是不敢确定,稍微看一下代码好了
    Livid
        4
    Livid  
    MOD
       2015-03-02 00:33:50 +08:00
    把可能需要用到 StaticFileHandler 的地方都换到 Nginx 里配置吧。
    evlos
        5
    evlos  
       2015-03-02 00:34:55 +08:00
    Wut?! 赶紧出补丁啊啊啊!
    RIcter
        6
    RIcter  
    OP
       2015-03-02 00:48:39 +08:00   ❤️ 2
    @Livid
    @evlos
    @mywaiting
    @kslr
    不仅仅是 StaticFileHandler 的样子, settings 里的 static_file 也一样。
    **大体**测试出来在 **Windows** 下可以读取文件,而且不是任意文件。
    比如:

    settings = {
    "static_path": os.path.join(os.path.dirname(__file__), "xxx")
    }

    curl http://10.211.55.5:8888/static/static\\\\..\\..\\xxx.txt

    文件名要和指定的目录一样,略鸡肋。不过我不确定 wooyun 上的漏洞和我是否一样 :(
    latyas
        7
    latyas  
       2015-03-02 00:54:25 +08:00
    ?还有人用web framework的static配置来路由静态文件?
    mywaiting
        8
    mywaiting  
       2015-03-02 01:02:30 +08:00   ❤️ 1
    @RIcter 这速度,我略表汗颜......

    settings里面的static_file默认也是调用StaticFileHandler来实现的。

    @Livid 翻了一下V2EX的HTML源代码,有必要提醒一下,这样的URL:

    https://www.v2ex.com/static/js/v2ex.js?v=8a80fb0cbc5ebd7a71574b13793cef3b

    就已经是调用了StaticFileHandler来实现在链接后面加上v=version这样的版本号的。
    Livid
        9
    Livid  
    MOD
       2015-03-02 01:23:10 +08:00
    @mywaiting StaticFileHandler 确实生成了后面的版本号,但是网站在提供服务时,在 Nginx 配置里加入这样一段:

    location ^~ /static/ {

    root /example/site;
    expires max;

    }
    typcn
        10
    typcn  
       2015-03-02 01:32:37 +08:00   ❤️ 2
    @Livid 另外提醒一下,你相信了来自客户端的数据,
    X-Forwarded-For:127.0.0.1 就可以无视你的访问频率限制了
    bfti
        11
    bfti  
       2015-03-02 04:57:34 +08:00
    如果不看乌云,服务器就很可能被入侵么?
    ehs2013
        12
    ehs2013  
       2015-03-02 07:40:22 +08:00
    没在生产中用过 StaticFileHandler。
    futursolo
        13
    futursolo  
       2015-03-02 08:01:18 +08:00
    用GridFS的就偶一个?
    letitbesqzr
        14
    letitbesqzr  
       2015-03-02 10:34:55 +08:00
    @typcn 但如果不去读X-Forwarded-For头,有些大学或者大型网络里只有一个出口ip,那不会影响正常用户访问?
    geew
        15
    geew  
       2015-03-02 11:00:34 +08:00
    tornado 的 StaticFileHandler一般不用在生产环境中的吧 官方也不推荐...
    raincious
        16
    raincious  
       2015-03-02 11:08:08 +08:00 via Android   ❤️ 1
    @letitbesqzr

    X-Forwarded-For其实并非不安全,没做校验检查才会造成不安全。 X-Forwarded-For这东西需要搭配TrustedProxies表来用才是安全的,但是部署人员就多了个职责。多框架只是将它解析出来了而已,数据是否伪造其实是未知的。
    est
        17
    est  
       2015-03-02 11:58:20 +08:00
    @raincious 赞头像。。。

    其实办法很多啦。改个X-MY-REAL-Forwarded_For 欢迎来猜我用的什么头
    est
        18
    est  
       2015-03-02 12:01:15 +08:00
    如果真是StaticFileHandler,而且是windows only,那么估计没人理会这漏洞。。。。。。。。生产环境中这个招的也只能说活该呃。。。。。。
    feelapi
        19
    feelapi  
       2015-03-02 12:26:39 +08:00
    @typcn 可以完全使用nginx处理静态文件么?那不是要求网站的url设计要小心,静态的页面也要放在特别的位置,比如API Docs这种只读的页面。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1205 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:22 · PVG 02:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.