破解 CloudKit:攻击者是若何删除 Apple Shortcuts 的?

皇冠管理端登3网站皇冠管理端登3网站(www.9cx.net)实时更新发布最新最快最有效的皇冠管理端登3网站手机网址,包括新2登3手机网址,新2登3备用网址,皇冠登3最新网址,新2足球登3网址,新2网址大全。

CloudKit 是一个允许 App 开发者将键值数据、结构性数据和资源储存在 iCloud 中的框架。对 CloudKit 的接见通过 App 授权举行控制。CloudKit 支持公共数据库和专用数据库。公共数据库被 App 的所有副本使用(通常用作一样平常性资源),且不加密。专用数据库储存用户的数据。与 iCloud 云盘一样,CloudKit 使用基于帐户的密钥来珍爱储存在用户专用数据库中的信息,且与其他 iCloud 服务类似,会使用第三方服务对文件举行分块、加密和储存。CloudKit 使用密钥层级,与数据珍爱类似。文件独占密钥由 CloudKit 纪录密钥封装。纪录密钥则会受到区域作用域内密钥的珍爱,而区域作用域内的密钥则受到用户的 CloudKit 服务密钥的珍爱。CloudKit 服务密钥储存在用户的 iCloud 帐户中,只有在用户使用 iCloud 认证后才可使用。

捷径 Shortcuts,是 iOS 平台上的流程自动化效率增强APP,在iOS 13版本,已集成到系统中。它能通过流程自动化来处置手机上种种需要庞大、重复操作的事务,让你运行一次就完成一系列的操作。

Shortcuts,原名为Workflow。自苹果官方关注到它的伟大运用价值后,便收购过来,更名为Shortcuts,中文名为捷径。Shortcuts捷径在 iOS 相对么封锁的系统中,释放了用户的想象力、解放了繁琐操作,堪称效率应用中的佼佼者。

Apple 的数据存储框架 CloudKit 具有种种接见控制,这些接见控制可能会被破绽设置,甚至是 Apple 自己,这会影响 Apple 自己使用 CloudKit 的应用程序。这篇文章详细注释了 Frans Rosen 在剖析 Cloudkit 时在 iCrowd+、Apple News 和 Apple Shortcuts 中发现的三个严重水平差其余破绽。

研究职员在剖析时首先确立一个带著名称的容器,花样为反向域名结构,如 com.apple.xxx,由于确立的所有容器都将从 iCloud 最先。

在容器内部,有两个环境,划分是开发环境和运行环境。

在环境中,研究职员会设置三个差其余域,划分是私有、共享和公共。私有只能由自己的用户接见,共享用于在用户之间共享数据,公共可供任何人接见,某些部门具有公共 API 令牌,而某些部门具有身份验证。

在每个作用域中,研究职员都可以确立差其余区域,且默认区域被称为_defaultZone。在每个区域内,都可以确立差其余纪录类型。

每个纪录类型可以包罗差其余纪录字段,这些字段可以保留差异类型的数据,如 INT、BOOLEAN、TEXT、BINARY 等。

每个区域也有各自的纪录,每个纪录总是毗邻到一个纪录类型。固然,它另有更多功效,例如确立具有权限的索引和平安角色的能力。

对于私有和共享作用域,研究职员始终需要以自己的身份举行身份验证。对于公共作用域,可以在不举行小我私人身份验证的情形下读写该作用域。研究职员也可以启用允许他们接见公共作用域的公共令牌,然则通过将身份验证与自己的用户相连系,研究职员可以接见私有和共享作用域。

领会所有差其余身份验证流程和平安角色异常庞大,让我感应好奇的是,不仅对研究职员来说很庞大,而且对 Apple 内部使用它的团队来说也很庞大。

为了领会苹果自己在那里使用了CloudKit服务,研究职员最先领会所有差其余应用程序是若何毗邻到它的。通过署理iPad、浏览器和所有应用程序,他们可以网络大量的请求和响应。仔细查看之后,他们注重到苹果使用差其余方式毗邻到CloudKit。

iCloud 资产,如 www.icloud.com 上的条记和照片使用了一个 API:

而icloud.developer.apple.com的开发者门户网站有一个差其余API :

许多 iOS 应用程序在 gateway.icloud.com 上使用了第三个 API。此 API 使用标头来指定正在使用的容器,这些请求险些总是使用 protobuf:

若是你使用CloudKit Catalog来测试CloudKit API,它将改为使用 api.apple-cloudkit.com:

对于 CloudKit Catalog,研究职员需要一个 API 令牌来接见公共作用域。当他们实验毗邻到阻挡 iOS 应用程序时看到的 CloudKit 容器时,由于缺少完成身份验证流程所需的 API 令牌而失败。

iCrowd+

在测试 Apple 的所有应用程序和子域时,Apple 制作的一个网站现实上使用了 api.apple-cloudkit.com 并提供了 API 令牌。

转到 https://public.icrowd.apple.com/,可以看到在 Javascript 文件中使用的容器:

然后它请求获取 iCrowd+ 应用程序的当前版本,以便在最先页面显示该版本:

研究职员还可以在网站发出的请求中看到它正在查询数据库的纪录,纪录类型称为Updates:

由于我有令牌,我可以使用 CloudKit Catalog 毗邻到容器:

查看公共作用域的纪录,我可以看到网站为使用按钮的版本数据而获取的数据:

然后研究职员实验将他们的纪录添加到统一个区域:

回应如下:

当再次接见https://public.icrowd.apple.com/,看到的如下内容:

这意味着以修改网站的数据。

看法证实视频请点击这里。

这意味着可能存在与权限相关的其他破绽,而且公共作用域是最有趣的一个,由于它是在所有用户之间共享的。研究职员将继续寻找使用 CloudKit 数据库的位置的历程。

苹果在2月25日做出回应,并修复了这个破绽,从 https://public.icrowd.apple.com/ 网站上完全删除了 CloudKit 的使用。

由于研究职员位于瑞典,而由于在瑞典无法接见Apple News,以是他们在美国确立了一个新的Apple ID来使用它。一进来,就注重到所有的新闻都是使用CloudKit提供的,所有文章都是从公共作用域提供的。这是有原理的,由于所有用户的新闻内容都是一样的。研究职员还可以看到 iOS 上的 Stock 应用程序也从统一个容器中获取:

不外,通过gateway.icloud.com使用CloudKit API有点难题。所有的通讯都是通过protobuf举行的。有一个很棒的项目叫做InflatableDonkey,它试图从iOS 9中逆向工程iCloud备份历程。由于该项目只专注于获取数据,Protobuf 中的许多方式都没有完全逆向,以是研究职员不得不使用暴力实验找到修改所需的方式,而且由于 Protobuf 是二进制的,以是研究职员真的不需要专著名称,由于花样的设计方式,protobuf 中的每个属性都是可枚举的:

我花了太多时间,约莫两天,然则当研究职员发现可以使用的方式,在公共作用域内修改纪录仍然需要我的用户授权,研究职员一直无法弄清晰若何天生适看成用域的 X-CloudKit-AuthToken,由于他们主要对私人作用域感兴趣。

但还记得我提到过差其余 API 与 CloudKit 的通讯方式差异吗?

研究职员登录到 www.icloud.com 并进入Notes-app,它使用 p55-ckdatabasews.icloud.com 与 CloudKit 通讯:

然后研究职员将容器从 com.apple.notes 更改为 com.apple.news.public 并改为使用公共作用域。在这篇文章中,你可以看到使用应用程序在protobuf通讯到gateway.icloud.com:

回应是:

研究职员还核实了库存数据是否真的存在:

效果如下:

乐成!现在可以使用 p55-ckdatabasews.icloud.com 上的经由身份验证的 API 与 com.apple.news.public-container 通讯了。

研究职员还设置了一个差其余Apple ID作为新闻宣布程序,这样他们就可以确立文章草稿并为Apple News应用确立一个宣布渠道。研究职员确立了一个渠道并宣布了一篇文章,并最先测试与它们的通话。由于使用了Apple ID向API发出请求,若是可以修改内容,则意味着可以修改任何文章或库存数据。

拥有的频道 ID 是 TtVkjIR3aTPKrWAykey3ANA,举行查找查询:

测试通道如下:

在研究职员的iPad上,他们还通过https://apple.news/TtVkjIR3aTPKrWAykey3ANA验证,并可以在苹果新闻应用程序中看到确立的频道。

然后,研究职员凭证 CloudKit 文档实验了使用纪录/修改对纪录可能使用的所有方式:确立、更新、强制更新、替换、强制替换、删除和强制删除。

所有方式的响应都是这样的:

然则,在 forceDelete 上:

回应如下:

新2手机管理端

新2手机管理端(www.22223388.com)实时更新发布最新最快的新2代理线路、新2会员线路、新2备用登录网址、新2手机管理端、新2手机版登录网址、新2皇冠登录网址。

研究职员在 Apple News 中重新加载了频道:

这让研究职员确信,他们可以删除stock和Apple News ios应用程序使用的容器com.apple.news.public中的任何频道或文章,包罗stock条目。这是由于他们可以从 www.icloud.com 上用于 Notes-app 的 API 对 CloudKit 举行身份验证挪用,也由于com.apple.news.public-container中添加的纪录设置破绽。

苹果的回应

苹果公司在 3 月 19 日通过修改添加到 com.apple.news.public 的纪录的权限举行了修复,纵然是 forceDelete 挪用也会响应:

研究职员还通知了苹果,他们自己的容器仍然有能力删除内容,然而,不清晰这些容器是否真的在使用公共局限。

Shortcuts

另一个使用 CloudKit 公共作用域的应用程序是Shortcuts。使用 Apple Shortcuts,你就可以确立可以自动或手动启动的逻辑流程,然后在 iOS 装备上的应用程序中触发差其余操作。这些Shortcuts可以使用 iCloud 链接与其他人共享,从而围绕他们确立一个生态系统,有一些网站专门通过 iCloud 链接推荐和分享这些Shortcuts。

如上所述,CloudKit 容器中有一个共享作用域。当你决议共享任何私人内容时,通常会使用此作用域。你会获得一个叫做 Short GUID 的器械,它看起来像 0H1FzBMaF1yAC7qe8B2OIOCxx,可以使用 https://www.icloud.com/share/[shortGUID] 接见。

然则,Apple Shortcuts 链接的事情方式略有差异。当共享Shortcuts时,将在公共作用域内确立纪录类型为 SharedShortcut 的纪录。。所使用的纪录名称将形成一个 GUID:EA15DF64-62FD-4733-A115-452A6D1D6AAF,然后纪录名称将被花样化为不带连字符的小写字符串,最终变为:https://www.icloud.com/shortcuts/ea15df6462fd4733a115452a6d1d6aaf,这可URL可以被公然分享。

接见此 URL 将挪用: https://www.icloud.com/shortcuts/api/records/ea15df6462fd4733a115452a6d1d6aaf ,这将从 CloudKit 返回数据:

这样研究职员很兴奋,由于他们已经可以看到一些攻击场景。若是攻击者可以修改其他用户的Shortcuts,那将是异常糟糕的。与Apple News破绽相同,此破绽也能够删除别人的Shortcuts。公共作用域还包罗了在应用程序中显示的Shortcuts Gallery :

因此,若是可以修改该内容,那将是行使破绽的要害。

Shortcuts 应用程序自己使用了 gateway.icloud.com 上的 protobuf API:

由于研究职员已经花了许多时间修改 InflatableDonkey 来实验所有方式,因此我现在还可以使用阻挡中的 X-CloudKit-AuthToken 实验举行授权挪用以将纪录修改为公共作用域。然而,所有现实举行修改的方式都给了我权限破绽:

这让研究职员意识到通过 gateway.icloud.com 上的 API, X-CloudKit-AuthToken 不允许他们修改公共作用域内的任何纪录。

由于研究职员已经通过 Apple News 讲述了这些破绽,而且苹果已经修复了这些破绽,因此当研究职员实验使用最初从 www.icloud.com 上的 Notes 中获取的相同 API 毗邻方式时,泛起了如下效果:

这也失败了,无法通过 www.icloud.com 使用的身份验证接见容器 com.apple.shortcuts。

还记得上面提到过差其余 API 与 CloudKit 的通讯方式差异吗?

通过icloud.developer.apple.com 并毗邻到我自己的容器,接受其中一个请求并将容器修改为 com.apple.shortcuts:

这很有用!研究职员可以通过使用纪录/查找来验证这一点,并将 protobuf 内容中的 UUID 用于 iOS 应用程序中的gallery banner:

效果如下:

完善!这现在是研究职员与 Shortcuts 数据库通讯的方式,来自 CloudKit 开发职员门户的 CloudKit 毗邻允许研究职员准确地对 com.apple.shortcut-container 举行身份验证。现在他们就可以最先检查公共纪录的权限。最简朴的方式是添加一个 Burp 替换规则,用 Shortcuts 容器 com.apple.shortcuts 替换任何请求数据中研究职员自己的容器 iCloud.com.mycontainer.test。

现在就可以最先从CloudKit文档中查看终端,并从 CloudKit 开发职员门户点击 UX。公共作用域内的纪录无法修改或删除。研究职员在公共作用域内找到的一些纪录类型是可索引的,这允许研究职员以列表的形式查询它们,然则,无论若何这都是公共信息。

例如,研究职员可以使用纪录/查询来获取所有gallery banner:

但这不是破绽,由于它们已经在应用程序中列出来了。

研究职员观察了订阅情形,它并没有像预期的那样在公共作用域施展作用。

如上所述,每个作用域都有区域,默认区域被称为 _defaultZone。 公共作用域的有趣之处在于 CloudKit 开发职员门户的 UX 现实上告诉研究职员它不支持向公共作用域添加新区域:

然则,若是研究职员挪用 com.apple.shortcuts 来列出所有区域,我可以看到它们在公共作用域内确实有更多区域,而不仅仅是默认区域:

我还可以添加新区域:

回应如下:

现在仅仅能做到删除研究职员自己的区域,其他任何人都不会使用或与这些区域举行交互。

区域的文档是有限的:

除了确立或删除,没有其他挪用。

接下来,研究职员使用第二个 Apple ID 登录到 CloudKit 开发职员门户网站。然后实验对第一个用户的容器执行相同的挪用。

因此,若是我按预期实验将差其余用户用于我自己的容器,则删除会失败。无法删除任何容器的默认区域。

研究职员现在的假设是删除实验会导致上述破绽。

实验删除 metadata_zone:

会反馈一个破绽:

这让研究职员确信确立区域并不是真正的破绽,由于删除挪用对现有挪用不起作用,而且对确立新挪用没有影响。研究职员还实验了对 _defaultZone 的删除挪用,由于他们确信会看到上面的破绽即无法从公共默认区域中删除所有纪录。

回应如下:

研究职员又做了一个区域/列表:

看来以上的假设是准确的,它并没有真正被删除。

突然,一个共享Shortcuts显示出了 404:

研究职员立马退出了Shortcuts应用程序并再次启动它:

于是,研究职员接见了一个共享一堆Shortcuts的网站,并用手机举行了测试:

这意味着删除确实以某种方式起作用,但 _defaultZone 从未消逝。当研究职员实验共享一个新的Shortcuts时,它也不起作用,至少一最先没有,很可能是由于纪录类型也被删除了。

参考及泉源:https://labs.detectify.com/2021/09/13/hacking-cloudkit-how-i-accidentally-deleted-your-apple-shortcuts/

2022皇冠世界杯

www.hgw88888888.com)实时更新发布最新最快的2022皇冠世界杯各国赛程一览、2022世界杯会员线路、2022世界杯备用登录网址、2022世界杯手机管理端、2022世界杯手机版登录网址、2022世界杯皇冠登录网址。

添加回复:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。