主页 > 网络知识 > Microsoft Forms未授权获取他人邮箱信息漏洞

Microsoft Forms未授权获取他人邮箱信息漏洞

 

Microsoft Forms未授权获取他人邮箱信息漏洞

本文讲述了关于微软在线调查创建应用Microsoft forms的一个漏洞,通过其中的数据分享机制,作者可以藉机获取到参与调查用户的邮箱信息,漏洞最终收获了$2k的奖励。微软的Office365有很多服务,其中的Microsoft Forms以OData数据协议方式实现在线的调查测验创建,并能把相关调查结果数据分享给其他用户。

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

 

OData协议介绍

开放数据协议(Open Data Protocol,简称OData)是一种描述如何创建和访问Restful服务的OASIS标准。该标准由微软发起 ,前三个版本1.0、2.0、3.0都是微软开放标准,遵循微软开放规范承诺书(Microsoft Open Specification Promise)。第四个版本4.0于2014年3月17日在OASIS投票通过成为开放行业标准。OData协议是一种通过Restful交互的应用层数据协议,它支持数据模型的描述、编辑和请求,其基于SQL理念,不管客户端和数据源的具体类型,都能按照客户端请求响应返回相关数据。OData的数据交互模型如下:

 

Microsoft Forms未授权获取他人邮箱信息漏洞

简单来说,OData元数据是系统(如关系数据库中的information_schema)的数据模型之一,对每一个元数据来说都具备相关的实体(类似于数据库中的表)和属性(类似于数据库中的列),以及不同实体类型之间的关系。每种实体类型都有一个实体键,它类似于关系数据库中的键。假设我们有一个名为Customers(顾客)的实体类型,它包括三个属性。此实体类型有以下记录:

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

 

在上述例子中,ID是其中一个实体键。以下请求会返回ID为2的一条顾客记录:

customerApi/Customers(2)

即该请求会返回ID=2的顾客信息。OData和SQL相同的是,我们能以请求方式来获取其中的相关数据。OData支持好几种数据请求方式,例如可以使用以下$select语法去请求受限的实体属性,它会去获取ID=2的顾客email信息:

customerApi/Customers(2)?$select=email

在SQL语法中,其查询样式为:

SELECT email FROM Customers WHERE ID=2;

以上只是为了方便大家了解OData协议举的例子。当然除了$select外,还可以使用其它的查询语法,如JSON或XML格式的数据导出$format等。

漏洞发现

我的漏洞测试思路是:首先需要对目标系统有一个整体的了解认识,然后再去一一测试其中的每个功能属性。在Microsoft Forms这里,我首先测试的是其中的OData元数据,为此,我必须对其元数据格式进行一个深入的了解。这里,我可以请求微软官方的metadata接口来看看:
$metadata

 

Microsoft Forms未授权获取他人邮箱信息漏洞

在上述微软的XML元数据结构中,并没有多少有意义的线索。接着,我又从网站https://pragmatiqa.com/xodata/的OData结构描述中来了解不同OData实体类型的关系:

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

一番学习之后,我尝试着去发现包含敏感信息的实体类型。正巧就发现一个名为forms的实体,其中包含了email在内的用户生成相关数据:

 

 

Microsoft Forms未授权获取他人邮箱信息漏洞

这里的这个email线索让我有了去探寻其他人邮箱的思路。这里,用IDOR和CORS肯定是行不通的。几经测试,我发现了一种可以访问获取到他人email信息的方法,但前提是,我的这种方法需要受害者执行访问某个恶意网站的交互动作。这种受害者交互的限制条件大大降低了漏洞危害性,最终我把漏洞上报后只获得了微软方面的简单致谢。

 

深入构造-未授权的OData实体访问
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!