Repository navigation
Conversation
Signed-off-by: chaksaray <chaksaray@gmail.com>
6 of 12 tasks
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.
Closes #335.
Adds AVE-2026-00089, Model-supplied sandbox boundary: a coding agent's sandbox computes its writable scope from a value the model supplies in a tool call (a terminal command's working directory) instead of from the session's own root. Content the model reads can therefore widen the sandbox to any location the process can write, such as the sandbox's own helper binary or the user's shell startup files. MEDIUM, AIVSS 6.6.
One commit, following the 00087 precedent (4f3173b): the record, both fixtures, CHANGELOG, README and the dist pair.
Sources read (all opened directly)
cwdas the sandbox's writable root, including paths outside of the folder where the user started their session." High, CVSS 4.0 8.6, CWE-20, affected 0.2.0 to 0.38.0, fixed 0.39.0 (IDE extension 0.4.12).ExecParams.cwdfed both the spawn andget_writable_roots_with_cwd(cwd)inseatbelt.rsandlandlock.rs. After: policy fromsandbox_cwd: &turn_context.cwd, model value only ascommand_cwd. Testsandbox_distinguishes_command_and_policy_cwds().working_directoryparameter, which could cause the sandbox to include writable paths outside the intended workspace." Critical, fixed in 3.0.cursorsandbox.The vendor dispute, from Cato's timeline: reported February 19; rejected February 23 because "Cursor's threat model does not account for MCP server misuse"; reopened after escalation on February 26; fixed in Cursor 3.0 (April 2); CVEs assigned June 5.
Gate A: what is in the class and what is not
The class is the model supplying the value that defines or widens the policy boundary. Codex CVE-2025-59532 and Cursor CVE-2026-50548 are instances, each with a vendor advisory and a first-party source.
Kept out of the fingerprint and cited as related, because in both the boundary is fixed and a path check against it fails, which makes them path-validation failures rather than a boundary the model sets:
Distinctness (Gate C)
Compared field by field (fingerprint,
provenance_vector,security_boundarywhere present) with 00053, 00054, 00052, 00011, 00068, 00048 and 00088 (PR #331), plus the token-overlap top five (00052, 00053, 00068, 00048, 00022).Q6, including the doubt
Replace the LLM with a deterministic program and the flaw, in the form that matters, does not survive. A conventional program does not take its sandbox boundary from the output of the component the sandbox constrains; in Cato's words, "Traditionally, a remote attacker cannot control the working directory of a sandboxed operation."
The strongest counterargument is that this is an ordinary input-validation bug: the Advisory Database files it as CWE-20, and a deterministic sandbox that took its root from an untrusted request would share the flaw. My answer: the structural error can exist without a model, but the input becomes attacker-reachable only because a model generates it, so the party being constrained chooses the boundary. Both fixes separate model-supplied execution parameters from user-established policy, which supports the agentic framing.
Classified A, not E. Discussion #234 has no recorded decision, and its proposed test ("no model reasoning in the trigger") would not exclude this class.
Scoring
cvss_base8.6 from the Codex advisory's own vector,CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. That is the most conservative vendor reading: Cato scores 9.8 under CVSS 3.1, and Cursor rates its instance Critical.~/.zshrc, LaunchAgents).aars6.0,thm0.90,mitigation_factor1: ((8.6 + 6.0) / 2) x 0.9 x 1 = 6.57, so 6.6 MEDIUM, confirmed byvalidate_records.py.Framework mappings (each read from its primary source)
owasp_mcpMCP05 at commit 165fe0f: "Agent outputs are not constrained to allowlists of permitted commands, arguments, or file paths". MCP02 and MCP07 were read and rejected.owasp_asiASI05: names "sandbox escape". ASI02 was read and rejected by its own scope ("operates within its authorized privileges"; code execution is routed to ASI05).mitre_atlasAML.T0105 (Escape to Host), live ATLAS.yaml v5.6.0. AML.T0053 was considered and left out as the generic delivery step.nist_ai_rmf[]: checked, no fit.Verified
validate_records.pypasses (88 valid),pytest523 passed, andcheck_fixtures.py,check_framework_sources.py --strict --only,check_vulnerability_taxonomy.py --strict --only, the confidence ratchet (1 record changed, passes) andcheck_terms_sync.pyall pass.dist/ave-records-latest.jsonequalsrecords/for all 88 records.verification_basiswas stamped by the script (artifact_reconstructed). The 8 unrelated canonical records it also stamps were reverted, as in feat: AVE-2026-00088, Sandbox Side-Effect Trust Handoff #331.Could not verify
researcher_urlpoints at Cato's post as the lead credit's write-up.Judgment calls for the maintainer
thm. As in feat: AVE-2026-00088, Sandbox Side-Effect Trust Handoff #331, 0.90 follows CONTRIBUTING's scale ("PoC exists"). At thm 1 this record would be 7.3 HIGH.cvss_base8.6 uses the Codex vector, including the vendor's PR:L, which is arguably generous to the defender for an indirect-injection attacker. With PR:N the score would rise.entry_classmodel_generated, reused as in 00056 and 00088 because the payload is a value the model produces.develop's base. Whichever merges second needs a small rebase: the total goes to 89, MEDIUM to 66 once both records land, and docs: correct AVE-2026-00044's README row and the Stats counts, and check the README against records/ #332's 64 MEDIUM becomes 65 or 66. CHANGELOG entries also stack at the top of### Added, anddist/needs rebuilding after a rebase.🤖 Generated with Claude Code