Four checks, and the one path left as typed
brig is an agent sandbox: it runs an AI agent against a project directory the operator names. Per Endor Labs' write-up, brig guarded its own workspace with four checks, but it passed the operator-named project path through to the virtual machine monitor exactly as it had been typed, unresolved. The agent has read-write access to that project. So the agent can replace a subdirectory inside its own project with a symlink to somewhere else, and the next time a run is narrowed to that subdirectory, the monitor follows the link on the host and mounts whatever it points at, read-write.
The four checks were aimed at brig's own files. The project path was treated as the operator's, and therefore as safe. That is a confused deputy: the guard trusted a value that the sandboxed party could later change.
What became reachable
Endor Labs confirmed the traversal on macOS under a microVM and on Linux with nerdctl and containerd. Once the link resolved on the host, a run could reach the operator's ~/.ssh, ~/.aws, and gh hosts.yml, and the guest home of every other session. Writing to authorized_keys would be code execution as the host user. It was classified CWE-59, improper link resolution before file access, with a CVSS 3.1 score of 8.2, and the researchers were explicit that this was not a hypervisor or guest-kernel escape. It was a boundary gap between the operator's path and the mount.
A human configured that path, and that is what made it trusted; an agent with write access used precisely that trust to change it underneath the guard.
Fixed in 0.3.0
The advisory is GHSA-wp6x-29qx-fpr7, also tracked as ENDOR-VUL-2026-1809, and the fix landed in brig 0.3.0. Endor Labs credited coordinated disclosure with the vendor. Peyton Kennedy wrote the analysis, published 28 September 2026.
The lesson reaches past brig: a path that a privileged component trusts because a human typed it is still a path the sandboxed agent may be able to change before the component resolves it.
Sources
Research
Thread
- Relates to: A symlink led the sandbox out
Both are a symlink that walks a sandbox out to host paths it was never granted; there the mount layer followed it, here the operator-supplied project path did.
- Related to: Above 256 kilobytes, the preview pane read the disk
Both turn on the harness's own file access reaching credentials the user never exposed to it. There a symlink in a dev tool opened the door; here a size threshold in the preview pane did.
- Relates to: Fine when checked, a symlink when written
Same primitive of a swap between check and use, but a different mechanism: a race window there, an unresolved operator path here.
Semantic neighbors
- Fine when checked, a symlink when written78% similar
- A symlink led the sandbox out78% similar
- Approving a settings edit and authorizing an SSH key77% similar
