sign in with apple 0 day漏洞分析

2020-06-01 16,639

image.png

Sign in with Apple是2019年APPLE公司引入的一个新功能,允许用户在不泄露其真实邮箱地址(Apple ID)的情况下通过第三方app登入账户。研究人员Bhavuk Jain4月份在Sign in with Apple中发现了一个影响第三方应用的0 day漏洞。攻击者利用该漏洞可以完全接管用户账户无论受害者是否有有效的APPLE ID。苹果公司通过漏洞奖励计划向Bhavuk Jain发放了10万美元的奖励。

技术细节

Sign in with Apple 的工作原理与OAuth 2.0类似。通过Sign in with Apple有两种方式来认证用户,一是使用 JWT (JSON Web Token) ,一是使用APPLE服务器生成的code。该code可以用来生成JWT,下图是JWT创建和验证的原理。

image.png

在第二步,在授权时,APPLE会给用户一个选项来选择是否向第三方应用分享Apple Email ID。如果用户决定隐藏Email ID,Apple就会生成一个中继(非真实的)Email ID。根据用户的选择,在成功授权后,APPLE会创建一个含有该Email ID的JWT,随后用户第三方应用的登陆。

解码后的JWT payload如下所示:

{
  "iss": "https://appleid.apple.com",
  "aud": "com.XXXX.weblogin",
  "exp": 158XXXXXXX,
  "iat": 158XXXXXXX,
  "sub": "XXXX.XXXXX.XXXX",
  "c_hash": "FJXwx9EHQqXXXXXXXX",
  "email": "contact@bhavukjain.com", // or "XXXXX@privaterelay.appleid.com"
  "email_verified": "true",
  "auth_time": 158XXXXXXX,
  "nonce_supported": true
}

漏洞分析

研究人员发现当token的签名使用APPLE的公钥验证后,就可以请求任何来自Apple的Email ID的JWT了。也就是说,攻击者可以通过链接Email ID和获取受害者账户的访问权限来伪造JWT。

第二步的请求示例:

 

POST /XXXX/XXXX HTTP/1.1
Host: appleid.apple.com
 
{"email":"contact@bhavukjain.com"}

通过传递任意email,APPLE可以为该特定的Email ID生成有效的JWT (id_token)。

响应示例如下:

{
  "authorization" : {
    "id_token" : "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.XXXXX.XXXXX",
    "grant_code" : "XXX.0.nzr.XXXX",
    "scope" : [ "name", "email" ]
  },
  "authorizedData" : {
    "userId" : "XXX.XXXXX.XXXX"
  },
  "consentRequired" : false
}

该漏洞的影响是非常大的,因为攻击者利用该漏洞可以完全接管用户的账户。而且许多应用开发者在应用开发过程中都融入了Sign in with Apple功能,比如Dropbox、Spotify、Airbnb、Giphy等。研究人员发现通过双因子认证等方式可以缓解该漏洞带来的影响。

目前苹果公司已经发布了漏洞的补丁。苹果公司还称对服务器日志等进行分析,没有发现与该漏洞相关的账户误用或被黑。

https://bhavukjain.com/blog/2020/05/30/zeroday-signin-with-apple/


本文作者:ang010ela

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/132426.html

Tags:
评论  (0)
快来写下你的想法吧!

ang010ela

文章数:56 积分: 711

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号