揭秘SpiderOak共享文件枚举漏洞:技术分析与修复方案

本文详细分析了SpiderOak云存储服务的公共共享文件枚举漏洞,通过HTTP状态码差异实现账户与共享文件探测,包含完整的攻击原理、实测数据、修复建议及开源检测工具实现。

Spidering SpiderOak

大约两年前,我研究了如何枚举Amazon Buckets和Mobile Me上的公共共享内容。2012年初开始使用SpiderOak时,发现该服务也提供数据共享功能,于是决定研究其实现机制是否同样存在可枚举问题。简而言之,漏洞确实存在。2012年3月初,我将发现结果连同演示代码提交给SpiderOak安全团队,他们确认收到邮件并表示将着手修复。

2012年4月初,我考虑在BSides London会议上分享该研究,因此询问SpiderOak修复时间线。4月13日得到回复称修复将在会议前完成,且欢迎进行技术分享。最终我改为演讲《Breaking in to Security》主题,暂时搁置了SpiderOak的研究。

近期Rapid 7发布关于Amazon Buckets的研究引发关注,促使我重新测试SpiderOak漏洞——结果依然有效,现将完整技术细节公开。

工作原理

枚举机制通过HTTP返回状态识别有效账户,再通过RSS订阅源定位有效共享文件。具体流程如下:

  1. 账户枚举
    请求存在的账户(即使共享不存在)返回200状态码:

    1
    2
    3
    4
    
    $ curl -I https://spideroak.com/browse/share/digi_public/not_exist
    HTTP/1.1 200 OK
    Server: nginx/0.7.64
    ...
    

    不存在的账户返回404:

    1
    2
    3
    
    $ curl -I https://spideroak.com/browse/share/digi_public_not_exist/not_exist
    HTTP/1.1 404 Not Found
    ...
    
  2. 共享文件探测
    检查页面头部是否存在RSS链接:

    1
    2
    
    curl -s https://spideroak.com/browse/share/digi_public/does_exist|grep RSS
    <link rel="alternate" type="application/rss+xml" ... />
    

    有效共享的RSS链接返回200,无效共享返回404:

    1
    2
    3
    
    $ curl -I https://spideroak.com/share/XXXWO2K7OB2WE3DJMM/does_exist/?rss
    HTTP/1.1 200 OK
    ...
    
  3. 文件列表获取
    有效RSS订阅源包含完整的文件元数据:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    <?xml version="1.0" encoding="utf-8"?>
    <feed xmlns="http://www.w3.org/2005/Atom">
    <title>does_exist: SpiderOak Share Feed by digi_public</title>
    <entry>
        <title>a_text_file.txt</title>
        <content type="html"><![CDATA[
            <p>Size: 2915999<br>
            Date modified: 2012-06-21 07:54:23</p>
        ]]></content>
    </entry>
    </feed>
    

实测发现

  • 使用2268个常见用户名测试,发现615个有效账户(27.1%命中率)
  • 对58个常见共享名测试,在14个账户中发现97个文件
  • 暴露文件类型包括:圣诞派对照片、音乐专辑、CISSP电子书、疑似成人视频
  • 企业名称测试显示账户存在但未发现有效共享

修复建议

  1. 漏洞层面

    • 统一返回404状态码及相同响应头格式
    • 消除账户存在性探测差异
  2. 防护机制

    • 实施请求频率限制(测试中发起37,938次请求未被拦截)
    • 建立异常行为监控告警系统
    • 设置低阈值IP封锁策略

用户防护措施

  1. 遵循最小共享原则
  2. 将共享名视为密码级别设置
  3. 及时撤销不再需要的共享

共享安全性质疑

与SpiderOak宣传的"零知识加密"原则矛盾点:

  • 共享文件仅依赖共享名保护(非主密码加密)
  • 服务端可能明文存储共享列表或通过日志泄露
  • 理论上内部人员可能通过日志分析获取共享访问权限

检测工具使用

提供开源检测工具Spider Finder 1.0

  • Ruby编写,无需特殊依赖库
  • 支持账户列表和共享名字典爆破
  • 示例用法:
    1
    
    $ ./spider_finder.rb --log-file scan.log username_list.txt common_folders.txt
    

作者声明

尽管存在漏洞,作者仍继续使用SpiderOak服务,认为其整体安全设计优于Dropbox等竞品。所有测试数据已做匿名化处理,未实际下载用户文件。

特别感谢BruCON 5x5奖项对本研究的支持。如需技术细节讨论或漏洞修正,可通过文末联系方式与作者直接沟通。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计