Sure Security Team - 西凯|关注网络安全

记一次Twitter挖洞 CSP绕过+XSS漏洞

在这篇文章中,我不仅要告诉大家在这样一个如此热门且非常安全的大型网站中找到一个XSS漏洞是有多么的困难,而且我还会跟大家描述我是如何配合另一个CSP(内容安全策略)绕过漏洞并最终在Twitter.com的节点中找到了一个XSS漏洞。


此前,也有人发现了Twitter任意账户发送推文漏洞,但Twitter的漏洞总体来说较少且较难挖掘。


漏洞的发现过程:


在对Twitter的子域名进行了一番研究之后,我发现了节点https://careers.l.bst.126.net/cms/18031/404.html?1&2=/。你估计已经猜到了,这是Twitter的求职网站,你可以在这里寻找自己在Twitter的工作机会,不过我来这里是为了寻找安全漏洞的。


研究了片刻之后,我发现我似乎找到了一个反射型XSS漏洞。URL如下(注意其中的location参数):
https://careers.l.bst.126.net/cms/18031/404.html?1&2=/en/jobs-search.html?location=1"onmouseover=”alert(1)&q=1&start=70&team=


但是请等一下,这里竟然没有弹出对话框!我竟然没能触发对话弹窗?原来,Twitter采用了如下的内容安全策略(CSP):
content-security-policy: default-src‘self’ ; connect-src ‘self’ ; font-src ‘self’ https://*.twimg.comhttps://*.l.bst.126.net/cms/18031/404.html?1&2= data:; frame-src ‘self’ https://l.bst.126.net/cms/18031/404.html?1&2=https://*.l.bst.126.net/cms/18031/404.html?1&2= [REDACTED] https://*.l.bst.126.net/cms/18031/404.html?1&2=; report-uri https://l.bst.126.net/cms/18031/404.html?1&2=/i/csp_report


原来,Twitter所采用的CSP禁止了网站弹出JavaScript警告窗口,所以很不幸我无法通过这样的方式来利用这个反射性XSS漏洞。现在唯一的办法就是绕过CSP!


在接下来的时间里,我尝试了很多种方法,也尝试寻找了一些其他的子域名,最终我发现了一个带有隐藏GET请求的URL节点:
https://analytics.l.bst.126.net/cms/18031/404.html?1&2=/tpm?tpm_cb=
响应信息的Content-Type为 application/javascript,而我在这里写的参数tpm_cb被反射到了页面上!


这一次我就很幸运了,我结合我所发现的东西最终成功地利用了这个XSS漏洞。我设计的PoC代码如下:
https://careers.l.bst.126.net/cms/18031/404.html?1&2=/en/jobs-search.html?location=1">/analytics.l.bst.126.net/cms/18031/404.html?1&2=/tpm?tpm_cb=alert(document.domain)>//
果然不出我所料,终于成功了!


总结
虽然过程比较艰辛,但结果总归是好的。
于是我立刻通过Twitter在HackerOne上的漏洞奖励计划将该问题报告给了Twitter,而Twitter的安全专家很快对我上报的漏洞进行了评估和分类,并迅速给我提供了漏洞奖金。值得一提的是,Twitter很快便修复了其求职网站中的XSS漏洞,但这个CSP绕过漏洞却花了很久时间才解决。不过无论怎样,这些漏洞最终都已经得到了修复。

评论

小成功依靠个人,大成功依靠团队,天下没有完美的个人,只有完美的团队。