已开启
[安全问题]: 【白细胞AI辅助分析】【安全】【IPC反序列化边界检查缺失】file.c存在IPC反序列化边界检查缺失 #25
King of Harmony创建于  6月1日
King of Harmony
King of Harmony成员
6月1日 创建

感谢对OpenHarmony社区的支持与关注,欢迎反馈安全问题。

漏洞编号:

漏洞归属组件

漏洞归属版本

CVSS V3.0分值

Attack Vector(AV): Local(L) Attack Complexity(AC): Low(L) Privileges Required(PR): Low(L) User Interaction(UI): Not Required(N) Scope(S): Unchanged(U) Confidentiality Impact(C): Medium(M) Integrity Impact(I): Medium(M) Availability Impact(A): Medium(M) CVSS Base Score: 5.5

漏洞简述

在 chcore_file_read (file.c:905) 函数中,处理 IPC 返回的读取数据时,未对返回的数据长度进行边界校验。在 line 939 处,如果直接将 IPC 消息中反序列化出的数据拷贝至用户缓冲区 buf,而没有校验其大小是否小于等于请求的 count,恶意或被攻陷的 FS 服务端可以返回超长的数据,导致客户端发生缓冲区溢出。

【攻击链分析】
利用难度: medium
Prover验证: CONFIRMED (置信度: 0.95)

攻击场景:
攻击者首先攻陷微内核系统中的文件系统(FS)服务进程,随后当特权客户端进程通过 IPC 调用 read 读取文件时,恶意 FS 服务返回超长的数据长度和精心构造的 payload。客户端在 chcore_file_read 中未校验返回长度直接执行 memcpy,导致缓冲区溢出,从而劫持客户端控制流实现跨进程权限提升。

攻击步骤:

  1. {'step': 1, 'action': '攻击者利用独立漏洞攻陷或替换系统中的文件系统(FS)服务进程,获得构造 IPC 响应的能力', 'code_path': 'FS服务端进程', 'detail': '在微内核架构中,FS作为独立用户态服务运行,可能存在自身漏洞或被恶意镜像替换'}
  2. {'step': 2, 'action': '受害者客户端进程调用 read() 触发 chcore_file_read,向恶意 FS 发送读取请求', 'code_path': 'base/tee/tee_os_kernel/user/system-services/chcore-libc/libchcore/porting/overrides/src/chcore-port/file.c:932-937', 'detail': '客户端循环中计算 cnt = MIN(remain, IPC_SHM_AVAILABLE),并通过 ipc_call 发送 FS_REQ_READ 请求'}
  3. {'step': 3, 'action': '恶意 FS 服务收到请求,构造恶意 IPC 响应,设置返回值 ret 远大于请求的 cnt,并填充恶意 payload', 'code_path': 'FS服务端 IPC 响应构造逻辑', 'detail': '攻击者控制 IPC 消息返回值和数据区,将 ret 设置为如 0x1000(远大于客户端请求的 cnt),并在数据区写入 ROP chain 或堆喷射数据'}
  4. {'step': 4, 'action': '客户端 ipc_call 返回,代码进入 if (ret > 0) 分支,执行未校验的 memcpy', 'code_path': 'base/tee/tee_os_kernel/user/system-services/chcore-libc/libchcore/porting/overrides/src/chcore-port/file.c:938-939', 'detail': 'ipc_call 返回恶意大值 ret,由于缺乏 ret <= cnt 的校验,条件 ret > 0 成立,进入 memcpy 分支'}
  5. {'step': 5, 'action': 'memcpy 执行导致缓冲区溢出,恶意 payload 覆盖客户端栈帧或堆结构,劫持控制流', 'code_path': 'base/tee/tee_os_kernel/user/system-services/chcore-libc/libchcore/porting/overrides/src/chcore-port/file.c:939', 'detail': 'memcpy(buf, ipc_get_msg_data(ipc_msg), ret) 将超长恶意数据拷贝至大小仅为 cnt 的 buf 中,覆盖返回地址或函数指针,实现 RCE'}

PoC 概念验证:
修改 FS 服务端的 FS_REQ_READ 处理逻辑,当收到客户端读取请求时,将 IPC 返回值 ret 设置为远大于请求长度 cnt 的值(例如 0x2000),同时在 IPC 共享内存数据区填充包含恶意栈布局(如 ROP chain)的 payload,使得客户端在处理响应时发生栈溢出。

前置条件:

  • 需要先攻陷或控制文件系统(FS)服务端进程,使其能够构造恶意 IPC 响应
  • 受害者客户端进程必须通过该恶意 FS 服务进行文件读取操作
  • 若客户端存在 ASLR 等防护,可能需要信息泄露辅助绕过

入口点: unknown — chcore_file_read() @ /home/treffen/OpenHarmony_code/base/tee/tee_os_kernel/user/system-services/chcore-libc/libchcore/porting/overrides/src/chcore-port/file.c:939
影响类型: memory_corruption (high) — chcore_file_read() @ /home/treffen/OpenHarmony_code/base/tee/tee_os_kernel/user/system-services/chcore-libc/libchcore/porting/overrides/src/chcore-port/file.c:939

影响性分析说明

原理分析

受影响版本

规避方案或消减措施

修改建议: 在 chcore_file_read 的 memcpy 调用前增加严格的边界校验,确保 IPC 返回的数据长度 ret 不超过本次请求的长度 cnt(即 if (ret > 0 && ret <= cnt)),若 ret > cnt 则截断为 cnt 或直接返回错误码 EBADF/EFBIG。

likedislike
King of HarmonyKing of Harmony成员
6月1日 添加了label:SIG_Security
openharmony_ci
openharmony_ci成员
6月1日 评论:

感谢提交Issue!关于Issue的交互操作,请访问OpenHarmony社区支持命令清单。如果有问题,请联系 [@peterli](https://gitcode.com/peterli) [@heyanhong](https://gitcode.com/heyanhong) [@sjtugjy](https://gitcode.com/sjtugjy) 。如果需要调整订阅PR、Issue的变更状态,请访问链接


Thanks for submitting the issue. For more commands, please visit OpenHarmony Command List. If you have any questions, please refer to committer gitcode for help. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
6月1日 添加了label:waiting_for_assign
yzmyzm
7月27日 关联了pull request:fix: 修复不可信输入校验问题