微软最新账户身份验证漏洞分析
该漏洞与Wesley Wineberg发现的“OAuth CSRF in Live.com”漏洞类似,唯一的不同在于该漏洞影响的是微软的主身份验证系统,而不是OAuth保护机制。
微软在多个域(*.outlook.com, 、*.live.com等)中提供不同的服务,并且通过向login.live.com、login.microsoftonline.com和login.windows.net发送请求来解决跨服务的身份验证,为用户建立会话。
outlook.office.com的流程如下:
1、用户浏览https://outlook.office.com
3、用户登录,POST请求发回给wreply值,其中的t表单字段中包含用户的登录令牌:
4、该服务使用该令牌,用户成功登录。
当该服务托管在完全独立的域中时,cookie不能使用,那么令牌成为用户登录的唯一凭证。这同OAuth的工作机制类似。
这意味着,一旦攻击者获取以上代码,并将t值发回其控制的服务器,就可以冒充合法用户。
研究人员尝试将wreply值更改为非Microsoft域,如example.com,会收到一个错误,并且该请求不会被处理:
URL编码和URL解析
研究人员在多次研究URL编码参数时偶然发现,该方法可以绕过不同的过滤器,而这却是该身份验证漏洞的根源。
在这种情况下,wreply在域通过检查前是URL解码的,因此,https%3a%2f%2foutlook.office.com%2f等同于https://outlook.office.com/,是有效的,请求通过。
有趣的是,当传递https%3a%2f%2foutlook.office.com%252f的值时会抛出错误,因此https://outlook.office.com%2f不是有效的URL。