已开启
[安全问题]: 【白细胞AI辅助分析】【安全】【IPC反序列化边界检查缺失】sfs.c存在IPC反序列化边界检查缺失 #27
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

漏洞简述

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

攻击场景:
攻击者通过篡改TEE安全存储文件的元数据,将data_size字段伪造为一个极大且满足对齐要求的值,同时保持实际文件内容极小。当Normal World通过IPC调用TEE的SSA服务打开该文件时,触发cal_construct_block函数中的死循环。由于文件读取提前到达EOF返回0,而0 % block_size == 0且error保持为0,循环终止条件无法满足,导致TEE服务陷入死循环,最终造成TEE OS拒绝服务。

攻击步骤:

  1. {'step': 1, 'action': '攻击者篡改安全存储文件的元数据', 'code_path': 'base/tee/tee_os_framework/services/ssa/src/secure_storage_agent/sfs.c:601-620', 'detail': '攻击者通过直接修改Flash分区中的加密文件(或利用其他漏洞写入),将文件头中的data_size字段修改为一个极大值(如0x10000000),且确保该值能通过615行的模运算检查(data_size % crypto_block_size == 0)。实际文件体保持为空或极小。'}
  2. {'step': 2, 'action': '攻击者通过IPC触发文件打开操作', 'code_path': 'base/tee/tee_os_framework/services/ssa/src/secure_storage_agent/sfs.c:920', 'detail': 'Normal World的客户端应用(CA)向TEE发送IPC请求,调用ssa_open_handle打开被篡改的文件。此操作会依次调用ssa_open_handle_init -> ssa_open_check -> check_integrity_v2 -> construct_block_info。'}
  3. {'step': 3, 'action': '触发死循环漏洞', 'code_path': 'base/tee/tee_os_framework/services/ssa/src/secure_storage_agent/sfs.c:536-542', 'detail': '在cal_construct_block函数中,while(data_size > 0)循环开始执行。ssa_fs_fread读取文件体,由于实际内容极小,迅速到达EOF并返回read_count=0。此时判断条件 (0 % block_size != 0) 为假,(error < 0) 也为假,循环既不break也不return错误。同时data_size未被消耗,死循环形成。'}
  4. {'step': 4, 'action': '造成TEE OS拒绝服务', 'code_path': 'base/tee/tee_os_framework/services/ssa/src/secure_storage_agent/sfs.c:536', 'detail': 'SSA服务进程陷入死循环,占用CPU资源。由于TEE通常单线程或具有高优先级,此死循环将阻塞TEE OS的调度,导致其他安全服务(如指纹、支付等)无法响应Normal World的请求,造成系统级DoS。'}

PoC 概念验证:
构造一个恶意安全存储文件:1) 文件头元数据正常,使得初始解析能通过;2) 将元数据中指示文件体大小的字段(影响data_size计算)修改为极大值,如0x10000000,且必须为CRYPT_BLOCK_SIZE_V3的整数倍以绕过615行检查;3) 实际文件体截断为0字节或仅几个字节。通过Normal World API调用打开此文件,触发死循环。

前置条件:

  • 攻击者需要能够篡改TEE安全存储文件(可能需要物理访问设备修改Flash,或利用文件系统漏洞绕过RPMB保护)
  • 伪造的data_size必须满足对齐要求以绕过前置检查

入口点: ipc — handle_orig_back() @ /home/treffen/OpenHarmony_code/base/tee/tee_os_framework/services/ssa/src/secure_storage_agent/sfs.c:862
影响类型: uaf (high) — malloc() @ /home/treffen/OpenHarmony_code/applications/standard/photos/imageEditor/common/src/main/cpp/sdk/libs/AiModelRef/include/opencv2/core/utility.hpp:79

影响性分析说明

原理分析

受影响版本

规避方案或消减措施

修改建议: 在cal_construct_block函数的while循环内,增加对read_count == 0的显式检查。当ssa_fs_fread返回0且data_size仍大于0时,应视为文件损坏(Unexpected EOF),立即返回错误码(如TEE_ERROR_READ_DATA)并跳出循环,避免死循环发生。

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:修复框架组件中的安全漏洞