Repository navigation
fix(security): confine approved writes and bound retained refusals - #120
Merged
Merged
Conversation
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.
Scope and source
Fixes SECNET-01 and SECNET-05 from the network security review, plus S3/S5 workflow changes supplied by the security workflow owners. Based on origin/main d868d9c. Draft only; no merge, deployment, endpoint probing, GPU or live-service changes.
SECNET-01: approved workspace write confinement
nice -n 19 cargo test --offline -j2 --test approval approved_write_rejectsfrom adapters/aien exited 101: dangling symlink created the outside file, and a link swapped after approval overwrote outsideoriginalwithmust stay inside.SECNET-05: bounded retained model-call state
Local offline verification actually run
All builds use nice -n 19 and -j2; no endpoint or device work.
nice -n 19 cargo fmt --allin rust and adapter workspaces completed.nice -n 19 cargo test --offline -j2 -p interplane-crossveilfrom rust: unit test 1 passed; pipeline 21 passed; refusal_exposure 9 passed; session_limits 20 passed; doc-tests 0 tests. Exit 0.nice -n 19 cargo test --offline -j2 --test approval --test pipelinefrom adapters/aien: approval 19 passed; pipeline 14 passed. Exit 0. Pinned aegis dependency warned that Mojo was absent and skipped its SIMD build; these tests exercised the actual Rust filesystem/approval paths, not SIMD/model qualification.S3: isolate the pinned verifier build (workflow-owner evidence)
Move pinned aien-test source outside the candidate before Cargo runs, use an explicit trusted target directory, and cache registry/git dependencies only under a new isolated-v1 key. No target executable cache is reused.
Offline shell replay on cargo 1.98.1 / rustc 1.98.1, dependency-free aien-test fixture, both checks/alpha jobs: candidate .cargo/config.toml points build.rustc-wrapper at a marker-writing exit-87 shell probe and redirects build.target-dir. Before exact workflow build shell: cargo exit 101, marker created, no installed binary. After exact move/build shell: exit 0, marker absent, installed fixture prints TRUSTED-FIXTURE, output exists only at RUNNER_TEMP/aien-test-target, candidate poison-target absent. Negative: same probe config inside trusted source .cargo/config.toml: exit 101, marker created, no installed binary. CARGO_NET_OFFLINE=true, CARGO_BUILD_JOBS=2, nice -n19. Fixture only, not a full pinned verifier build or Actions/Alpha qualification.
Matching pending guide update: aien-dev/omega-harness#19 . The SECNET implementation changes do not alter Omega compiler/language/host-word guidance.
S5: manual qualification inputs are shell data (workflow-owner evidence)
Bind dispatch endpoint/model through step environment variables and quoted argv rather than interpolating them into shell source. Set contents:read and disable persisted checkout credentials; the API key remains step-local.
Offline PyYAML 6.0.1/exact-shell replay with a cargo stub (no build or endpoint): ordinary argv before/after passed. Command-substitution endpoint and model inputs executed the marker before; after they remained literal argv and no marker ran. Quote, semicolon, apostrophe, newline and glob inputs remained literal. A negative mutant reintroducing model interpolation was detected. No workflow dispatch or self-hosted runner execution was performed.