[Security] Windows 沙箱 partial 边界对模型与运维不可见,pwsh 命令缺少强制批准门 #1331
Replies: 1 comment
|
你这份提案里第 1 条被低估了——它比另外两条更普遍,也更该单独提。另外补一条同平台的第三个边界,它可能需要进你那个提示框架。 一、"边界对模型不可见"是一条通用缺陷,不只是 Windows ACL 的事
这句话的一般形式是:一个执行环境向它的消费者谎报了自己的强度。 模型收到的信号是"命令成功了",它据此推断"我在沙箱里,所以这次写入被约束住了"——而这个推断在 这个形状最近在社区里出现得很密:
共同点:执行/防护机制的实际强度,对它的消费者(模型、用户、运维)不可见。 而你的第 1、2 条正是在补这个可见性—— 我建议把第 1、2 条从"pwsh 提示"提升成一条通用原则:"沙箱档在 二、Windows 上还有第三个边界,而且它是完全绕过不是部分强制#3045 报了一个已复现的洞:在 WSL2 上, 这和你说的 partial 不是一回事,但对用户来说结果更严重:partial 是"约束不完整",interop 是"约束不存在"。而两者共享同一个缺陷——用户和模型都看不出来。 你那个提示框架正好是它的落点。建议在提案里加一句:enforcement 声明应该覆盖"这条执行路径根本不经过沙箱"的情况(比如 argv[0] 是 Windows 可执行文件、或检测到 interop 未禁用)。 (对读到这帖的 WSL 用户,当下的缓解在 WSL 那侧不在 DSH 侧: 三、你的第 3 条(pwsh 批准门)方向对,理由值得写清楚我想特意肯定一件事:你做的是 两个建议:
边界与利益相关我们不修 DSH 自家组件—— 利益相关:我维护 pi2dsh(Pi 生态兼容层)。这条不推销,而且是原则性的:我们生态里确实有"第二个模型逐次审批工具调用"的插件,但在安全边界的帖子上推它是错的——理由见第三节。真边界在 ACL、在 interop 开关、在人的批准,那都是 DSH 和操作系统的事。 |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
现象
windows-acl 沙箱档(
enforcement: 'partial')在 README 中记录了其结构性边界(WRITE_RESTRICTED 必须保留 Everyone;NTFS 硬链接跨路径别名),但:
模型可能误判一次写入仍在工作区内;
写 ACE,或 FAT 系卷)没有任何信号;
建议修复(已实现,附 fork 代码)
enforcement: 'partial'的运行追加[sandbox: partial enforcement — ...](exit 标记之前);inspectWritableRoot()检测 Everyone/AU 写 ACE 与FAT 系卷,
sandbox-local每工作区一次输出[sandbox: workspace warning — ...];pwshRequireApproval(默认 false),每条前台/后台调用先经ctx.approval,非allowed-once一律失败关闭;实时值来自pwshsettings命名空间(已纳入 dsh-apiproxy 的 Web 设置白名单),设置面板提供开关行。
实现:https://github.com/snzhongcheng/deepseek-harness
(提交
feat: pwsh 命令批准门与 Windows 沙箱边界提示)验证
ui-permission-presets / apiproxy,全部通过;
pnpm run lint、typecheck、duplication、翻译配对等门禁全绿;影响范围
仅 Windows 的 pwsh 路径;bash 与非 Windows 平台行为不变。
All reactions