Repository navigation
[Desktop][Bug] Windows 沙箱的写入授权会给工作区目录打上可继承的 Low 完整性标签;当工作区是安装目录的上级目录时,会导致应用自身无法启动 #10448
salicylate350234
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
[Desktop][Bug] Windows 沙箱的写入授权会给工作区目录打上可继承的 Low 完整性标签;当工作区是安装目录的上级目录时,会导致应用自身无法启动
摘要
在 Windows 上,把 DeepSeek Harness Desktop 安装于
D:\AI\DSH,并将工作区设为该安装目录的上级目录D:\AI后,桌面端会持续启动失败,报Desktop renderer exited: launch-failed,且重装无效。排查确认:桌面端内置的 Windows 沙箱在授予工作区写权限时,会向工作区目录写入一条带
(OI)(CI)继承标志的 Low 完整性强制标签(S-1-16-4096,No-Write-Up)。该标签随继承传播到安装目录及其全部文件,而 Chromium 的 GPU 进程以 Untrusted 完整性运行,无法读取完整性级别高于自身的对象,导致 GPU 进程连续启动失败,最终触发GPU process isn't usable. Goodbye.并使渲染进程启动失败。该故障为应用自身行为导致的自伤,与第三方安全软件、安装包完整性、磁盘权限无关。手动将目录完整性级别改回 Medium 后可立即恢复;但只要再次以该目录为工作区执行可写沙箱任务,故障即复现。
一、环境
@deepseek-ai/dsh-desktop0.2.1-rc.2(安装包dsh-latest-windows-x64.exe)D:\AI\DSHD:\AI(安装目录的上级目录)二、现象
DeepSeek Harness.exe进程。dsh web(浏览器模式)可正常使用。%APPDATA%\@deepseek-ai\dsh-desktop\logs\中累积 11 份crash-*-renderer.log,内容一致,均为launch-failed。三、排查过程与证据
3.1 排除安装损坏
将官方安装包
dsh-latest-windows-x64.exe解包,与已安装目录逐文件比对 SHA-256:19 个根层文件全部一致;主程序 Authenticode 签名有效(签发者Hangzhou DeepSeek Artificial Intelligence Co., Ltd.)。据此排除安装包损坏、文件被篡改、杀毒软件删除文件等情况。3.2 定位失败阶段
以
--enable-logging=stderr --v=1启动,捕获到完整失败序列(节选):结论:渲染进程的
launch-failed是结果,真实原因是 GPU 进程连续 9 次启动失败,Chromium 判定 GPU 不可用后主动FATAL退出。Windows 错误报告中对应的记录为:
DeepSeek Harness.exe异常代码0x80000003,异常偏移0x7356e49(RVA)。该偏移处的机器码为cc(int3)/0f 0b(ud2),邻近引用字符串NOTREACHED hit.,属于 Chromium 的NOTREACHED()断言在 release 构建下触发的IMMEDIATE_CRASH。3.3 对照实验:故障与目录绑定
同一份二进制(SHA-256 完全相同)在不同目录下的表现:
D:\AI\DSH(原安装位置)D:\DSH2(同文件复制到 D 盘根下,权限继承默认值)据此判定:故障由安装目录所在位置引入,而非程序文件本身。
3.4 定位到完整性级别
对比目录 ACL 与强制标签:
D:\AI及其整棵子树被标记为 Low 完整性级别,且带有(OI)(CI)继承标志,因此安装目录及其全部 8712 个文件均被继承为 Low。将
D:\AI\DSH的完整性级别改回 Medium 后,原目录立即恢复正常启动(5 个进程存活)。此实验结果将故障直接归因于该标签。3.5 为什么补充 DACL 权限无效
在改完整性级别之前,曾尝试为安装目录补充
NT AUTHORITY\RESTRICTED、ALL RESTRICTED APPLICATION PACKAGES的读执行权限,结果仍然失败。原因:完整性级别属于强制访问控制(MAC)策略,在 DACL 判定之外独立生效。对象被标记为 Low 时,完整性级别低于或等于 Untrusted 的进程无法读取,无论 DACL 是否授予权限。因此该方向从一开始就不可能奏效,这也是故障难以定位的原因之一。
四、根因
4.1 代码定位
在
resources\app.asar中可检索到 Windows 沙箱的 ACL 实现(windows-acl-run),相关函数注释原文:AddMandatoryAce(acl, 2, 3, 1, S-1-16-4096)的参数与实测标签完全对应:dwAceRevisionACL_REVISION_DSdwAceFlagsOBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE(OI)(CI)dwMandatoryFlagsSYSTEM_MANDATORY_LABEL_NO_WRITE_UP(NW)pLabelSidS-1-16-4096Low Mandatory Level四项全部吻合,可以确认标签来源。
4.2 触发路径
沙箱以如下形式启动受限子进程(取自包内文档):
当
--mode workspace-write时,grantWrite对工作区目录一次性写入四项安全设置,实测D:\AI的 ACL 与之逐条对应:S-1-4-65155407-729764605:(OI)(CI)(W,D,DC)APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(OI)(CI)(RX)Everyone:(I)(CI)(DENY)(DC)Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)4.3 触发证据
%USERPROFILE%\.dsh\sessions\下的会话目录按工作区路径命名,可确认实际使用过的工作区:其中
--D-AI--下存在session-feed7055-2ea2-46a4-b934-38bb9da39baa,时间戳为 2026-10-17 20:32,处于「最后一次正常使用(18:47)」与「首次崩溃(23:14)」之间。同时,
D:\MrAwU 2(D 盘顶层目录,非安装路径)也存在同款S-1-4-…写 SID 残留 ACE,与其作为工作区的记录一致,说明该行为对任何工作区都会发生,只是造成崩溃需要「工作区是安装目录的上级」这一额外条件。4.4 完整因果链
补充说明:
--no-sandbox可以绕过该故障,因为它同时禁用了 GPU 进程沙箱;这也从反面印证故障点在沙箱启动链路。五、影响范围
六、临时规避与修复
6.1 规避(推荐)
不要把工作区设置为安装目录本身或其上级目录。 工作区应位于与安装路径无关的独立目录,例如:
6.2 检测
若输出包含
Low Mandatory Level,说明已被打标。6.3 修复
将目录完整性级别恢复为 Medium(仅修改强制标签,不改动访问权限):
执行后应用可立即正常启动,无需重装。经实测,修复后
D:\AI与D:\AI\DSH均为Medium Mandatory Level,应用以默认参数启动成功(5 个进程存活)。6.4 残留项说明
修复后
D:\AI的 DACL 中仍保留沙箱遗留的S-1-4-…写 SID ACE、Everyone:(DENY)(DC)与ALL APPLICATION PACKAGES:(RX)。由于对应 SID 已无进程持有,这些条目当前为失效状态,不影响使用,但会持续累积。七、建议的修复方向
grantWrite应有对应的 revoke 路径,在会话结束或应用退出时回收标签与 SID ACE。当前实现只增不减,属于持久副作用。launch-failed)。GPU process launch failed: error_code=18等底层原因暴露到崩溃日志或对话框,而不是仅显示launch-failed。八、复现步骤
D:\AI\DSH。D:\AI(安装目录的上级目录)。icacls "D:\AI" | findstr /I "Mandatory",可见Low Mandatory Level:(OI)(CI)(NW)。九、附录:关键数据
崩溃日志(
%APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-*-renderer.log)修复前 ACL(节选)
修复后
对照实验
D:\AI\DSH,Low 标签)--disable-gpu--disable-gpu --no-sandboxD:\DSH2(Medium,默认 ACL)All reactions