CHAIN A
配置加载 !!js → 宿主 RCE
QVD-2026-52631 · 7.8部分缓解
恶意 cordis.yml▸!!js 表达式▸with(ctx){eval}▸宿主全局作用域▸任意 Node 代码
阻断点:改为 node:vm 隔离求值,上下文以 JSON 字符串注入并在 vm 内重建,process 只暴露白名单字段。
没掐断:vm 内 process.env 仍是全量投影,可经抛错把密钥带进日志 / UI。需上游引入「配置来源信任」模型。
CHAIN B
只读沙箱读逃逸 → 密钥泄露
QVD-2026-52632 · 7.5部分缓解
只读会话▸grep / read / 受限 shell▸工作区外路径▸私钥 · .env · API key
阻断点:读方法执行点策略校验 + FS_SANDBOX_DENIED;editor view 补策略;插件 fs 门面强制带策略;0.1.7 再补搜索根栅栏与凭据不可读。
没掐断:硬链接绕过、进程级读面(bwrap --ro-bind / / 一类)、读侧「放宽一次」的审批入口根本没有。
CHAIN C
动态插件 vm 逃逸 → 拿到宿主 exec
QVD-2026-52644 · 高危已阻断
间接提示注入▸cordis_define▸cordis_run▸execute 拿到真实 ctx▸宿主服务(含秘密存储)
阻断点:sandboxToolExec 白名单执行视图,只含 name / callId / arguments(JSON clone)/ signal。
但:「已阻断」只对提示注入型链成立 —— 攻击者若能先改会话模式(链 E / F),这层守卫按设计豁免。
CHAIN D
C 续 · 无约束 spawn → 宿主 RCE
QVD-2026-52646 · 10.0已阻断
vm 逃逸取得宿主 exec▸subprocess.spawn▸无约束宿主进程▸以 DSH 进程权限执行命令
阻断点:argvConfined + sandboxPolicy;受限策略未声明即拒绝;红队发现 fail-open 后改为 fail-closed。
但:同样只挡提示注入型链。对已经拿到管理 RPC 的攻击者,这四个补丁不构成阻断 —— 阻断发生在链 E / F 的入口。
CHAIN E
Host 头伪造 → 未授权管理 RPC → RCE
QVD-2026-57410 · 9.8已阻断(远程攻击者)
服务暴露到非 loopback▸伪造 Host: 127.0.0.1▸高权限管理 RPC▸注册假模型 Provider▸确定性工具调用驱动 bash
阻断点:传输围栏(Host 声称 loopback 而 peer 不是 → 拒绝)+ token 交换补 peer 校验;0.1.7 再加 duplicate Host 拒绝、读根白名单、导出鉴权、/plugins 两道围栏。
没掐断:结构化拒绝 code 已导出但未进 HTTP 响应体;/api/file 的 Config.roots 只有直接挂载才能设;session.export 的身份只到「部署」层;反代实景未测。
CHAIN F
沙箱内的 Agent 自己解除沙箱
CVE-2026-82533 · 9.6部分缓解 · 围栏挡不住
启动时把控制接口 + 会话 ID 交给 shell▸一条命令改会话模式▸danger-full-access▸不弹审批 · 不留异常记录
为什么挡不住:传输围栏的判据是「peer 是否 loopback」,而这条链的 peer 本来就是 loopback —— 天然放行。
真正相关的是读面:token 的签名密钥存在 $DSH_HOME/.credentials.yaml,agent 若能读到即可伪造 cookie。建议把凭据存储纳入沙箱读面保护(对 agent 不可读),而不是继续在 HTTP 层堆判据。0.1.7 已让模型读面读不到凭据,但 shell / pwsh 通道仍可读。
CHAIN G
run_code 代码运行时隔离缺口
未上报 · 未定级该逃逸面已封堵
模型代码▸worker 全局作用域▸不接收会话策略▸读写工作区外文件
为什么值得单列:其它链都要求某种前置(配置、插件、网络暴露、令牌),这条什么前置都不要,且与工具层的拒绝行为形成刺眼的 A/B 对照。
披露节奏:细节只提交给上游安全渠道,本页与仓库文档均不含可复现攻击步骤;旧架构补丁请勿在上游审核前公开分发。