本文整理了OAuth 2.0的攻击面+实际案例+辅助测试代码
OAuth流程
本文以两种广泛使用的方案为标准展开.
如对流程不了解,请先移步学习: 理解OAuth 2.0
Authorization Code
- response_type = code
- redirect_uri
- scope
- client_id
- state
Implicit
- response_type = token
- redirect_uri
- scope
- client_id
- state
攻击面
- CSRF导致绑定劫持
- redirect_uri绕过导致授权劫持
- scope越权访问
绑定劫持
攻击者抓取认证请求构造恶意url,并诱骗已经登录的网用户点击(比如通过邮件或者QQ等方式).认证成功后用户的帐号会同攻击者的帐号绑定到一起。
OAuth 2.0提供了state参数用于防御CSRF.认证服务器在接收到的state参数按原样返回给redirect_uri,客户端收到该参数并验证与之前生成的值是否一致.除此方法外也可使用传统的CSRF防御方案.
案例: 人人网-百度OAuth 2.0 redirect_uir CSRF 漏洞
授权劫持
根据OAuth的认证流程,用户授权凭证会由服务器转发到redirect_uri
对应的地址,如果攻击者伪造redirect_uri
为自己的地址,然后诱导用户发送该请求,之后获取的凭证就会发送给攻击者伪造的回调地址.攻击者使用该凭证即可登录用户账号,造成授权劫持.
正常情况下,为了防止该情况出现,认证服务器会验证自己的client_id与回调地址是否对应.常见的方法是验证回调地址的主域,涉及到的突破方式与CSRF如出一辙:
未验证
未验证的情况,可以直接跳出外域.
验证绕过
auth.app.com.evil.com
evil.com?auth.app.com
evil.com?@auth.app.com
案例:腾讯OAuth平台 redirect_uri 过滤不严可能导致用户信息遭窃取(二)auth.app.com@evil.com
案例: