Facebook 服务器缺陷可泄露信息执行远程命令

聚焦源代码安全,网罗国内外最新资讯!

翻译:360代码卫士团队

Facebook的某个服务器中存在一个漏洞,可导致信息泄露和远程代码执行问题。目前该漏洞已修复。

存在问题的是开源的错误追踪应用程序Sentry,它帮助开发人员实时监控并修复崩溃问题。该服务的编程语言是Python,使用的框架是Django。

SCRT信息安全研究员检查该应用程序时发现栈跟踪(出错时显示的函数栈列表)经常在页面弹出。该公司在文章中指出,应用程序似乎在用户密码重设功能方面不稳定,偶尔崩溃。

更重要的是,这些栈跟踪触发了整个应用程序的完整打印输出,尽管有一些关键信息遭编辑。文章指出,“Django调试模式未关闭,从而在发生栈跟踪时会打印整个环境。”然而,Django会在这些栈跟踪中删除关键信息(密码、秘密、密钥),从而避免的大规模的信息泄露问题。

尽管如此,栈跟踪确实泄露了足够的信息片段以构建用于在系统上执行命令的漏洞利用。这些信息包括会话cookie的名称、使用Pickle二进制协议来反序列化Python对象结构的会话序列化程序、会话引擎以及包含用于签名会话的一个密钥的Sentry配置信息列表。最后一种信息非常重要,因为Django用于签名会话cookie的密钥是从栈跟踪中编辑的。

SCRT信息安全公司指出,“SENTRY_OPTIONS列表包含一个名为system.secret-key且未被剪切的密钥。从Sentry文档中可知,system.secret-key是用于会话签名的一种密钥。如果该密钥遭攻陷,那么重新生成就很重要,否则劫持用户会话就更容易。”

研究人员结合所有信息后发现他们能够创建自己的包含任意pickle内容的会话,以便在系统上执行命令。为测试该机制,他们写了一个简单的脚本,将任意payload写入一个特殊构造的sentrysid cookie中。

研究人员指出,“该代码是一个简单的PoC,它拿走现有的sentrysid cookie内容,将其内容替换为在未序列化时运行的任意对象。”

这种payload是一种“睡眠30秒”命令:“当使用这个cookie时,页面实际上会额外加载30秒,这说明确实存在缺陷。”

Verodin公司的行为研究团队主管James Lerud指出,“Facebook看似并未能完全清理面向公众的web app的出错数据。这在web应用程序安全界是一个常见问题,可能所涉及的服务用于测试,而非一种生产资产,尽管这种判断并未得到Facebook的确认。”

Facebook证实该漏洞存在,并在同一天(7月30日)关闭系统,同时准备补丁。一周后问题修复。

研究人员指出,虽然这个漏洞并未直接对Facebook用户造成影响,但它说明了在企业级别修复问题的重要性。

Recorded Future公司的高级安全架构师Allan Liska表示,它是Facebook在某些服务器上运行的某款第三方应用程序中的信息泄露问题,应用程序似乎和用户信息断开连接。

Bromium公司的企业战略和技术高级副总裁Sherban Naum表示,“我们试图在主机(而非服务器)上回答的问题是即使在漏洞存在的情况下也要维护完整性。或者,更好的情况是,我们如何在维护企业高价值资产完整性和隐私性的同时在数据泄露事件中存活下来。”

Naum对研究人员和Facebook公司的做法和响应态度表示赞赏,希望也能引起其他人的注意并更新自己的系统。

https://threatpost.com/facebook-flaw-allowed-remote-commands/136987/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180830B0P77J00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券