利用漏洞:在HarmonyOS x86_64开发者预览版中实现多用户账户并行的技术探索 利用漏洞在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。第二步执行“快速输入密码”操作这是整个流程的核心步骤重新启动设备经过测试或者退出主账户由于一个bug无法测试点击账户头像切换至账户选择界面多次点击需要登录的B账户直到背景变为深色做好准备。系统会短暂弹出账户A的登录界面这是一个用于身份验证的过渡窗口在过渡窗口期内快速输入账户A的密码并点击登录请注意密码不要设置的太复杂本界面只会持续3秒-7秒不等太复杂了容易来不及登录随后系统弹出账户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 foundhdc在普通shell权限下无法直接观察到用户服务的异常状态这也从侧面印证了该缺陷的性质——它是一个UI状态机设计缺陷而非系统底层的高危漏洞。结语这个发现的价值不在于它有多“高危”而在于它展示了竞态条件在操作系统UI层面的实际表现——即便是华为这样的大厂在并发状态管理上也存在薄弱环节。目前该问题已通过华为开发者联盟正式提交工单期待官方在后续版本中修复这个漏洞。本漏洞属于CWE-362记录的通用弱点。本文写于2026.7.30