白帽故事 · 2024年10月18日 0

发现Facebook SSRF,收获31500美元赏金的故事【2】

书接上回,既然知道 MicroStrategy Web SDK 托管在 Facebook 的生产服务器上。 而 MicroStrategy Web SDK 又是用 Java 编程语言编写的,那么就继续进行代码审计吧。

一晃26天过去了,“有趣”的东西也开始逐渐多了起来。

在“com.microstrategy.web.app.task.WikiScrapperTask”类中,可以观察到字符串“str1”是作为参数发送的用户提供的输入初始化的。

它将检查提供的字符串是否以 http://(或 https://)开头, 如果是,则调用函数“webScrapper”。

file

“webScrapper”函数将在内部使用 Jsoup 向提供的 URL 发送 GET 请求,从而用于获取和解析 HTML 页面。

file

又是一个SSRF!

file

file

不幸的是,这是一个 SSRF盲注,所以无法证明它允许提交内部 GET 请求。

然而,部署在 m-nexus.thefacebook.com 域上的 MicroStrategy Web SDK ,经过确认后,却是一个内部 SSRF。

由于无法枚举防火墙背后的内部基础设施,也无法泄露任何敏感信息。

如果向 Facebook 报告这个漏洞,他们依然会拒绝,因为这样的漏洞不产生任何有害的影响。

那么下一步该怎么做呢?

又是几个月过去了…

白帽小哥在 Facebook 上发现了另一个漏洞,其中 URL 缩短程序可能会泄露有关服务器的敏感信息。

Facebook 在https://fb.me/ 上有自己的 URL 缩短服务,此 URL 缩短服务可供内部(Facebook 员工)和公共用户使用。

然而短 URL 只会使用 HTTP Location 标头将用户重定向到长 URL,而且网站“fb.me”没有设置速率限制。

在burp suite intruder的帮助下,成功捕获到几个短链接,这些短链接会将用户重定向到内部系统,但内部系统会将用户重定向到Facebook主域(即facebook.com)。

比如:

https://fb.me/xyz ==> 301 永久转移 https://our.intern.facebook.com/intern/{some-internal-data } ==> 302 Found
https://www.facebook.com/intern/{some-internal-data } ==> 404 Not Found

注意,一些将用户重定向到内部系统的短链接是由 Facebook 内部员工生成的,极有可能包含敏感的内部信息。例如“https://our.intern.facebook.com/intern/webmanager?domain=xyz.com&user=admin&token=YXV0aGVudGljYXRpb24gdG9rZW4g

file

上图中红框内显示了日志文件夹的内部完整路径。

利用Python实现一个自动化脚本来执行上面的操作:

file

可以看到泄露了内部 HTTP GET 查询:

file

file

该漏洞可以在未经任何身份验证的情况下泄露了日志文件夹的内部路径、其它文件路径、使用获取数据的内部系统查询、内部IP地址、内部ID、配置相关信息、私人文档等信息。

漏洞链利用

  1. SSRF盲注——向内部和外部系统提交GET请求
  2. 服务器敏感信息泄露——日志文件夹的内部路径、其他文件路径、用于获取数据的内部系统查询、内部IP地址、内部ID

通过以上场景,从而展示敏感信息泄露如何有助于发起路径遍历和服务器端请求伪造 (SSRF) 等特定攻击。

如果攻击者足够了解网络的内部 IP 地址,TA就更能够容易针对内部网络中的系统进行攻击。

于是第一时间向 Facebook 提交了两个漏洞的 PoC,很快便收到了回复:

file

收到‘拒绝’的回复后,发现 SSRF 盲注漏洞被修复(“wikiScrapper”任务不再可访问/注册),这也太“无耻”了!

经过一番交涉,依然没有任何效果。

file

又过去了几天,又发现一处新的SSRF盲注,从 MicroStrategy Web SDK 的源代码中可以确认它同样是一个内部 SSRF。

在“com.microstrategy.web.app.utils.usher”类中,可以观察到处理“serverURL”参数的“validateServerURL”函数。

“validateServerURL”函数将在内部向提供的 URL 发送 GET 请求。

file

file

file

于是再次请求Facebook允许按照上一封电子邮件中描述的场景进行操作。

很快便收到了Facebook的答复,他们能够重现该漏洞,并且正在积极开发修复补丁,同时通报了赏金奖励情况。

file

出于职业习惯,白帽小哥还想测试了MicroStrategy演示门户上是否存在SSRF漏洞,同样存在漏洞。能够利用 AWS 元数据 API 从他们的服务器获取信息。

file

同样向 MicroStrategy 的安全团队报告了该漏洞,很快也收到了回复信息:

file

从本案例中,白帽小哥通过漏洞成功赚取了31500 美元的赏金奖励(1,000 美元 + 30,000 美元 + 500 美元)。

希望你也能从故事中有所收获。

以上内容由骨哥整理并再创作。

原文:https://medium.com/@win3zz/how-i-made-31500-by-submitting-a-bug-to-facebook-d31bb046e204