Names Are Not Objects: Object-Bound Confinement for Compromised AI Coding Agents
cs.CR
Submitted: 2026-10-10
Updated: 2026-10-10
Comments: 21 pages, 4 figures. Code and data: https://github.com/dcommey/ztac
Code: https://github.com/github/copilot-cli
License: http://creativecommons.org/licenses/by/4.0/
The gist: Coding agents read repositories and web pages that anyone can write, and then act with their user's authority.
Abstract
Coding agents read repositories and web pages that anyone can write, and then act with their user's authority. Prompt-injection defenses make it less likely that the model is steered but do not prevent it, so the system around the model must contain an agent that is already compromised. Many exploits against deployed coding agents share one cause: a check approves a name, such as a path, an argument vector, or a directory, and a later step maps that name to a different object: the file behind a symlink, the behavior an option selects, or a repository that git discovers on its own. We present Zero-Trust Agent Cells (ZTAC). A cell runs the agent in a kernel sandbox whose only route to files, programs, and the network is a socket to a broker. The broker resolves each request to the object it will act on, decides on that object, and checks at use that it is acting on the object it authorized. Programs that the broker starts run in a sandbox compiled from the same policy, and approvals are bound to the resolved object and can be used once. Our macOS prototype has 3.2k lines of trusted Rust code, excluding dependencies. We evaluate it against 74 attacks with ground-truth oracles, including replays of 10 publicly disclosed incidents. A tool allowlist loses 66 of them, and an allowlist combined with the kind of command sandbox that deployed agents use loses 56. ZTAC loses 2, both of which encode a secret into traffic to an allowed endpoint, and holds 14 for review. It completes 43 of 46 benign operations, with 8 approval prompts, and 4 of 7 workflows. A no-op brokered request has a median latency of 4.0 ms, and the spawned programs we measured take 8.5 ms to 18.4 ms longer than without ZTAC.
Sources
- Design Patterns for Securing LLM Agents against Prompt Injections
- Systems Security Foundations for Agentic Computing
- Securing AI Agents with Information-Flow Control
- Defeating Prompt Injections by Design
- Defending Against Indirect Prompt Injection Attacks With Spotlighting
- Llama Guard: LLM-based Input-Output Safeguard for Human-AI Conversations
- Taming Various Privilege Escalation in LLM-Based Agent Systems: A Mandatory Access Control Framework
- Mind the Gap: Time-of-Check to Time-of-Use Vulnerabilities in LLM-Enabled Agents
- The Attacker Moves Second: Stronger Adaptive Attacks Bypass Defenses Against Llm Jailbreaks and Prompt Injections
- The Balkanization of Execution-Security Research for AI Coding Agents: Isolation, Access Control, and Time-of-Check-to-Time-of-Use Vulnerabilities
- Lingering Authority: Revocable Resource-and-Effect Capabilities for Coding Agents
- AC4A: Access Control for Agents
- Progent: Securing AI Agents with Privilege Control
- An AI Agent Execution Environment to Safeguard User Data
- The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions
- Sandlock: Confining AI Agent Code with Unprivileged Linux Primitives
- AgentSpec: Customizable Runtime Enforcement for Safe and Reliable LLM Agents
- Aligning Provenance with Authorization: A Dual-Graph Defense for LLM Agents
- Approval Laundering: Systematizing Approval--Execution Binding Failures in AI Coding-Agent Harnesses
- Agent libOS: A Runtime Substrate for Capability-Controlled Self-Evolving LLM Agents
Related papers
- SoK: AI-Augmented Binary Reversing
- Relaxed Sender Anonymity for CBDC Interbank Settlement: A Zero-Knowledge Approach on Permissioned EVM
- Calibration-Family Overfit: Why Trusted Sabotage Monitors Don't Transfer Across Lineages
- Efficient Fuzzy PSI under One-Sided Assumptions
- Sealing the Audit-Runtime Gap for LLM Skills
- Token Composition: A Graph Based on EVM Logs