Repository navigation
§11: Resource scope checks MUST use the resolved form of the identifier (closes the path-traversal gap from #29) #243
Replies: 5 comments
|
The direction looks right to me, and R1 to R3 are things a Guardian can do from the identifier alone. R4 is where I think the text needs one more fact. Nothing in ACS gives a Guardian a view of the Observed Agent's filesystem. The fact exists on the Observed Agent's host, before dispatch, and it is lost if the framework does not send it, which is the proposal form's test for putting something on the wire. The framework would resolve the identifier before the hook fires and send the resolved form beside the argument, filled by deterministic framework code as provenance is, never by the model. #232 proposes an optional resource URI on On your second question, I would take DEFER for the unresolvable case. Its One limit worth stating in the text: the path can change between the check and the dispatch, for example a link swapped in between. These rules narrow the gap between what the policy reads and where the action lands; they do not close that race. Avp9. |
|
Thanks, @avp9-nexus. You're right on R4, and it also corrects a line in my post: "nothing new goes on the wire" doesn't hold for filesystem identifiers. The fact R4 needs exists only on the Observed Agent's host, so it has to travel. Revised R4
R1 to R3 stay as written, since they only need the identifier. Wire slot. I'll align with #232 rather than add a second shape: the resolved form rides its optional resource URI on DENY or DEFER. Agreed on DEFER. With Stated limit (non-normative note).
Vector changes
Case 6 is the one that actually needs the new slot: the submitted identifier passes R1 to R3 and only the resolved form shows it leaves the scope. The Windows question (R1 normalization for Unless there's an objection, I'll open the |
|
Agreed with the revised R4, and the dispatch sentence in the note is a good addition. One interaction to check before the issue. §6 bounds cascading deferrals per session, and §9.2 counts a substituted DEFER toward that limit; an R4 DEFER would presumably count the same way. A framework that never supplies the resolved form would then turn every filesystem scope decision into a DEFER until the bound is reached. §9.2 already draws the line for approvers: DEFER when the issue might resolve, DENY with a reason code when no recovery path exists, the Guardian knowing the client's capability by deployment-defined means. The same split would fit R4: DEFER Avp9. |
|
Good catch, @avp9-nexus. Checked against the text: §6 bounds cascading deferrals per session, and §9.2 item 1 counts a substituted DEFER toward that limit, so a framework that never sends the resolved form would burn through the bound on filesystem scope decisions alone. A DEFER there also promises a recovery that can't come. Taking the §9.2 split as you suggest. R4, final form for the issue:
The audit-event line is borrowed from §9.2 for the same reason it exists there: a deployment running without resolved forms should show up in the record, not only in the denial rate. Vector changes
5a and 5b share the request and differ only in deployment configuration, which is the point: the verdict depends on whether a recovery path exists, not on the identifier. I'll open the |
|
Opened as #295 with the final R1 to R4, the note, and vectors 1 to 6 (5 split into 5a and 5b). Filed as deferred and tracked, since the vectors belong to #53. Thanks again, @avp9-nexus. |
Uh oh!
There was an error while loading. Please reload this page.
Context
In #29 I reported a traversal case: a resource identifier such as
posix:///workspace/123/../456passes a prefix check against a scope ofposix:///workspace/123/while it actually resolves outside that scope.@astrogilda recorded it in probityai/agent-evidence-vectors#60, but it sits in the
awaitingTextlist: the spec pinned by the corpus (9d4a9da) fixes the URI form of a resource identifier (§11, "Resource identifiers MUST use URI form") with no requirement to check its resolved form against a granted scope. Without a normative sentence, the negative vector, its positive control and the unresolvable case cannot become corpus members.This Discussion proposes that sentence, as the first step before a
type:proposalissue and a PR againstintegration. I understand negative conformance vectors are deferred to v0.2.0 (#53); the aim here is to get the normative text agreed so the vectors are ready when that work lands.Proposed normative text (new §11.x, "Resource scope matching")
Nothing new goes on the wire: the two values ride the existing DENY
reason_codeselement (§6), and the §17.1 error registry stays unchanged, since these are policy outcomes, not protocol errors.Vectors this text makes citable
Scope for all cases:
posix:///workspace/123/posix:///workspace/123/../456/secrets.txtresource_out_of_scopeposix:///workspace/123/./docs/../notes.txt/workspace/123/notes.txt)posix:///workspace/123/%2e%2e/456resource_out_of_scopeposix:///workspace/1234/file.txtresource_out_of_scopeposix:///workspace/123/link/datawherelinkis a symlink the Guardian cannot resolveresource_unresolvableor DEFERinsufficient_context, never ALLOWCases 1 and 2 are the negative vector and positive control from #29; case 5 is the unresolvable verdict.
Open questions
file:///C:/..., backslashes, case-insensitive drive letters), or should that be left to a platform profile?If the direction looks right, I'll open the
type:proposalissue linking this thread and follow with a PR againstintegration.cc @astrogilda — related: #29, #53, probityai/agent-evidence-vectors#60
All reactions