挖洞经验 | SharePoint邮件通知服务中的XSS漏洞
字数 1076 2025-08-18 11:38:22

SharePoint邮件通知服务中的XSS漏洞分析与防护

漏洞概述

本教学文档详细分析微软SharePoint邮件通知服务中发现的存储型XSS漏洞。该漏洞存在于Office 365的SharePoint服务中,允许攻击者通过发送特制邮件实现非交互式XSS攻击,无需用户打开邮件即可触发。

技术背景

SharePoint通知服务机制

SharePoint作为Office 365的协作平台组件,提供实时通知功能:

  • 浏览器客户端每分钟轮询检查新邮件/消息
  • 通过特定URL发起GET请求:
    https://outlook.office365.com/owa/ev.owa2?ns=PendingRequest&ev=PendingNotificationRequest&UA=0&cid=[cid]&X-SuiteServiceProxyOrigin=https://[company].sharepoint.com
    
  • 服务器响应采用JSON格式嵌入在<script>标签中

通知消息格式

服务器响应示例:

<script>[{
  "__type":"NewMailNotificationPayload:#Exchange",
  "id":"NewMailNotification",
  "Sender":"SenderInformation",
  "Subject":"Email Subject",
  "PreviewText":"Preview Text",
  "ItemId":"[itemID]",
  "ConversationId":"[conversationID]",
  "IsClutter":false,
  "SenderSmtpEmailAddress":"johndoe@example.com",
  "InferenceClassification":"Focused",
  "EventType":"0"
}]</script>

漏洞详情

漏洞位置

PreviewText参数未正确过滤HTML特殊字符,特别是:

  • 单引号(')和双引号(")已被转义
  • 反引号(`)未被转义
  • <>/等符号未被过滤

漏洞利用方式

构造恶意邮件使PreviewText包含XSS Payload:

<script>[{
  "__type":"NewMailNotificationPayload:#Exchange",
  "id":"NewMailNotification",
  "Sender":"SenderInformation",
  "Subject":"Email Subject",
  "PreviewText":"</script><script>alert(`hello`)</script>",
  "ItemId":"[itemID]",
  "ConversationId":"[conversationID]",
  "IsClutter":false,
  "SenderSmtpEmailAddress":"johndoe@example.com",
  "InferenceClassification":"Focused",
  "EventType":"0"
}]</script>

攻击特点

  1. 非交互触发:无需用户打开邮件,仅需接收邮件
  2. 自动执行:通过SharePoint的轮询机制自动触发
  3. 高隐蔽性:可构造看似正常的邮件内容

攻击场景示例

凭证窃取攻击流程

  1. 攻击者发送包含XSS Payload的邮件:

    • 使用CSS缩小代码/改变字体颜色隐藏恶意内容
    • 嵌入伪造的会话过期提示脚本
  2. 受害者处于SharePoint登录状态时:

    • 后台轮询服务加载恶意Payload
    • 显示伪造的"Session expired, Please log in again"提示
  3. 用户点击确认后:

    • 重定向到攻击者控制的钓鱼网站
    • 诱导输入凭证信息

漏洞修复方案

微软已通过以下方式修复该漏洞:

  1. 序列化程序调整:确保所有敏感字符(包括反引号)被正确编码转义
  2. 输出过滤增强:对PreviewText等动态内容进行严格HTML编码

防护建议

对于SharePoint管理员

  1. 确保系统更新至最新版本
  2. 实施内容安全策略(CSP)限制内联脚本执行
  3. 监控异常的通知服务请求

对于开发人员

  1. 对所有动态输出的内容进行上下文相关的编码
  2. 使用安全的JSON序列化方法
  3. 实施严格的输入验证机制

对于终端用户

  1. 警惕意外出现的登录提示
  2. 启用多因素认证降低凭证泄露风险
  3. 定期检查邮件规则和转发设置

总结

该案例展示了即使在现代成熟产品中,XSS漏洞仍可能通过非典型路径存在。关键在于:

  • 理解所有数据流经路径
  • 不信任任何用户可控输入
  • 实施纵深防御策略

通过分析此类漏洞,可以提升对复杂系统安全性的认识,并在自身开发中避免类似错误。

SharePoint邮件通知服务中的XSS漏洞分析与防护 漏洞概述 本教学文档详细分析微软SharePoint邮件通知服务中发现的存储型XSS漏洞。该漏洞存在于Office 365的SharePoint服务中,允许攻击者通过发送特制邮件实现非交互式XSS攻击,无需用户打开邮件即可触发。 技术背景 SharePoint通知服务机制 SharePoint作为Office 365的协作平台组件,提供实时通知功能: 浏览器客户端每分钟轮询检查新邮件/消息 通过特定URL发起GET请求: 服务器响应采用JSON格式嵌入在 <script> 标签中 通知消息格式 服务器响应示例: 漏洞详情 漏洞位置 PreviewText 参数未正确过滤HTML特殊字符,特别是: 单引号( ' )和双引号( " )已被转义 反引号( ` )未被转义 < 、 > 、 / 等符号未被过滤 漏洞利用方式 构造恶意邮件使 PreviewText 包含XSS Payload: 攻击特点 非交互触发 :无需用户打开邮件,仅需接收邮件 自动执行 :通过SharePoint的轮询机制自动触发 高隐蔽性 :可构造看似正常的邮件内容 攻击场景示例 凭证窃取攻击流程 攻击者发送包含XSS Payload的邮件: 使用CSS缩小代码/改变字体颜色隐藏恶意内容 嵌入伪造的会话过期提示脚本 受害者处于SharePoint登录状态时: 后台轮询服务加载恶意Payload 显示伪造的"Session expired, Please log in again"提示 用户点击确认后: 重定向到攻击者控制的钓鱼网站 诱导输入凭证信息 漏洞修复方案 微软已通过以下方式修复该漏洞: 序列化程序调整 :确保所有敏感字符(包括反引号)被正确编码转义 输出过滤增强 :对 PreviewText 等动态内容进行严格HTML编码 防护建议 对于SharePoint管理员 确保系统更新至最新版本 实施内容安全策略(CSP)限制内联脚本执行 监控异常的通知服务请求 对于开发人员 对所有动态输出的内容进行上下文相关的编码 使用安全的JSON序列化方法 实施严格的输入验证机制 对于终端用户 警惕意外出现的登录提示 启用多因素认证降低凭证泄露风险 定期检查邮件规则和转发设置 总结 该案例展示了即使在现代成熟产品中,XSS漏洞仍可能通过非典型路径存在。关键在于: 理解所有数据流经路径 不信任任何用户可控输入 实施纵深防御策略 通过分析此类漏洞,可以提升对复杂系统安全性的认识,并在自身开发中避免类似错误。