导语:微软出现高危漏洞,借助该漏洞,攻击者可以删除全部Microsoft Hub Translator项目,这些项目共有1.3万个以上。由于目前漏洞已经修复,因此本文将对漏洞细节做重点分析。

概述

有一段时间,我致力于寻找微软Web服务中的漏洞,由于微软拥有庞大的在线基础设施,因此我认为漏洞的发现并不困难。在浏览他们的在线服务时,其中的Microsoft Hub Translator翻译服务引起了我的注意。

根据官方介绍,Microsoft Translator Hub能够使企业和个人构建、训练并部署一套定制化的自动语言翻译系统。

于是,我注册了该系统的账户,并开始寻找漏洞。最终,我成功发现了一个高危漏洞,借助该漏洞,攻击者可以删除全部Microsoft Hub Translator项目,这些项目共有1.3万个以上。由于目前漏洞已经修复,因此本文将对漏洞细节做重点分析。

技术细节

Microsoft Hub Translator允许用户创建自定义的自动语言翻译系统。因此,我注册并创建了一个系统,显然该系统只是为了寻找漏洞,但我并不了解该系统实际上的全部功能。在尝试过程中,我创建了一个名为“huntingbugs”的项目。

1.jpg

如大家所见,该项目有“编辑”和“删除”功能。如果用户点击“删除”,就会删除该项目,这一操作非常简单。在这时,我启动了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
  Cookie: RPSAuth=FABKARSt1lMxfQ39EcbVsLWT8hLbEL12RANmAAAEgAAACI6Hs92zqyRlCAGce1EqwSJmjJe21nXVHarrEJ9ROzjj21XAthl%2BUUjzX3XR5JeCB8WI0oMdmwQhyn30OIiubBYaeLeg21nqXT06UwzczFIDAjoqU%2BQpCg9SWaLSVSC3aKMZPT92NVjgySbIV8YYxPA4XMVMbU04mvNKv8v5vaGVMUNBtjHldxFqKYEWqI5P0UZetmtagzOK%2Bf2CRFbgb3Gak68RN6Mjj/xXt2ovC8pxYn2qb9MqSNxHC4Y3bA8n6vyZoJzM6Uu0zZpTUPIhv5L1PyHOO3FdXFELqttx2Yd2LEJNvxjkmON9KcYXIR%2BlUsHfimE901msD9XWB1SLG3zvm06oacncf1WGrdjEdnA2lOgUALlEhQzxHbGm6TryDMpq%2BbrTU/wG; RPSSecAuth=FABKARSt1lMxfQ39EcbVsLWT8hLbEL12RANmAAAEgAAACKDdutui3VqgCAE5DVaipcaF6WaWT%2B0L0ppLMAd7kigpYcQ89xhwiDiYN9yNhyVf86EW6KiiOs7FY2PCTFH2rM/uH3LYLIhTEYturZ5vOjVPBUP6QqqAtP9rvUCtv9%2Bakv9WNwY4gpZzQ4SXjtVpSMqyrV3RIN/emocWtNDmU5BPrnAZk50oAnoSf6aJX5IjaNcXc61Tv3BSO6m3GKLevxWnpSoyLzIajETwMSBe84fL5fWyUI0r3jXq7rW/rUh/Go/R4OzS2nL1okl512yFcZFZFXdsEq6k5M0lKP0L9ZTVtaW0WiZKXKgY%2B%2BPPtImjI5whKX2U4wbqgPiD1rxXwDogAlcrLKu6YGEHfVg01iG0GQ0UAF%2BhVQ4CptuuRm8tI8XE9zmo3%2Bhr; ANON=A=365DFF2DD45617971705DA33FFFFFFFF&E=1089&W=1; NAP=V=1.9&E=102f&C=h8ZS17Xmf0z4Q2T9Dj26e_Pijaca9G00g1PJCcXaI36L1P7jWHYOFQ&W=1; mstcid=[RemovedEmail]
  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”被删除,这时没有任何异常。

2.jpg

如果我们查看请求,首先会注意到没有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的值进行修改,并提交请求。为了测试这一行为,我又注册了另一个账户,并且从不同的浏览器登录,创建了两个新项目。

3.jpg

回到Burp Suite,并开始使用projectID参数值进行模糊测试。我将ID参数由实际项目编号修改为第二个账户中创建的项目的ID值,并发送请求刷新页面。

4.jpg

我在HTTP请求中,通过修改projectID成功实现了越权删除项目。从技术上来说,这一漏洞属于间接对象引用。现在,我只需要循环尝试0到13000(最后一个项目)的值,就可以从数据库中删除所有项目。为了防范这一漏洞,需要在这里进行严格校验,判断用户所请求的项目是否属于其本人创建,然而微软却忽略了这一点。

提交漏洞及相关反馈

我通过微软的安全确认计划,报告了这一漏洞。他们最初回应如下。

5.jpg

并且,将我加入到了微软安全研究者名人堂中(Microsoft Hall of fame for Security Researchers)。

6.jpg

与此前微软安全确认计划需要的漫长时间不同,这一次从漏洞提交到修复,只花费了两周左右的时间,可以说是非常高效了。

源链接

Hacking more

...