小米Redmi 5 Plus 身份验证绕过漏洞分析
2020-06-15 10:35:24 Author: www.4hou.com(查看原文) 阅读量:480 收藏

0x01 漏洞描述

小米Second Space取代了MIUI设备上的Android用户配置文件。它允许管理员和第二用户通过主屏幕上的图标或锁定屏幕来切换配置文件,这两个用户空间都可以用PIN或密码保护。

在小米MIUI系统中发现了一种方法,该方法允许用户在不提供密码或PIN的情况下在空格之间切换。这需要启用“第二空间”和“密码/ PIN”屏幕锁定以及USB调试。

该漏洞是由ADB命令触发的,该命令发送意图以绕过密码提示的标志启动SwitchUserService服务。结果,用户可以在不知道密码的情况下立即切换空间。

该问题是在Redmi 5 Plus设备中发现的,但已确认会影响多个最新的MIUI版本。

0x02 漏洞验证

验证全新的Redmi 5 plus设备:

1. 设立“第二空间”的功能,如果提示不能设置,从设置锁屏密码或PIN 设置>第二空间;

2. 导航到“设置”>“关于手机”并在MIUI版本上点击7次以激活“开发人员选项”;

3. 从设置>其他设置>开发人员选项> USB调试中启用USB调试;

2. 出现提示后,连接USB线并授权计算机;

5. 键入以下命令来获取Second Space用户的ID,然后绕过密码/ PIN提示切换到该ID。

 $ SECOND_USER=`adb shell pm list users | grep -o "{[0-9]*" | tr -d '{' | tail -n 1`
 $ adb shell am start-service --ez params_check_password False --ei params_target_user_id $SECOND_USER -a com.miui.xspace.TO_CHANGE_USER

无需提供密码即可从“第二空间”切换到“第一空间”

 $ adb shell是启动服务-e params_check_password否-e params_target_user_id 0  -a com.miui.xspace.TO_CHANGE_USER

下面的视频演示了该过程  (建议全屏观看)。

https://labs.f-secure.com/assets/Uploads/demo3.mp4

image.png

记录了以下操作:

1.(00:02)切换到第二个空间,当屏幕变黑时请求并提供PIN输入,可通过短暂显示的“设置”活动看到;

2.(00:13)切换回主要空间,要求并提供PIN输入。再次简要显示“设置”活动;

3.(00:29)切换到没有PIN的第二个空格,不弹出“设置”;

4.(00:43)切换回主要空间,更改params_target_user_id,无PIN时未弹出“设置”;

5.(01:23)再次切换到第二空间以在相关设置中显示PIN输入要求。

0x03 技术细节

负责大多数“第二空间”功能的系统应用程序/程序包是com.miui.securitycore 。对以下设置中“在空间之间切换”选项的静态分析使我们指向SecondSpaceSettingsFragment 类,该类通过调用switchToOwnerSpace()方法来实现此切换  。依次启动com.miui.securityspace.service。

SwitchUserService服务:

image.png

在此服务的实现中, startCommand()重写调用处理 checkPasswordBeforeSwitch(),然后从启动切换过程的位置调用 SpaceManager.switchUser()。

该漏洞在于在checkPasswordBeforeSwitch()内强制执行密码要求的方式,因为存在布尔值足以跳过提示。这意味着当将params_check_password extra设置为False 时发送服务启动意图时,可以绕过密码输入。可以通过发出以下命令,使用ADB Shell而不需要root访问权限来实现:

 $ am start-service --ez params_check_password False --ei params_target_user_id 10 -a com.miui.xspace.TO_CHANGE_USER

上面的命令也可以通过将params_target_user_id 整数指定为0 来从第二个空间切换到主要空间。

对应用程序的AndroidManifest.xml进行更仔细的检查后发现,该服务未声明为private,或者export = false 。但是,如果未明确设置,则由于存在intent-filters,因此默认情况下将导出Service ,如清单的以下摘录所示:

 < service android:name="com.miui.securityspace.service.SwitchUserService"
         android:permission="android.permission.INTERACT_ACROSS_USERS"
         android:process="com.miui.securitycore.remote" >
    < intent-filter >
        < action android:name="com.miui.xspace.TO_CHANGE_USER"/ >
    < /intent-filter >< /service >

因此,该服务的安全性取决于启动该服务所需的权限,因为大多数拥有INTERACT_ACROSS_USERS权限的应用程序都是系统应用程序。但是,此权限也由shell程序用户持有,这是普通的非root ADB Shell提供的访问级别。

0x04  时间线

image.png

本文翻译自:https://labs.f-secure.com/advisories/xiaomi-second-space如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/yMmg
如有侵权请联系:admin#unsafe.sh