Repository navigation
fix(windows): distinguish read-only ACLs from executable mutation rights - #273
Open
seradotcom wants to merge 2 commits into
Open
seradotcom wants to merge 2 commits into
seradotcom wants to merge 2 commits into
Conversation
seradotcom
marked this pull request as ready for review
October 17, 2026 05:21
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Change and reason
A native Windows executable with an explicit or inherited read/execute ACL for another principal was rejected as writable. The admission check intersected each ACE with FILE_GENERIC_WRITE, whose expanded mask also contains READ_CONTROL and SYNCHRONIZE.
Use concrete mutation rights plus GENERIC_WRITE/GENERIC_ALL instead. Apply the same correction to private-file read checks while explicitly retaining FILE_READ_DATA, FILE_READ_EA and FILE_READ_ATTRIBUTES, so private data and attribute reads remain denied.
Verification actually executed
Permissions / protocols / compatibility affected
Windows file admission now permits harmless shared standard rights while retaining all existing concrete write/delete/owner/DACL restrictions and private data/EA/attribute read restrictions. Broker grants, approval policy and confirm_mutations are unchanged. Installed binaries and running application bridges were not modified or restarted. No new dependency or protocol change. Reverting the mask change restores the previous false-positive behavior.
Regression fixture
Eight tests exercise real temporary-file ACLs via the public executable/private-file verifiers, using an untrusted Everyone principal with explicit grants or grants inherited from a protected temporary parent. They cover executable R/RX/RA/REA/RC/S acceptance, individual and aggregate mutation denial, private-file RC/S acceptance, and private data/attribute/EA read and mutation denial. The Windows workflow runs these fixtures before the broader runtime checks on x64 and ARM64.