Repository navigation
Replies: 2 comments
|
Confirmed at the source level — and it is sharper than a missing 1. The documented claim your measurement contradicts. 2. Why the suite never caught it — your guess is right, and it is provable. The only inheritance assertion in the package ( 3. What the call can and cannot do. 4. The second path, and why it is permanent. The grant is materialized once per provider lifetime per workspace ( 5. Your fix direction matches the platform primitives, with one note from this side: the cost you flag is real, and it is the reason the exact-ACE skip exists — but that skip keys on the root only, so a descendant-aware propagation has to be tracked separately, or the same short-circuit that makes re-provisioning cheap will keep skipping the subtree. And the label is only half: the capability ACE has to reach the child too. 6. Your temporary remedy, recorded as a quotation rather than a verification (we have no Windows host): 7. Where the fix belongs. This is core ( Thanks for the repro and the before/after pair — the |
|
The plugin that carries the analysis above is published — closing the loop on that reply.
One-line usage: install it and mount its bundle patch in your profile. - insert:
- id: sandbox-grant-advisor
name: '@argszero/cordis-plugin-sandbox-grant-advisor'What this release takes from the report above, and how it is stated in the advice:
The advisory is attached to the denial in the same step (a user-role notice via |
Uh oh!
There was an error while loading. Please reload this page.
Version:
@deepseek-ai/dsh-sandbox-windows-acl0.2.0-rc.2, Windows 11 Pro (26200), NTFS, workspace on a non-system drive.What happens
In a
workspace-writesession on an existing project (a git repo with many folders), every write below the workspace root is denied, while a write at the root succeeds:The same subfolder write, run outside the sandbox, succeeds. Giving the user full control on the subfolders (
(OI)(CI)(F), verified) does not change the result.Cause
After the sandbox has initialised, the workspace root carries the label and the capability ACE, but folders that already existed do not:
The confined child runs at Low integrity, so the no-write-up policy denies it in every folder still at implicit Medium, whatever the DACL allows. Folders created after init inherit the label, which is probably why a test in a fresh, empty workspace passes.
One more observation: when something later rewrites a subfolder's DACL (for example
icacls /grant), Windows recomputes that folder's inherited ACEs and theS-1-4-…ACE appears there. The integrity label still does not, and the write stays denied. So the label is the blocking part.Related: #8209 describes the same Low-subject / Medium-object denial for git's key store outside the workspace. This report is about the workspace itself.
Expected
In
workspace-write, the confined child can write anywhere under the workspace, including folders that existed before the session started.Suggested fix
Apply the label and the ACE so that they reach existing children. For example, use
SetNamedSecurityInfoWwithLABEL_SECURITY_INFORMATION(and the DACL) in a way that propagates to existing objects, orTreeSetNamedSecurityInfoW, or equivalentlyicacls <ws> /setintegritylevel (OI)(CI)low /T. Large trees (build outputs,node_modules) make a full walk slow. Doing it once per workspace, or documenting the cost, would help.Repro
C:\tmp\ws\sub\(the folder exists before the session).C:\tmp\wsas its workspace,workspace-write.C:\tmp\ws\a.txt→ works. WriteC:\tmp\ws\sub\a.txt→ access denied.icacls C:\tmp\wsshowsLow Mandatory Level:(OI)(CI)(NW).icacls C:\tmp\ws\subshows no label.All reactions