Loading...

无需密码直接解锁:一次意外让我发现安卓系统重大漏洞 获得谷歌7万美元奖励

安全资讯1年前 (2022)发布 勤奋小助
0 0

概述部分:

David Schütz 是一名匈牙利的安全研究人员,在一次旅行中 David 发现自己竟然可以轻松绕过 Google Pixel 6 安全系统,在没有输入密码的情况下解锁设备。其原理是安卓系统的 SIM 卡 PUK 重置解锁与系统解锁部分存在漏洞和竞争问题,导致重置 PUK 后直接把系统 PIN 验证也给关了,直接进入系统无需密码或指纹。

这次意外发现让 David 获得谷歌破例提供的 7 万美元奖金,虽然过程非常曲折、中间各种扯皮,但最终这枚漏洞得到修复并且奖金也成功发放。

第一部分:忘记我的 SIM 卡 PIN

我在旅行 24 小时后发现了这个漏洞:旅行回家后我的 Pixel 6 电量为 1%,它即将关机的时候我正在发送一条短信,结果没电关机。

我赶紧找到充电器插上并重新启动手机,Pixel 启动时询问 PIN 码,我很清楚的记得我设置的 PIN 码,但这次不知道是为什么我竟然忘记了,在连续错误三次后 SIM 卡被锁定。

于是我又拿出 SIM 卡卡片提供的 PUK 解锁码,刮开涂层后我获得 PUK 码,输入 PUK 码即可解锁 SIM 卡并重新设定 PIN 码。(蓝点网注:PUK 码连续输错 10 次 SIM 卡将被永久锁定也就是作废,你的 PUK 码在 SIM 卡原始卡片里,你也可以从运营商 APP 里查询 PUK 码)。

在我输入 PUK 码解锁后系统要求我设置一个新的 PIN 码,然后我按照流程设置完毕后进入了系统。

桥豆麻袋:感觉好些不对劲!

这是一个全新的启动而不是系统已经启动后让我输入手机的 PIN 码或者密码进行解锁,此时系统也弹出指纹,在我认证指纹后系统卡在 Pixel is started 界面,直到我再次重启系统。

注:正常情况下系统重启后无法使用指纹或面容识别,必须先输入 PIN 码或其他自定义密码解锁后,才能在下次锁屏后使用指纹或面容解锁。从这里可以看出来使用 PUK 解锁 SIM 后系统直接跳过了最基础也是最重要的安全认证。

第二部分:刚刚发生了什么

虽然我心里感觉有点奇怪,认为这可能存在一些安全隐患,所以准备后面再测试看看。

第二天我故意输错 SIM 卡密码再使用 PUK 解锁,然后我看到了相同的启动界面。你以为这就完了吗?™的输入 PUK 解锁后再输入新的 SIM PIN 码后,手机竟然直接解锁了,连指纹都不用按了!!!

在我稍微平静一点后,我意识到这是一个该死的全锁屏绕过漏洞,在 Pixel 6 完全打补丁的情况下可以绕过锁屏。在我的 Pixel 5 进行测试后发现情况完全一样。

这意味着什么:任何人拿到你的安卓手机,只需要提前准备一张已知 PUK 的 SIM 卡,就可以直接把你的卡拔掉换上攻击者的,然后直接绕过安卓系统的启动锁屏。

这个漏洞太容易利用,因此是一个巨大的安全缺陷。

第三部分:谷歌的回应

我把漏洞报告给谷歌,这是我迄今为止提交的最短的报告,因为只需要五个简单步骤就可以复现漏洞。

谷歌在 37 分钟后就对我提交的漏洞进行分类和提交,那真是令人惊讶的速度。但随后情况就不对了,因为没有了回应。

在这个 bug 的生命周期里,由于官方回复没有什么值得关注的信息,实际上我更喜欢官方对漏洞的回复。由于缺少官方回复我只能从谷歌员工那里获得零碎的信息。

另外根据 Android VRP 的漏洞奖金制度,如果提交可以解锁 Pixel 设备的锁屏,按最多可以获得高达 10 万美元的奖金。由于我提交时也勾选了绕过锁屏的框,我有点认为我提交这个漏洞会让我获得 10 万美元的奖励。

在超过一个月没有回应后,我听说这个 bug 提交可能已经被关闭,显然在我之前已经有其他人提交了这个漏洞。

在漏洞提交后的 31 天,我收到了安卓团队发来的自动邮件,邮件称在我之前已经有研究人员提交了这个漏洞。所以,我的 10 万美元奖金直接变成了 0 美元,我真的什么也做不了,只能接受这个 bug 是一个已经重复的并且没有任何奖金的事实。

快进到九月份,也就是我提交漏洞的三个月后,我当时在伦敦,参加个 Google ESCAL8 的漏洞发掘活动,当时 2022 年 9 月版的 Android 补丁刚刚发布,我更新了收集,然后在酒店房间的一晚,我试图复现这个漏洞,我希望谷歌已经修复了这个漏洞。但该死,™的这个漏洞还是存在的。

这真把我吓坏了,我觉得我比谷歌还关心这个漏洞。所以从那天晚上,我开始联系我们一起参加活动的谷歌员工。

第二天,我最终向更多人解释了这个问题,我甚至在谷歌办公室里找了一些 Pixel 手机进行现场演示。由于没有卡针,我们尝试使用找来的针头,结果在操作过程中我的手指被割伤开始流血,我让一位谷歌工程师帮我贴了个创口贴。由于使用针头没用,我们四处打听,一位非常善良的女士把她的耳环取下来给我们使用。

最终我们成功换下 SIM 卡,我感觉好多了,人们似乎开始关注了这个问题。

无需密码直接解锁:一次意外让我发现安卓系统重大漏洞 获得谷歌7万美元奖励

我将此漏洞的披露截止日期设定在 10 月 15 日,但 Android VRP 团队回复说不会在 10 月修复,他们的目标是在 12 月修复该漏洞。

考虑到潜在安全影响,我认为这对我来说似乎有点过分了,我坚持 10 月份是最后的期限,到期后我就会直接公开这枚安全影响非常大的漏洞。

在和一些 VRP 团队成员讨论后,一位 VRP 官方成员回复了 bug 报告,并让我留下电话进行沟通。

最后我与他们多人进行了一次当面沟通,他们非常友善,听了我在这几个月里的整个故事,包括只得到了模板自动回复,奖金从 10 万美元变成 0 美元。

总体来说就像是我比谷歌更关心这个漏洞,他们说漏洞提前到 11 月修复,而不是 12 月,但我仍然坚持必须在 10 月修复。(实际上最终是 11 月 5 日修复的,坚持被钞能力打败了😂😂)

又过了两周我收到他们的电话,他们说即使我提交的漏洞是重复的,但因为我他们才修复这个漏洞。因此谷歌破例给我奖励 7 万美元。

我太害怕了,所以不敢提前公布漏洞了,毕竟距离修复已经非常近,所以提前公布漏洞可能不值得 (担心奖金没了?),最终我决定等待修复。

第四部分:漏洞怎么发生的

在安卓上有一个安全屏幕的概念。安全屏幕是多方面的,PIN 输入界面、指纹扫描、密码输入屏幕,或者本文中的 SIM PIN 和 SIM PUK 输入屏幕。

这些安全屏幕彼此是堆叠的,且都是堆叠在顶部,例如 SIM PIN 界面可见时,那说明这个界面是在锁屏界面的顶部。

SIM PUK 重置后,PUK 重置组件调用 .dismiss () 安全屏幕堆栈上的一个函数,导致设备关闭当前的安全屏幕并显示堆栈下方的安全屏幕,在本文案例中,PUK 堆叠在指纹扫描屏幕上。

由于这个函数只是简单的关闭了当前的屏幕,因此很容易受到竞争条件的影响。

想象一下,如果在 PUK 重置调用组件前,后台某些东西改变了当前的安全屏幕,那会发生什么?PUK 调用组件时会关闭其他不相关的安全屏幕吗?

这似乎是正在发生的事情,系统的其他部分正在监控 SIM 卡状态,当检测到变化时会立即更新当前活动状态的安全屏幕。所以在 PUK 调用重置组件时,才会出现连指纹界面都会关闭的情况。

而正常逻辑,PUK 重置后,SIM 卡默认解锁,此时下一个安全屏幕就是系统解锁。

为修复这个问题安卓工程师似乎准备重构函数并添加额外参数,调用者可以用来指定想要关闭的屏幕类型,在本文案例中,PUK 组件现在为执行.dismiss (SecurityMode.SimPuk),仅关闭 SimPuk 安全屏幕,而不会关闭其他任何无关的安全屏幕。

在我看来这是一个优雅且强大的解决方案,可以抵御这种情况或者未来其他类似的安全问题,我是真没想到这个错误会在安卓项目里引起如此大的代码更改。

(全文完)

注1:正常来说,首个提交漏洞的研究人员应该也会获得奖金,毕竟是谷歌没修复的,并不是漏洞不存在。

注2:如此严重的漏洞,此前有研究人员提交的情况下,Android VRP 竟然都没修复,这让人无法想象。

本文来源 蓝点网,由 本站 整理编辑,其版权均为 原网址 所有,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源。

© 版权声明

相关文章