Repository navigation
Fix quarantine layout provenance escapes - #53
Closed
cursor[bot] wants to merge 1 commit into
Closed
cursor[bot] wants to merge 1 commit into
cursor[bot] wants to merge 1 commit into
Conversation
Co-authored-by: Andre Schu <[email protected]>
1 of 3 tasks
Owner
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.
Bug and impact
SCP_QUARANTINE_DIR/registry_fetchlayout could be followed by quarantine list, purge, retention, and eviction code, exposing and deleting files outside the quarantine root.scp_apply_registry_quarantineaccepted registry paths whenregistry_fetchresolved back to the quarantine root, and could also accept a forged.jsonfile as both payload and sidecar, bypassing the intended registry-fetch provenance boundary.scp.antigen_mcpto crash on import because this code uses the MCP 1.xmcp.server.fastmcpAPI.Root cause
Layout enumeration and write setup used
Path.is_dir(), which follows symlinks, and the apply guard only checked resolved containment without requiring a real, strictregistry_fetch/child or a distinct.txtpayload.Fix
registry_fetch/directory strictly below the quarantine root and a.txtpayload path.mcp>=1.2.0,<2.0.0.Validation
registry_fetch -> .apply rejection,.jsonself-sidecar rejection, and MCP dependency bounding.PYTHONPATH=src python3 -m pytest tests/test_security_regressions.py -q-> 34 passed.PYTHONPATH=src python3 -m pytest tests/test_security_regressions.py tests/test_registry_ssot.py tests/test_registry_fetch_r4.py tests/test_registry_load_order_r5.py tests/test_appsec_antigen_mcp_gates.py -q-> 80 passed.PYTHONPATH=src python3 -m compileall -q src/scpandgit diff --checkpassed.