OAuth是一种开放授权协议,允许在 HTTP/HTTPS 服务(例如 Facebook、GitHub,shopee 等)上启用客户端应用程序来访问资源所有者的资源,允许将存储在一个站点上的资源共享到另一个站点,无需重新申请凭据。
例如 :在shopee上可以使用Facebook,Google,Apple登录一样,这就是OAuth。再例如 某程序 可以调用微信登录等,这也是OAuth。
1、redirect_uri 配置错误
注重检查“redirectUrl=”参数是否可以是任意任意域或子域。
如果可以是任意域,则存在窃取Token凭证风险,攻击者可以将恶意链接发送给受害者来收集Access tokens 凭证。受害者点击并登录后会跳转到攻击者站点中,造成Access tokens 凭证泄露。
类似漏洞在HackerOner也有很多:https://hackerone.com/reports/861940
2、重定向时 存在XSS
如果 redirectUrl
的值未过滤直接在响应包的重定向页面上,那就存在XSS注入漏洞。例如
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
类似漏洞:https://hackerone.com/reports/261138
3、OAuth CSRF 状态参数处理不当
如果状态参数是静态的或没有被使用,那就可以利用这个错误配置,劫持用户。
首先在自己的帐户上完成OAuth的授权过程,在授权后拦截请求包,会遇到一个请求
例如:https://yourtweetreader.com?code=asd91j3jd91j92j1j9d1
然后,就可以将此 URL 发送给已登录的用户,那么就会将自己的帐户添加或绑定 到受害者的帐户中,达到账户劫持目的,这个在国内比较典型有微博那个漏洞,Vulkey_Chen 也分享过这个利用方式,感兴趣可以去看看:https://www.ichunqiu.com/course/62891
H1类似漏洞:https://hackerone.com/reports/111218
4、OAuth 逻辑漏洞,账户前的接管
如果在创建新帐户时没有要求电子邮件手机 认证,那就可以尝试在受害者不知情的情况下使用攻击者的密码和受害者的电子邮件地址设置一个帐户。
在平台中一般会执行查找并提示受害者的电子邮件手机 地址已经注册,系统就会将他们的 Google 帐户链接到攻击者创建的帐户,受害者随后尝试注册或登录第三方(例如 Google), 那如果攻击者在受害者注册之前就已经创建了它,攻击者就可以访问受害者的帐户。
这被称为“账户前接管”。
类似漏洞:https://hackerone.com/reports/1074047
5、Access Token 存储在浏览器
这个很好解释,如果Access Token 存储在您的浏览器或cookies中,那么攻击者有可能通过XSS,CSRF 等手段获取到。
类似漏洞
6、共享授权/刷新令牌 漏洞
一般用在比较安全的登录场景中,比如双因子认证中,如果一个账号的授权码同时可以用于其他账户认证,也就可以接管其他帐户,这就叫共享授权/刷新令牌。
7、永久授权码
在设计之初就因考虑减少盗窃和滥用风险,授权码应该只在短时间内有效。
-
如短信验证码只在5分钟内有效,这时就可以测试超过5分钟是否可以继续使用。
-
再例如 双因子认证中,授权码结束掉当前授权周期,就可以测试使用已过期但没有用过的授权码是否还能登录。
学习更多BugBounty技术,关注我:
原文始发于微信公众号(BugHunting):BugBounty 针对OAuth 2.0 安全测试tips