揭秘Pokemon Go的OAuth权限滥用与安全漏洞

本文深入分析了Pokemon Go在iOS端请求过度Google账户权限的安全问题,包括OAuth 1.0已弃用API的使用、权限透明度的缺失,以及通过UberAuth令牌可能获取Gmail等敏感数据的潜在风险。

为什么我今天没抓到任何宝可梦 - Trail of Bits博客

tl;dr 当互联网今天疯狂时,我们进行了事实调查。以下是我们关于Pokemon Go对您Google账户权限的笔记。

以下是Jay和我在今天下午6点左右开始做的事情:

  • 查找Pokemon Go实际请求的权限
  • 调查这些权限的实际作用
  • 在测试应用中复制这些权限

我们的第一直觉是直接查看代码,因此我们开始在越狱手机上加载iOS应用。Pokemon Go应用使用越狱检测来阻止修改设备的用户访问游戏。正如我们通常发现的那样,这些保护措施很容易绕过,因此没有提供真正的保护。

Niantic向Google发出OAuth请求,其范围设置如下(注意:“scope"决定了Niantic对您账户的访问级别,每个请求项是不同类别的数据):

1
2
3
4
openid
email
https://www.google.com/accounts/OAuthLogin
https://www.googleapis.com/auth/userinfo.email

OAuthLogin范围在此列表中很突出。它主要由Google的应用程序使用,例如Chrome和iOS账户管理器,不过我们也发现了一些使用它的Github项目。

无法从Google自己的OAuth Playground使用此OAuth范围。它只给出各种"未授权"错误消息。这意味着OAuth Playground(Google用于测试其API访问的服务)无法准确复制Pokemon Go请求的权限。

它可能是OAuth 1.0 API的一部分,该API于2012年被Google弃用,并于2015年关闭。如果是这样,我们不确定为什么Pokemon Go能够使用它。我们检查过,迁移到OAuth 2.0 API的账户不再能够访问旧的1.0 API。

似乎无法通过正常或文档记录的方式创建我们自己的使用此OAuth范围的应用。为了正确测试此OAuth令牌提供的访问级别,我们可能需要挂钩一个有权访问的应用(例如,通过Cydia挂钩)。

Pokemon Go登录流程未描述正在请求的权限,并在权限被撤销后静默重新启用它们。此外,可用文档未能充分描述令牌权限对任何试图调查它们的人意味着什么。

很明显,此访问不需要识别Pokemon Go中的用户账户。在我们撰写本文时,我们预计Niantic最终会通过减少他们请求的权限来回应。在我们发布时,他们发布了一份声明,确认他们将这样做。

这一次,我们同意Hacker News上的许多评论。

这似乎是Google方面的一个巨大安全失败。OAuth流程没有理由能够静默请求管理员权限。作为用户,我真的必须得到一个提示来询问我(并警告我!)。— ceejayoz

我们能够通过Google Apps for Work查询特定的令牌范围,但我们没有找到个人账户的等效项。鉴于这些令牌几乎等同于密码,似乎有必要在所有Google账户上启用更大的调查和透明度,以便在下一次不可避免发生这种情况时使用。

Google Apps for Work允许您查询单个令牌范围

当我们走到这一步时,Niantic发布了一份声明,确认他们的访问权限远远超过了需要:

我们最近发现,iOS上的Pokemon Go账户创建过程错误地请求用户Google账户的完全访问权限。然而,Pokemon Go仅访问基本的Google配置文件信息(特别是您的用户ID和电子邮件地址),没有访问或收集其他Google账户信息。一旦我们意识到这个错误,我们开始开发客户端修复,仅请求基本Google配置文件信息的权限,与我们实际访问的数据一致。Google已确认Pokemon Go或Niantic未接收或访问任何其他信息。Google将很快将Pokemon Go的权限减少到仅Pokemon Go需要的基本配置文件数据,用户无需自行采取任何行动。

在Google和Niantic按照其声明中描述的行动跟进后,这将完全解决此问题。据我们所知,Google计划找到已发行的令牌并"降级"它们,同时Niantic不再为新用户请求这些权限。

感谢阅读,如果您有任何进一步细节,请告诉我们!请花点时间查看您通过Google安全检查授权的应用,并启用双因素认证。

更新 2016年7月12日: 看起来我们在"UberAuth"令牌方面走对了路。此OAuth范围最初获得很少的访问权限,但可以通过一系列未记录的方法交换为新令牌,允许访问您Google账户中的所有数据,包括Gmail。更多细节:https://gist.github.com/arirubinstein/fd5453537436a8757266f908c3e41538

更新 2016年7月13日: Pokemon Go应用已更新,现在仅请求基本权限。Niantic的声明表明他们将自行取消所有错误发行的令牌的权限,但如果您想抢先一步,请转到您的应用权限,撤销Pokemon Go访问权限,退出Pokemon Go应用,然后重新登录。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计