主张
插件补丁层没有能力模型。第三方 bundle 可以静默改写或移除部署的安全控制,安装者在安装时与安装后都无从知情。唯一的完整性校验由补丁作者自愿触发,省略即绕过。缺陷落在厂商的补丁层设计,不落在用户是否谨慎。
证据
行号锚定 99f6f02fec。下列位置可在公开源码中直接核对。
| 事实 | 位置 |
|---|---|
| patch 把除 id / insert / name 外的任意字段直接写入目标行,无白名单,无受保护行 | vendor/include/src/index.ts:121-124 |
| 仅当补丁声明了 name 才比对包名;不写则检查不执行 | vendor/include/src/index.ts:116-119 |
| disabled 的行不会 init,等于移除该控制 | vendor/loader/src/config/entry.ts:126 |
| 安全行 id 稳定且公开:sandbox、sandbox-policy、approval、permission | packages/bundle/base/cordis.patch.yml:169-205 |
| 后加载的 bundle 按 id 整行覆盖;层序由 dsh.profile.bundles 决定 | packages/bundle/base/README.md:5;packages/boot/app-boot/src/profile.ts:11-13 |
| dsh plugin add 是包管理器薄转发,无签名、完整性或权限审核 | apps/cli/src/plugin.ts:3-5 |
矢量说明
| 项 | 取值 | 含义 |
|---|---|---|
| 攻击向量 | 本地 | 要能往这台机器装 bundle |
| 复杂度 | 低 | 一份 YAML 补丁即可 |
| 权限 | 无 | 补丁作者对目标无需已有权限 |
| 用户交互 | 需要 | 受害者得执行安装 |
| 范围 | 改变 | 被摘掉的是管其他组件的控制 |
| 机密 / 完整 / 可用 | 高 | 审批和沙箱去掉后,以该用户身份读写执行 |
结论
DeepSeek Harness 用多层 bundle 组合运行配置。后加载的层可以按 id 覆盖先加载层里的同一行,包括审批与沙箱这类安全控制。这是公开文档里写明的组合规则,但补丁层没有配套的能力模型:不区分哪些行受保护,也不在安装时向操作者展示差异。
补丁层仅有的完整性检查是:当补丁自己写了 name 字段,才核对包名。省略该字段,检查不会执行。因此防护能否生效,取决于补丁作者是否愿意被检查。
影响
任何会把第三方或社区 bundle 写进 profile 的部署都在范围内。一次常规的插件安装就可能关掉审批,或把沙箱策略改宽。组合发生在配置层,不依赖安装脚本,包管理器拦截构建脚本的默认策略挡不住这条路径。
本条已在隔离环境中用官方配置导出核对过:后加载 bundle 可以改写上述安全行,且不会出现包名不匹配的提示。复现材料与利用细节在厂商收到通知之前不公开。
前提
利用需要操作者把第三方 bundle 装进 profile。默认层序里,后装的包排在 base 之后,正好覆盖安全行。补丁不写 name,完整性检查不会跑。不需要 postinstall,也不需要目标机上已有权限。
眼下可以做的
在厂商给出修复或官方说明之前,部署侧可以先收紧安装面。
- 不要把未审过的第三方 bundle 写进生产 profile。
- 把插件安装当成特权操作:安装前后导出配置,核对审批与沙箱行有没有被改写。
- 生产环境固定 bundle 清单,避免运行时临时加包。
定级
Cavo 定级为高危。依据 CVSS 3.1 矢量 AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H,基础分 8.5。需要操作者执行插件安装,所以不是严重;摘掉的是管其他组件的安全控制,范围取 Changed。
若按 Unchanged 计分,得 7.8,仍是高危,结论不翻盘。两种算法都摊开,避免只报对自己有利的那一种。
披露状态
研究完成于 2026-08-14,2026-08-18 在 99f6f02fec(dsh-v0.1.0-rc.7)复核,机制仍在。同日已按产品页公布的地址发至 harness-privacy@deepseek.com,并抄送 security@deepseek.com。复现材料未附。默认窗口 90 天,至 2026-11-16。本条状态为「已通知」。