挖洞经验 | Microsoft Forms未授权获取他人邮箱信息漏洞
字数 1015 2025-08-15 21:33:21

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

1. 漏洞背景

Microsoft Forms是微软Office 365套件中的在线调查创建应用,允许用户创建问卷、测验等表单并收集数据。该服务使用OData协议实现数据交互和共享功能。

2. OData协议基础

2.1 OData协议概述

开放数据协议(OData)是一种描述如何创建和访问Restful服务的OASIS标准:

  • 前三个版本(1.0-3.0)由微软开发
  • 4.0版本于2014年成为开放行业标准
  • 基于SQL理念,支持数据模型描述、编辑和请求

2.2 OData核心概念

  • 元数据:描述系统数据模型
  • 实体:类似于数据库中的表
  • 属性:类似于数据库中的列
  • 实体键:类似于关系数据库中的主键

2.3 OData查询语法示例

基本请求格式:

customerApi/Customers(2)

使用$select查询特定属性:

customerApi/Customers(2)?$select=email

等效SQL:

SELECT email FROM Customers WHERE ID=2;

3. 漏洞发现过程

3.1 初始信息收集

  1. 访问Microsoft Forms元数据接口:

    http://forms.office.com/formapi/api/$metadata
    
  2. 分析XML元数据结构,寻找敏感实体

3.2 关键实体发现

发现forms实体包含email属性,表明可能存在用户邮箱信息泄露风险。

3.3 初步利用尝试

最初发现的方法需要受害者交互:

  • 受害者访问恶意网站
  • 危害性较低,仅获微软致谢

4. 深入漏洞利用

4.1 数据分享机制分析

Microsoft Forms数据分享流程:

  1. 用户A创建表单并生成分享链接
  2. 用户A将链接发送给用户B
  3. 用户B通过链接提交数据

用户B提交数据时的请求格式:

formapi/api/<ownerTenantID>/users/<ownerID>/forms(<formID>)/responses

4.2 关键突破点

发现runtimeForms实体:

  • 包含createdBy属性
  • forms实体共享相同的实体键(formID)
  • 允许通过$select查询createdBy属性

4.3 最终利用方法

构造请求:

formapi/api/<ownerTenantID>/users/<ownerID>/runtimeForms(<formID>)?$select=createdBy

成功获取受害者邮箱信息,无需任何交互。

5. 漏洞修复建议

  1. 实施严格的访问控制,验证请求者权限
  2. 对敏感实体和属性设置额外保护
  3. 限制$select查询对敏感字段的访问
  4. 加强OData端点权限验证机制

6. 总结

该漏洞利用Microsoft Forms中OData协议的实现缺陷:

  • 通过分析元数据发现敏感实体
  • 利用实体间共享键的特性绕过限制
  • 最终实现未授权获取用户邮箱信息
  • 获得微软$2000漏洞奖励

此案例展示了API端点权限验证的重要性,以及在实现数据共享功能时需要特别注意的安全边界。

Microsoft Forms未授权获取他人邮箱信息漏洞分析 1. 漏洞背景 Microsoft Forms是微软Office 365套件中的在线调查创建应用,允许用户创建问卷、测验等表单并收集数据。该服务使用OData协议实现数据交互和共享功能。 2. OData协议基础 2.1 OData协议概述 开放数据协议(OData)是一种描述如何创建和访问Restful服务的OASIS标准: 前三个版本(1.0-3.0)由微软开发 4.0版本于2014年成为开放行业标准 基于SQL理念,支持数据模型描述、编辑和请求 2.2 OData核心概念 元数据 :描述系统数据模型 实体 :类似于数据库中的表 属性 :类似于数据库中的列 实体键 :类似于关系数据库中的主键 2.3 OData查询语法示例 基本请求格式: 使用$select查询特定属性: 等效SQL: 3. 漏洞发现过程 3.1 初始信息收集 访问Microsoft Forms元数据接口: 分析XML元数据结构,寻找敏感实体 3.2 关键实体发现 发现 forms 实体包含 email 属性,表明可能存在用户邮箱信息泄露风险。 3.3 初步利用尝试 最初发现的方法需要受害者交互: 受害者访问恶意网站 危害性较低,仅获微软致谢 4. 深入漏洞利用 4.1 数据分享机制分析 Microsoft Forms数据分享流程: 用户A创建表单并生成分享链接 用户A将链接发送给用户B 用户B通过链接提交数据 用户B提交数据时的请求格式: 4.2 关键突破点 发现 runtimeForms 实体: 包含 createdBy 属性 与 forms 实体共享相同的实体键( formID ) 允许通过 $select 查询 createdBy 属性 4.3 最终利用方法 构造请求: 成功获取受害者邮箱信息,无需任何交互。 5. 漏洞修复建议 实施严格的访问控制,验证请求者权限 对敏感实体和属性设置额外保护 限制 $select 查询对敏感字段的访问 加强OData端点权限验证机制 6. 总结 该漏洞利用Microsoft Forms中OData协议的实现缺陷: 通过分析元数据发现敏感实体 利用实体间共享键的特性绕过限制 最终实现未授权获取用户邮箱信息 获得微软$2000漏洞奖励 此案例展示了API端点权限验证的重要性,以及在实现数据共享功能时需要特别注意的安全边界。