知乎客户端登录任意用户账号

知乎服务器端对第3方授权返回的值没有进行2次校验,可以通过修改第3方授权的返回结果,实现登录他人的账号。

以微博登录为例子,访问Fenng(冯大辉,小道消息出品人)的微博主页,查看一下网络请求,获得他的uid是1577826897然后打开知乎客户端,用一个微博小号登录,拦截微博授权成功的请求地址:https://api.weibo.com/oauth2/sso_authorize?sflag=1修改Response Body,将uid改成1577826897:

然后就登录了Fenng的知乎账号:

声明:没有看Fenng的知乎私信,登录成功以后,看了一下私信列表,就退出了。
解决方案:
知乎服务器端在拿到客户端提交的授权成功以后,还应该调用第3方平台的token校验,以微博为例子,应该再调用一次:https://api.weibo.com/2/account/get_uid.json,看拿到的uid是否和客户端提交的uid一致。