谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡( 三 )


文章图片

△就是这个函数
这里注意,.dismiss()函数可不是一个“专人专用”的函数,它并不只会解除SIM卡的手机锁定屏幕,连PIN、密码和指纹之类的正常锁屏也能解锁……
这就导致它极容易受到竞态条件影响,一旦两个线程执行顺序出现一点儿误差,就可能导致屏幕解锁出现问题 。
竞态条件即两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序 。
谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡
文章图片

举个栗子,如果在“PUK重置组件”的模块调用.dismiss()函数之前,就有操作改变了当前的安全屏幕,那么.dismiss()函数就可能误解锁指纹锁屏 。
关键来了,由于手机SIM卡状态是随时更新的(系统一直在监视SIM卡状态),因此如果SIM卡状态发生变化,系统也会更新当前的安全屏幕 。
所以一旦“PUK重置组件”成功调用了.dismiss()函数,它就会在解锁PUK屏幕之前,直接先解锁了指纹锁屏!
根据谷歌公开的漏洞报告,它在Android 10到Android 13系统中都可能出现:
谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡
文章图片

当然,也有网友测试发现,Android 11似乎不受影响,而是在Android 12中出现了 。
谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡
文章图片

还有网友发现三星手机也“逃过一劫”:
谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡
文章图片

现在,安卓工程师们重构了.dismiss()函数,简单来说就是给它打个小小的补丁,让它只能解锁带有“SimPuk”标记的安全屏幕(也就是只能解除手机锁定屏幕) 。
小哥本人对此没有异议,但也有网友认为,这不是这次漏洞的最优解:
谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡
文章图片

永远不要假设任何bug都只有一种特殊情况 。如果不解决代码的根本逻辑,灾难就一直存在 。
【谷歌|安卓锁屏不到2分钟被破解:仅需换一张SIM卡】你的安卓手机中出现了这个bug吗?