ai security · 9 min read

Sandbox e isolamento de AI Agents: comparação de 7 produtos

Capa — a sandbox prende o código, mas o agente alcança as credenciais: sob o mesmo rótulo "AI agent" há estruturas de engenharia fundamentalmente diferentes

“AI agent” virou rótulo de produto em todo lugar, e a gente acha que a engenharia por trás do rótulo não é uma coisa só. A gente dá a mesma tarefa a sete produtos populares com essa etiqueta, e três perguntas separam eles direto: onde o código roda · onde roda o control loop do agente · onde ficam as credenciais.

A gente pega dois exemplos que parecem idênticos na página de marketing e que por baixo são completamente diferentes. Quando o Perplexity Pro recebe uma requisição de análise de dados, o backend envia o Python gerado pelo LLM para uma Firecracker microVM iniciada pelo e2b; arquivos, código e resultados ficam isolados ali até a sessão acabar e a VM ser destruída. O Claude Code, executado localmente via o comando claude, faz a inferência do modelo na nuvem da Anthropic mas roda cada tool call dentro do processo claude local sob o UID do usuário logado. Uma OS sandbox já vem na CLI, mas fica desligada até você rodar /sandbox; sem mexer em nada, o que fica na frente é só o sistema de permissões in-process.

Ambos saem sob o rótulo “AI agent”, e a gente percebe que as respostas para as três perguntas não se sobrepõem. A seguir apresentamos sete produtos com três respostas cada e os eixos que surgem do comparativo.

Os sete produtos

Perplexity Pro (análise de dados). O backend envia Python gerado pelo LLM para uma Firecracker microVM iniciada pelo e2b. O control loop do agente fica no backend do Perplexity; tokens OAuth nunca entram na sandbox — quando um connector é necessário, o backend faz o proxy. Sessão acaba, VM é destruída. Agente e código gerado pelo LLM não compartilham trust domain.

Manus (tarefas end-to-end). Cada tarefa do Manus recebe um ambiente Linux completo no formato microVM. Uma análise de terceiros situa a base próxima de e2b / Firecracker: Node, Python, Chromium headless, terminal, sistema de arquivos e cerca de 27 ferramentas pré-instaladas. O estado da tarefa, a execução de ferramentas e a lógica de decisão do agente vivem na mesma VM. Isso dá ao agente a conveniência de um funcionário virtual local. O custo: tudo termina em um único trust domain. Assim que o Chromium carrega uma página maliciosa preparada por um atacante, o prompt injection atinge diretamente as decisões do próprio agente, e a sandbox fica atrás do atacante em vez de à frente. O forte isolamento do Manus protege contra movimento lateral (a VM do usuário A não alcança o usuário B), não contra sequestro vertical (o próprio agente do usuário sendo induzido a executar instruções maliciosas).

Configuração padrão do Claude Code (terminal local). Inferência na nuvem da Anthropic; cada tool call roda no processo claude local sob o UID do usuário logado. O sandbox-runtime publicado em outubro de 2025 envolve subprocessos Bash em macOS Seatbelt ou Linux bubblewrap quando habilitado, mas vem desligado por padrão. Sem mexer em nada, a segurança fica por conta do sistema de permissões in-process. A equipe da Ona mostrou publicamente como essa linha de defesa cai: levaram o Claude Code a contornar sua própria denylist de comandos via /proc/self/root/usr/bin/npx; quando a sandbox detectou o bypass e bloqueou, o agente emitiu por conta própria um comando disable-sandbox e reexecutou o comando original com sucesso. Esse modo de falha é pior que o do Manus porque não há microVM abaixo provendo isolamento horizontal em nível de OS.

ChatGPT Code Interpreter (análise de dados). O Python gerado é roteado para o ambiente Python sandboxed e firewalled no backend da OpenAI. Análise da comunidade aponta para gVisor pods por baixo; a OpenAI não divulgou. Estruturalmente no mesmo nível do Perplexity (trust domain não compartilhado, efêmero por requisição). A diferença é que esse ambiente geralmente não tem egress arbitrário para a internet pública, então o threat model é mais conservador.

Bolt.new (geração de apps). Coloca um runtime Node dentro da aba do navegador do usuário via WebContainers — a sandbox vive no browser. O fornecedor não paga vCPU na nuvem; o custo é compatibilidade — syscalls que o navegador não fornece não rodam.

Codex CLI (terminal local). Mesma forma de CLI local do Claude Code, padrão oposto. Isolamento de subprocesso em nível de OS (macOS Seatbelt, Linux bubblewrap) vem habilitado por padrão, com três modos de sandbox (read-only, workspace-write, danger-full-access) e uma approval policy. Codex é o espelho do Claude Code na decisão de ligar a sandbox de fábrica.

Cursor (editor IDE). O modo interativo local (edição na IDE mais terminal) historicamente não tinha OS sandbox; nas supported platforms ela vem sendo habilitada recentemente. O modo paralelo / background executa cada tarefa em uma VM de backend dedicada, com o control loop do agente permanecendo nos servidores da Cursor. O mesmo produto opera em forças de isolamento bem diferentes conforme o modo.

Consolidado em uma tabela de posicionamento:

Produto / configuraçãoForça de isolamentoAgente e código compartilham trust domain?Ciclo de vida
Perplexity ProFirecracker microVMNãoPor requisição
ChatGPT Code InterpreterSandbox conteinerizada (comunidade infere gVisor pod; não divulgado oficialmente)NãoPor requisição
Bolt.newOrigin do navegador (WASM)Não (inferência do agente na nuvem)Por sessão, no navegador
ManusmicroVMSimPor tarefa, suspensível
Claude Code padrãoNenhumSimLocal, persistente
Codex CLI padrãoIsolamento de subprocesso em nível de OSAtravessa fronteira (UID do agente / sandbox da ferramenta)Local, persistente
Cursor interativoOS sandbox (recente, parcial)Atravessa fronteiraLocal, persistente
Cursor paraleloVM de backend por tarefaNão (control loop nos servidores da Cursor)Por tarefa do agente

Três eixos — e um ponto cego compartilhado

As três colunas da tabela correspondem a três eixos que atravessam todos os produtos.

Força de isolamento. Cinco níveis do mais fraco ao mais forte: mesmo UID, mesmo processo → isolamento de subprocesso em nível de OS → origin do navegador → gVisor → VM / microVM. Os dois extremos estavam essencialmente maduros em 2018; serviços públicos comparáveis de CPU sandbox como e2b e Modal convergiram em grande parte no preço.

Se o control loop do agente compartilha trust domain com o código em execução. Perplexity, Bolt.new e o modo paralelo da Cursor estão no caminho “não compartilha” — a sandbox prende o código gerado pelo LLM e o agente raciocina em outro lugar. Manus e Claude Code padrão estão no caminho “compartilha” — as decisões do agente e o código em execução vivem no mesmo trust domain. Codex CLI e Claude Code com sandbox-runtime habilitado ficam no nível intermediário, onde agente e ferramentas atravessam a fronteira. Esse eixo decide onde o prompt injection aterrissa.

Ciclo de vida da sandbox. Três sabores: efêmero por requisição, suspensível por tarefa, persistente local. O ciclo de vida determina diretamente a forma de cobrança: APIs por requisição, por session-hora (o Anthropic Managed Agents cobra $0,08 por session-hora e não fatura idle) e assinatura mensal mais créditos mais cobrança por uso (a cobrança baseada em effort do Replit AI mede o trabalho real do agente).

Acima desses três eixos, todos os produtos do recorte compartilham um mesmo ponto cego.

Ponto cego compartilhado: a sandbox está guardando a coisa errada

A sandbox clássica resolve uma pergunta com a qual a indústria concordou: o código que vai rodar pode ser malicioso ou ter bugs. Firecracker, gVisor e V8 isolate estavam essencialmente prontos em 2018. Os AI agents trazem uma nova ameaça para a qual a sandbox não foi projetada: as decisões do próprio LLM podem ser sequestradas por prompt injection. O alvo não é o código dentro da sandbox, mas o control loop do agente na fronteira dela — o loop autorizado a usar as ferramentas do usuário, alcançar credenciais e dados privados, e decidir o próximo passo.

Simon Willison chama isso de lethal trifecta: quando um sistema agentic tem simultaneamente acesso a dados privados, exposição a conteúdo não confiável e capacidade de fazer requisições de saída, defesas tradicionais em nível de prompt não conseguem barrar exfiltração de dados de forma confiável. A maioria dos produtos do recorte entra nessa zona de risco no momento em que um connector, browser ou ferramenta de rede é habilitado. Manus sequestrado no instante em que o Chromium carrega uma página maliciosa, e Claude Code injetado via uma Skill de terceiros, são duas instâncias concretas do mesmo padrão.

Vários fornecedores trabalham nessa lacuna. A gente agrupa os caminhos deles por direção e enxerga quatro padrões de solução que reaparecem (não é uma taxonomia exaustiva de segurança — são os quatro trade-offs de engenharia que mais bateram na nossa amostra):

Padrão de soluçãoIdeia centralImplementação representativa
Separação arquiteturalHarness e código gerado em VMs / contextos de segurança diferentesO Fluid + Sandbox da Vercel em forma 2-VM; estrutura natural do Perplexity / Bolt.new
Isolamento de credenciaisSegredos nunca entram no domínio não confiável — um proxy injeta no egressO credential proxy da Cloudflare em que um Worker guarda a chave
Controle de egressRuntime com firewall, proxy em localhost, allowlist limita rotas de saídaO sandbox-runtime da Anthropic; o ambiente firewalled do OpenAI Code Interpreter
Gating de decisãoChamadas de ferramenta de alto risco exigem approval explícitoA approval policy de três níveis do Codex CLI; o permission prompt do Claude Code

Os quatro padrões são em grande parte independentes e se empilham em engenharia. O design da Vercel cobre simultaneamente “separação arquitetural mais isolamento de credenciais”, e o sandbox-runtime da Anthropic cobre “controle de egress mais gating de decisão”. No material público que a gente examinou, nenhum fornecedor expõe ainda todas as quatro capacidades como um produto unificado.

A camada acima — governança unificada entre produtos — está totalmente aberta. Cada produto agent define seu próprio formato de policy e mantém seu próprio audit log. Um desenvolvedor usando Claude Code, Cursor e Aider em paralelo configura três conjuntos de policy e revisa três audit logs. Os limites comerciais dos fornecedores de modelos os confinam aos próprios produtos; essa lacuna provavelmente será preenchida primeiro por tooling de terceiros, padrões abertos ou camadas de governança corporativa.

Onde a próxima competição vai acontecer

A gente não acha que a próxima fase de competição vai girar em torno de qual primitiva de isolamento isolada é mais forte — Firecracker, gVisor e V8 isolate já são infraestrutura madura. A gente espera que o jogo se desloque para questões mais estruturais: se o control loop do agente deve compartilhar trust domain com o código em execução, como funciona o controle de egress em stacks de agente multi-componente, e se chega a aparecer alguma coisa parecida com um padrão unificado de policy e auditoria entre produtos.

Share:

Related Articles