Categories
程式開發

Sign in with Apple被曝零日漏洞,可远程劫持任意用户帐号


Sign in with Apple被曝零日漏洞,可远程劫持任意用户帐号 1

5月30日,印度漏洞安全研究专家Bhavuk Jain在官方博客中披露:Sign in with Apple(通过Apple登录)中存在一个零日漏洞,影响非常严重,因为它允许攻击者远程劫持任意用户账户。

Bhavuk Jain在博客中写道,“今年4月,我在Sign in with Apple中发现一个零日漏洞(zero-day)。如果第三方应用使用了Sign in with Apple(通过Apple登录),并且未部署额外的安全措施,那么它们均会受到该零日漏洞的影响。“

最关键的是,该漏洞允许远程攻击者绕过身份验证,接管目标用户在第三方服务和应用中使用Sign in with Apple创建的账号。

Sign in with Apple被曝零日漏洞,可远程劫持任意用户帐号 2

据了解,在去年的WWDC上,苹果正式推出属于自己的第三方登录服务——Sign in with Apple(通过Apple登录)。

说起第三方登录,就不得不提OAuth。据阮一峰介绍:简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

现在,大多数第三方登录都是基于 OIDC 或者利用 OAuth 2.0 修改实现的。

根据苹果官方解释:

“Sign in with Apple(通过Apple登录)”让用户能用自己的Apple ID轻松登录您的app和网站。用户不必填写表单、验证电子邮件地址和选择新密码,就可以使用“通过Apple登录”设置账户并立即开始使用您的app。所有账户都通过双重认证受到保护,具有极高的安全性,Apple亦不会跟踪用户在您的app或网站中的活动。

截至目前,有许多开发者已经将Sign in with Apple整合到应用程序中,比如国外的Dropbox、Spotify、Airbnb、Giphy ,国内的喜马拉雅、懒饭、厨房故事等。这些应用程序未经测试,如果在验证用户时未采取其他任何安全措施,则可能被攻击者利用漏洞实现完全的账户接管。

据Bhavuk Jain的博客文章介绍,Sign in with Apple的工作原理与OAuth 2.0类似,对用户身份的认证有两种办法:一种是利用JWT(JSON Web Token),另一种是利用由Apple服务器生成的code。

下面的示意图表示JWT创建和验证的工作方式。

Sign in with Apple被曝零日漏洞,可远程劫持任意用户帐号 3

通过“Sign in with Apple”验证用户时,服务器会包含秘密信息的JWT,第三方应用会使用JWT来确认登录用户的身份。

Bhavuk Jain发现,虽然苹果公司在发起请求前要求用户先登录到自己的苹果账户,但在下一步的验证服务器上,它并没有验证是否是同一个人在请求JWT。

因此,该部分机制中缺失的验证可能允许攻击者提供一个属于受害者的单独的苹果ID,欺骗苹果服务器生成JWT有效的有效载荷,以受害者的身份登录到第三方服务中。

Bhavuk Jain说:“我发现我可以向苹果公司的任何Email ID请求JWT,当这些令牌的签名用苹果公司的公钥进行验证时,显示为有效。这意味着,攻击者可以通过链接任何Email ID来伪造JWT,并获得对受害者账户的访问权限。”

据悉,一个月前,他向苹果安全团队报告了这个问题,为此苹果向其支付了10万美元的巨额赏金。目前,苹果已经对该漏洞进行了修复,并且还对服务器日志进行了调查,发现该漏洞没有被用来危害任何用户账户。

参考资料:

Zero-day in Sign in with Apple