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