site-avatar

Cynosura

Trying to light up the dark.

CVE-2022-20465 锁屏绕过漏洞原理分析

Google 在 2022 年 11 月的 Android 安全公告 中首次向公众披露了编号为 CVE-2022-20465 的安全漏洞。根据上报者 David Schütz 的说明及演示,仅需插入已知 PUK 码的 SIM 卡插入目标手机,并故意输错三次 PIN 码后输入正确的 PUK 码,即可绕过锁屏密码直接解锁手机。在惊讶该漏洞的复现难度如此简单之余,我也想弄明白漏洞的背后原理,于是就有了这篇简单的分析总结文章。

得益于 Android 的开源特性,我们可以查到有关修补 CVE-2022-20465 的历史提交记录,并分析出 AOSP 团队采用了哪些手段来强化安全性。

CVE-2022-20465

首先,在 Android 上有个被称作“安全屏幕” (security screen) 的概念,指纹输入界面、密码输入界面,以及此次造成问题的 PIN 码输入界面和 PUK 输入界面都包含在“安全屏幕”之内。

同时安全屏幕之间可以相互堆叠,即 PUK 输入界面实际是堆叠在指纹输入界面之上。由于函数调用设置错误,在 PUK 码校验通过后,实际也一并关闭了叠在下面的指纹输入页面,导致此次输入 PUK 码后手机意外解锁的情况。

Google 对此重写了整套函数调用逻辑,现在调用请求可以指定要关闭的安全屏幕类型,假设请求关闭的安全屏幕未处于活动状态(例如今天指纹输入界面被叠在 PUK 码输入界面之下),则不会执行任何操作。

注意该漏洞实际是绕过锁屏密码输入界面,并非真正解锁手机。当设备处于首次启动未解锁数据加密的情况下,此时 PUK 码虽然可以绕过锁屏界面,但手机会卡在“Android 正在启动”界面,并不能解锁数据分区。

尽管漏洞的演示以 Pixel 6 为主,但该漏洞理论上影响所有 2022 年 11 月安全补丁以前,且未修改安全屏幕相关逻辑的 Android 手机。由于漏洞的复现难度极低,如有条件还是尽早更新至 11 月安全补丁为妙。

其实整件事情看下来我最不满的是 Google 的消极态度。根据上报者 David Schütz 的说明,这个漏洞 6 月就被上报了,Google 一直摸到 11 月安全补丁才修复...甚至 Google 本来打算 12 月的,是披露者持续跟踪这个问题,才争取到提前发布 最恐怖的是,他还不是最早的披露者,之前已经有人上报过这个问题了,直到这次有人一直跟着 Google 才重视起来修。可怜的 Pixel 4 就这么错过了漏洞的官方修补机会(也许吧,但 Google 几乎不会在结束支持后还为老机型推修补 OTA 的)。同时,由于 Android 9 已超过支持周期,本次修补也仅限 Android 10 及之后的版本,不代表之前的版本就不存在该问题。手持 Android 9 及更早之前版本的机主,也只能寄希望于第三方 ROM 了。

最后如对 CVE-2022-20465 从发现到最终修复全过程比较感兴趣的朋友,可以进一步阅读 David Schütz 本人对该事件的记录文章,其催更的精彩程度不亚于任何狗血肥皂剧🙃。

版权许可

声明: 本文所有内容(包括图片)

均采用 CC BY-SA 4.0 协议授权

转载请注明出处,并附上本声明内容

评论

注: 留言系统基于 Disqus,部分网络环境可能无法正常加载。