主题
XHIM 支持包安全边界
状态:工具与离线负例测试已实现;不代表客户隐私流程已获法务批准。
威胁模型
支持包面对的主要风险是宿主应用误把凭证、业务消息、账号标识或本地环境路径 作为“诊断”上传,以及恶意 ZIP 利用路径穿越、重复名称、超大解压尺寸或隐藏 Entry 绕过客服侧检查。
实现采用固定 Schema 而不是通用日志清洗器:
- 输入只有 SDK diagnostics JSON、stable-code JSONL 和可选白名单元数据;
- 敏感或未知字段直接拒绝,不做正则打码后继续;
- 不读取目录,不跟随符号链接,不发现系统日志,不访问网络;
- JSON 必须 UTF-8、无重复 Key、无非有限数值并满足字段和数量上限;
- 日志没有任意
message,只有 Timestamp、Severity、Component、Stable Code、 Retryable 和白名单数值 Counters; - ZIP 使用 Store、固定 1980 时间、固定顺序、固定普通文件权限,无 Extra 和 Comment;
- 临时文件与目标同目录,完整写入和
fsync后通过不覆盖 Hard Link 原子发布; 失败会清理自己创建的临时文件和未完成目标,不删除竞争者创建的目标; - Manifest 绑定工具版本、SDK Source Commit、Entry Size、Record Count 和 SHA-256。
独立验证器在解压前检查 Archive/Entry 数量和大小、压缩方式、名称、重复项、 权限、时间、Flags 与中央目录边界。只允许固定 Entry,随后重新解析各 Schema、 重算 Hash,并重建确定性 ZIP 做逐字节比较,因此路径穿越、Zip Bomb、额外项、 前后隐藏字节、本地 Header 差异和内容篡改都会失败。
回归入口
bash
python3 -m unittest scripts.release.tests.test_support_bundle
cmake -P cmake/ValidateSupportBundle.cmake需要把它挂到父工程时,可以在父工程 CMakeLists.txt 中显式启用可选 Target:
cmake
include(cmake/ValidateSupportBundle.cmake)
xhim_add_support_bundle_validation_target()随后构建 xhim_validate_support_bundle。模块默认不会在普通 Configure 或 Build 中自动运行,也不会给 SDK 消费者引入 Python 运行时依赖。
测试覆盖正常包、确定性、敏感字段、未知消息字段、超大输入、非法 UTF-8、 输入/Bundle 符号链接、路径穿越、重复/额外 Entry、篡改、压缩 Bomb、Commit 不匹配、乱序时间、发布竞争、不覆盖和失败原子清理。
仍需客户完成
- 在各端应用层按白名单显式映射诊断模型,禁止反射式全对象序列化;
- 选择自己的工单传输通道、访问控制、保留期和删除流程;
- 由客户隐私/法务团队确认适用地区的告知、同意和数据处理协议;
- 将 SDK Source Commit 从正式签名发布清单传给收集器并在客服侧再次校验。