利用漏洞:在HarmonyOS x86_64开发者预览版中实现多用户账户并行的技术探索

引言:开发者模式下的“禁区”

在HarmonyOS生态中,开启开发者模式是每一位应用开发者、系统研究者的必经之路——没有它,你就无法安装未上架的HAP包,无法抓取系统日志,也无法使用hdc工具进行底层调试。但这条“必经之路”有一个众所周知的限制:开启开发者模式后,系统不允许同时存在多个用户账户。

对于普通用户来说,这或许无关紧要。但对于需要在不同用户账户间切换测试的应用开发者、需要验证账户隔离机制的安全研究者、以及像我这样的操作系统和网络安全爱好者来说,这个限制无疑是一道令人头疼的壁垒。
系统登录界面

背景:当多用户需求遇上开发者模式的“一刀切”

HarmonyOS的多用户机制设计之初就考虑到了数据隔离与安全。在未开启开发者模式的设备上,用户可以通过“用户与账户”设置添加多个系统用户(如“机主”、“子用户”、“访客”等),并在不同用户间切换使用。这是一种很正常的设计——用户A断开连接,再切换到用户B。

然而,一旦开启开发者模式,这个功能就被系统“一刀切”地关闭了。官方给出的理由是:开发者模式下的高权限(如USB调试、hdc连接)可能被恶意利用,从而突破多用户间的数据隔离。从安全架构角度看,这个逻辑是合理的——限制多用户登录,确实能缩小攻击面。

但对于开发者而言,这个限制带来的麻烦是实实在在的:

· 应用测试:需要测试同一应用在不同用户账户下的行为差异,却只能反复切换用户
· 账户隔离验证:想验证用户A的数据是否真的对用户B不可见,却无法让两个用户同时处于登录状态
· 多用户功能调试:某些系统功能(如文件共享、应用分身)在多用户环境下的行为,在单用户环境下根本无法测试
· 快速环境切换:某些应用的存在有可能会对软件的运行造成影响,单用户无法完成测试

那么,有没有办法在开启开发者模式的前提下,绕过这个限制?

核心发现:账户切换流程中的“时序竞速”

这个发现的起点,其实是一次偶然的操作。

我在x86_64平台下的HarmonyOS 7.0.0.23开发者预览版上测试账户切换流程时,发现了一个有趣的现象:当你在切换账户的过程中,系统会短暂弹出当前当前选择账户的登录界面(作为安全验证的过渡)。

那么,如果我们在这个极短的时间内快速输入密码完成登录,同时系统仍在执行切换至另一个账户的流程——两个登录请求在时序上发生了重叠,系统能否正确处理这种并发请求呢?

测试最终结果是:账户A和账户B同时处于“已登录”状态。

这个发现不是在系统底层或文件系统层面找到的突破口,而是在UI操作流程中,利用系统处理并发请求时的时序缺陷,实现了开发者模式下多账户并存的目的。用一句话概括:我们利用了系统在并发处理上的滞后性,强行将两个账户“挤”进了登录状态。

卡出的界面 ##### 注意看这个窗口的颜色是深色的

实战教程:如何在开发者模式下触发多账户并行

环境准备

· 设备:任何可以安装HarmonyOS 7.0.0.23 Developer Beta x86_64系统的设备
· 系统版本:HarmonyOS 7.0.0.23 Developer Beta
· 配置状态:开发者模式开启,并且两账户均设置密码
· 前置条件:系统中已创建至少两个具有密码的用户账户(演示为ZCL和01,即管理员账户,02为普通用户)

多用户

操作步骤

第一步:进入用户管理界面

打开设备的“设置”应用或开始菜单,进入“用户与账户”页面,确保系统的主账户(机主默认账户)是账户A。

第二步:执行“快速输入密码”操作

这是整个流程的核心步骤:

  1. 重新启动设备(经过测试),或者退出主账户(由于一个bug,无法测试)

  2. 点击账户头像,切换至账户选择界面
    账户选择界面

  3. 多次点击需要登录的B账户,直到背景变为深色,做好准备。界面变深

  4. 系统会短暂弹出账户A的登录界面(这是一个用于身份验证的过渡窗口)

  5. 在过渡窗口期内快速输入账户A的密码并点击登录过度界面

请注意,密码不要设置的太复杂,本界面只会持续3秒-7秒不等,太复杂了容易来不及登录

  1. 随后系统弹出账户B的登录界面,正常输入密码完成登录

姗姗来迟的登录界面

千万不要在这个界面点头像试图切换登录的账户,因为令牌仅在此窗口发出,切换出去会话锁会被解除,你就只能再卡一次

第三步:观察结果

完成上述操作后,你会看到设置界面账户A和账户B同时处于“已登录”状态——原本应该被切换掉的账户A没有被注销,而账户B也成功登录。

成功登陆

适用范围说明:该操作在所有安装了HarmonyOS 7.0.0.23 Developer Beta x86_64系统的设备上均适用,复现率约为70%-80%,取决于输入密码的速度和过渡窗口的持续时间(一般来说,过渡窗口只有3-7秒,arm设备大概率只有0.1-2秒,需要你的反应足够快)。

技术原理浅析:为什么会出现这种现象?

HarmonyOS的账户管理服务在切换用户时,并没有设计完整的并发锁机制来处理“旧账户重新登录”与“新账户登录”同时发生的情况。

正常的切换流程是:注销账户A → 加载账户B

但我们的操作在“注销账户A”的流程尚未完成时,通过在过渡窗口期内快速重新登录账户A,让系统同时收到了两条互相冲突的登录请求:

请求1:账户A的登录请求(在过渡窗口内发出)
请求2:账户B的登录请求(在切换流程中正常发出)

由于鸿蒙系统针对这种并发场景缺乏完善的状态锁机制,导致状态机在处理两个请求时进入未定义状态——既没有执行注销账户A的流程,也没有完整执行登录账户B的流程,最终两个账户都被标记为“已登录”,UI界面也随之显示双账户共存。

利用场景

在启用开发者模式的HarmonyOS x86_64设备上,多用户账户并行有以下几种实用场景:

· 应用兼容性测试:在同一台设备的不同用户环境中测试同一应用的表现
· 用户权限验证:验证不同用户账户之间的数据隔离是否生效
· 多用户功能调试:测试文件共享、应用分身等依赖多用户环境的系统功能
· 其他需要多账户状态的调试场景

影响范围与边界

需要特别说明的是:这个缺陷的影响范围仅限于UI显示层面(并非安全漏洞)

· 不会导致跨用户数据泄露:虽然界面显示了两个用户,但系统底层的用户隔离机制(每个用户拥有独立的 /data/user/[userId]/ 目录)仍然有效,用户A的数据无法被用户B访问
· 不会导致权限提升:该缺陷无法被远程利用,需要物理接触设备且开启开发者模式
· 实际风险较低:可能会导致部分调试功能混乱

使用hdc shell进一步验证可以发现:

$ cat /proc/self/mountinfo | grep "/mnt/user/"
# 输出显示多个用户的挂载点(100、101、102)均存在
$ ls -l /data/system/users/
# Permission denied
$ dumpsys user
# /bin/sh: dumpsys: inaccessible or not found

hdc在普通shell权限下无法直接观察到用户服务的异常状态,这也从侧面印证了该缺陷的性质——它是一个UI状态机设计缺陷,而非系统底层的高危漏洞。

结语

这个发现的价值,不在于它有多“高危”,而在于它展示了竞态条件在操作系统UI层面的实际表现——即便是华为这样的大厂,在并发状态管理上也存在薄弱环节。

目前,该问题已通过华为开发者联盟正式提交工单,期待官方在后续版本中修复这个漏洞。本漏洞属于CWE-362记录的通用弱点。
本文写于2026.7.30

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐