微软Azure Cosmos DB Explorer中基于DOM的XSS漏洞导致账户接管

本文详细分析了微软Azure Cosmos DB Explorer中存在的DOM型XSS漏洞,攻击者可通过构造恶意域名发送跨域消息,最终窃取用户OAuth令牌实现账户接管。

微软Azure Cosmos DB Explorer中基于DOM的XSS漏洞导致账户接管

关于DOM XSS漏洞

Azure Cosmos DB Explorer错误地接受并处理来自特定域的跨域消息。远程攻击者可通过跨域消息传递DOM型XSS有效载荷,接管受害者的Azure账户。

完整技术细节 - 研究人员视角

漏洞分析基于发现时的最新代码变更集(d1587ef)。

错误的Origin检查

/src/ConfigContext.ts中的漏洞代码显示,正则表达式^https://cosmos-db-dataexplorer-germanycentral.azurewebsites.de$未正确转义元字符,导致以下域名都被错误地视为可信消息源:

DOM型XSS

/src/Controls/Heatmap/Heatmap.ts中的漏洞代码显示,未正确过滤event.data.chartSettings.chartTitleevent.data.errorMessage导致XSS。攻击者通过构造恶意跨域消息可在cosmos.azure.com上执行任意JavaScript。

漏洞验证过程

环境搭建

  1. 购买恶意域名并托管包含XSS载荷的网页
  2. 或通过DNS重绑定技术本地搭建HTTPS服务器

攻击流程

  1. 受害者登录Azure账户
  2. 访问恶意网页并点击"1-click XSS"按钮
  3. 攻击者成功窃取localStorage中的OAuth令牌

修复建议

正确转义正则表达式中的元字符,如将: ^https://cosmos-db-dataexplorer-germanycentral.azurewebsites.de$ 修正为: ^https:\\/\\/cosmos-db-dataexplorer-germanycentral\\.azurewebsites\\.de$

最终思考

该漏洞源于单个未转义的点字符,却可能导致整个Azure会话被接管。在使用window.postMessage()时必须严格验证消息来源,避免将不可信内容直接插入DOM树。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计