微软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$
未正确转义元字符,导致以下域名都被错误地视为可信消息源:
- https://cosmos-db-dataexplorer-germanycentralAazurewebsites.de
- https://cosmos-db-dataexplorer-germanycentralBazurewebsites.de
- …
DOM型XSS
/src/Controls/Heatmap/Heatmap.ts
中的漏洞代码显示,未正确过滤event.data.chartSettings.chartTitle
和event.data.errorMessage
导致XSS。攻击者通过构造恶意跨域消息可在cosmos.azure.com上执行任意JavaScript。
漏洞验证过程
环境搭建
- 购买恶意域名并托管包含XSS载荷的网页
- 或通过DNS重绑定技术本地搭建HTTPS服务器
攻击流程
- 受害者登录Azure账户
- 访问恶意网页并点击"1-click XSS"按钮
- 攻击者成功窃取localStorage中的OAuth令牌
修复建议
正确转义正则表达式中的元字符,如将:
^https://cosmos-db-dataexplorer-germanycentral.azurewebsites.de$
修正为:
^https:\\/\\/cosmos-db-dataexplorer-germanycentral\\.azurewebsites\\.de$
最终思考
该漏洞源于单个未转义的点字符,却可能导致整个Azure会话被接管。在使用window.postMessage()时必须严格验证消息来源,避免将不可信内容直接插入DOM树。