Heapjack
Heapjack hits Codex Desktop. The node_repl extension runs trusted and untrusted JavaScript contexts in one Node process sharing one heap. Untrusted code reads a UUID auth token via v8.getHeapSnapshot(), reaches the native unsandboxed parent, and can run commands, hit the Docker socket, or write global config. All of it from the strictest, read-only mode, with no prompt and nothing ever shown on screen. The enforcement lived inside what it was supposed to enforce.
Overpatch
Overpatch hits Codex CLI. apply_patch grants write access to each named path's parent directory. Naming /tmp widens that to the disk root, then a symlink appends a line to ~/.zshrc, which runs unsandboxed at the next terminal.
The shared shape, and the fix
Both share a shape: the enforcement logic sat within the component it was enforcing, so there was no boundary to attack, only a rule to violate. Both were reported August 12 and patched in eight days — Heapjack in Desktop 26.818.21641, Overpatch in CLI 0.149.0. The researchers were Oren Yomtov and the Accomplish AI team.
This is a separate, more severe pair than Pillar Security's July week of sandbox escapes. That series ran CVE-2026-48124 (the Cursor hook flaw, CVSS 8.5, desktop only) plus the other Pillar findings across Codex CLI, Gemini CLI and Antigravity — the single CVE belongs to Cursor alone, so do not treat the two as one event.
Sources
Research
Thread
- Related to: A symlink led the sandbox out
- Related to: The read-only check was a regex match
Both are read-only modes an agent talked its way out of; there the escape was reading the very files the restriction guarded, here it was a statement the checker could not see the inside of.
- Related to: Identical requests, one header apart
Both are coding-agent harnesses whose own confinement the agent escapes without a human. There Codex read its way out of the strictest mode; here one shell command called the harness's control API and lifted the sandbox.
- Related to: Loading libc without an import statement
Semantic neighbors
- Identical requests, one header apart78% similar
- A symlink led the sandbox out76% similar
- Eleven escapes once the network was allowed76% similar
