Github的OAuth授权绕过 可任意读取修改用户数据

2019年11月8日00:01:24 发表评论

Github的OAuth授权绕过 可任意读取修改用户数据

研究人员用GitHub Enterprise的试用版的时候,使用脚本对其进行模糊测试,然后观察GitHub的Rails代码是否有任何奇怪或可利用的内容,研究人员发现有某些应用程序逻辑由未处理的情况引起的错误,但是由于是低权限查询的,所以没有造成安全问题。即便如此,研究人员还是找见了一些其他问题,如:OAuth授权绕过。

授权

github根据HTTP请求来确定响应内容,通过get请求返回HTML授权页面,同时发送带有隐藏CSRF令牌字段的POST请求,发送post请求并验证CSRF令牌后,就给应用程序授权了。

授权的http请求是由路由器发送到一个控制器,由控制器进行相应的响应操作。

利用HTTP HEAD请求的攻击

HTTP HEAD请求方法,类似于GET请求,不同点是只有响应头没有响应主体。

发送经过身份验证的HEAD请求到https://github.com/login/oauth/authorize,路由器将其视为GET请求发送到控制器,控制器在处理时把请求当作经过身份验证的POST请求,然后Github得到请求中指定的OAuth应用并授予其访问用户数据的权限。

以上操作绕过了,经过身份验证的POST请求中需要验证的CSRF令牌。

因此,可以发送跨站点身份验证的HEAD请求,就可以无需向用户显示确认的页面,获取任意的OAuth权限,在用户的Github账户中任意读取或修改私有数据。

研究人员向GitHub的Bug赏金计划报告了此问题,他们在大约三个小时内将修复发布到了生产环境,并且获得了25000美元的赏金,当时是GitHub计划有史以来最高的赏金。

发表评论

后发表评论