一、307重定向攻击
由于OAuth2.0规范中并没有规定用户在IdP页面登录后重定向到RP时的状态码,所以如果
- IdP使用HTTP 307状态码将用户重定向到RP
- IdP在用户输入用户名和密码后立即重定向至RP
满足这两种情况时,由于307重定向会包含上一个request的所有数据,所以用户名和密码会被攻击者获取
二、IdP混淆攻击
如果
- 用户与RP之间使用HTTP且攻击者可以截获request和response
- RP有多个IdP可选,且其中包含一个被攻击者控制的IdP称为AIdP
- RP对所有的IdP使用相同的重定向URI,且记录用户当初的请求来判断向哪个IdP进行验证
满足这三种关系时,攻击者可以截获用户与RP之间的信息,并加以篡改,使得用户登录HIdP,而RP以为用户登录AIdP,以此获得用户在HIdP的验证码
三、state泄漏攻击
用户由RP进行验证后,会返回一个Response,见下图步骤14
此时,如果返回的Response包含一个指向攻击者网页的链接或者包含一些存储在攻击者网站上的资源,那么当用户点击攻击者链接或这些资源被加载时,request的referer header就会包含当前的URI地址,而由于此URI地址包含了IdP返回的code和RP提供的state,则就泄漏了防止CSRF攻击的state
Naïve RP 会话完整性攻击
假如
- RP使用重定向URI中的字符来判断用户使用哪个IdP登录
- AIdP是一个被攻击者控制的IdP
此时,攻击者首先使用HIdP登录RP,获取code和token,然后当用户想要通过AIdP登录RP时,AIdP将用户重定向到RP的HIdP的重定向URI,并且在这个重定向URI中添加RP生成的state、以及之前获得的code和token。现在由于RP使用的是幼稚的IdP判定,所以RP认为用户使用HIdP登录,所以用户就以攻击者在HIdP的身份登录到RP或者RP将攻击者在HIdP的信息当作用户所有的。