如何在Microsoft Translator中越权删除1.3万个项目
Posted 嘶吼专业版
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Microsoft Translator中越权删除1.3万个项目相关的知识,希望对你有一定的参考价值。
概述
有一段时间,我致力于寻找微软Web服务中的漏洞,由于微软拥有庞大的在线基础设施,因此我认为漏洞的发现并不困难。在浏览他们的在线服务时,其中的Microsoft Hub Translator翻译服务引起了我的注意。
根据官方介绍,Microsoft Translator Hub能够使企业和个人构建、训练并部署一套定制化的自动语言翻译系统。
于是,我注册了该系统的账户,并开始寻找漏洞。最终,我成功发现了一个高危漏洞,借助该漏洞,攻击者可以删除全部Microsoft Hub Translator项目,这些项目共有1.3万个以上。由于目前漏洞已经修复,因此本文将对漏洞细节做重点分析。
技术细节
Microsoft Hub Translator允许用户创建自定义的自动语言翻译系统。因此,我注册并创建了一个系统,显然该系统只是为了寻找漏洞,但我并不了解该系统实际上的全部功能。在尝试过程中,我创建了一个名为“huntingbugs”的项目。
如大家所见,该项目有“编辑”和“删除”功能。如果用户点击“删除”,就会删除该项目,这一操作非常简单。在这时,我启动了Burp Suite并开始拦截HTTP请求。下面是“删除”的HTTP请求。
“删除项目”操作的HTTP请求:
POST /Projects/RemoveProject?projectId=12839 HTTP/1.1
Host: hub.microsofttranslator.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://hub.microsofttranslator.com/Projects/Index
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
我们看到,在URL中的POST请求并没有内容和参数,这让人觉得有点奇怪。上述请求中的“projectid”参数是数据库中单个项目的ID,在我们的尝试中这一参数为“12839”。通过观察上面的HTTP请求,我们发现一个简单的删除项目操作可能是这样的:
Delete project
FROM projects
WHERE projectid=12839;
在转发HTTP请求之后,我们的项目“12839”被删除,这时没有任何异常。
如果我们查看请求,首先会注意到没有CSRF保护。这样一来,就很容易发生CSRF攻击。简而言之,CSRF漏洞允许攻击者伪装成合法登录的用户,并以他们的权限执行操作。我们考虑以下场景:
1、一位合法的用户已经登录;
2、攻击者在页面中包含一个URL(可以通过img标签、iframe等很多种方式):http://hub.microsofttranslator.com/Projects/RemoveProject?projectId=12839 ;
3、被攻击用户访问该页面,上述请求将从他们的浏览器中发出;
4、要有效执行这一攻击,必须首先知道被攻击用户的ProjectID编号;
5、由于该网站没有防范CSRF的Token这样的CSRF防护措施,因此会导致该项目被删除;
6、即使这一网站有防范CSRF的措施,也可以采用CSRF Token绕过的方式。
越权删除项目
接下来,我们再看看删除项目的HTTP请求。我们尝试着对projectID的值进行修改,并提交请求。为了测试这一行为,我又注册了另一个账户,并且从不同的浏览器登录,创建了两个新项目。
回到Burp Suite,并开始使用projectID参数值进行模糊测试。我将ID参数由实际项目编号修改为第二个账户中创建的项目的ID值,并发送请求刷新页面。
我在HTTP请求中,通过修改projectID成功实现了越权删除项目。从技术上来说,这一漏洞属于间接对象引用。现在,我只需要循环尝试0到13000(最后一个项目)的值,就可以从数据库中删除所有项目。为了防范这一漏洞,需要在这里进行严格校验,判断用户所请求的项目是否属于其本人创建,然而微软却忽略了这一点。
提交漏洞及相关反馈
我通过微软的安全确认计划,报告了这一漏洞。他们最初回应如下。
并且,将我加入到了微软安全研究者名人堂中(Microsoft Hall of fame for Security Researchers)。
与此前微软安全确认计划需要的漫长时间不同,这一次从漏洞提交到修复,只花费了两周左右的时间,可以说是非常高效了。
以上是关于如何在Microsoft Translator中越权删除1.3万个项目的主要内容,如果未能解决你的问题,请参考以下文章
在Application中集成Microsoft Translator服务之翻译语言代码
在Application中集成Microsoft Translator服务之使用http获取服务
在Application中集成Microsoft Translator服务之开发前准备
在Application中集成Microsoft Translator服务之优化