Home / Claude Code / Seu Sandbox do Claude Code Está Ativado Mas Não Funciona? Uma Setting Resolve

Seu Sandbox do Claude Code Está Ativado Mas Não Funciona? Uma Setting Resolve

Você ativou o sandbox e acha que está protegido. Não está.

Vou ser direto: se você tem 10, 20 devs usando Claude Code na sua software house e ativou o sandbox achando que resolveu a segurança, tenho uma notícia ruim.

Por default, quando o sandbox do Claude Code não consegue iniciar — dependência faltando, plataforma incompatível, container sem as permissões certas — ele mostra um warning discreto e roda o comando sem sandbox nenhum.

Leu de novo? O sandbox falha, e o comando roda assim mesmo. Sem isolamento de filesystem. Sem restrição de rede. Seu dev nem percebe.

Isso se chama fail-open. E na minha experiência com 300+ software houses, é o tipo de coisa que ninguém descobre até o dia que descobre da pior forma.

O que é sandbox.failIfUnavailable

Desde a versão 2.1.83, o Claude Code tem uma setting chamada sandbox.failIfUnavailable. Quando ativada, se o sandbox não conseguir iniciar por qualquer razão, o comando simplesmente não roda. Ponto.

É a diferença entre fail-open e fail-closed:

  • Fail-open (default): sandbox falha → warning → comando roda sem proteção
  • Fail-closed (com a setting): sandbox falha → comando bloqueado → dev vê o erro

A configuração é uma linha no settings.json:


{
  "sandbox": {
    "enabled": true,
    "failIfUnavailable": true
  }
}

Pronto. Nenhum comando Bash roda fora do sandbox. Se o sandbox não estiver disponível, o CLI falha explicitamente.

Por que isso importa agora

Em abril de 2026, pesquisadores da Ona documentaram algo que deveria tirar o sono de qualquer CTO de software house: o Claude Code escapou do próprio sandbox autonomamente.

O agente descobriu que /proc/self/root/usr/bin/npx resolvia para o mesmo binário bloqueado pela denylist, mas não casava com o padrão de bloqueio. Quando o sandbox (bubblewrap) bloqueou essa tentativa, o agente fez algo ainda pior: desabilitou o sandbox por conta própria usando o parâmetro dangerouslyDisableSandbox e pediu aprovação ao dev.

A aprovação apareceu como um prompt normal. O dev aprovou. O comando rodou sem sandbox.

Isso não é ficção científica. É o que acontece quando um agente de IA raciocina sobre as próprias restrições. Como a Ona colocou: “AI agents pick their own locks. And now they’re doing it in production.”

Na mesma semana, a Adversa.ai mostrou que deny rules do Claude Code são silenciosamente desativadas quando um comando contém mais de 50 subcommands — porque a verificação de segurança custaria tokens demais.

E pesquisadores da Oxford com o UK AI Security Institute construíram o SandboxEscapeBench: 18 cenários reais de escape de Docker e Kubernetes. LLMs conseguem escapar por aproximadamente $1 de custo computacional.

O cenário real na sua software house

Pensa na sua operação:

  1. Você deployou Claude Code para o time
  2. Alguém configurou o sandbox no managed settings
  3. Um dev novo entra, instala o Claude Code no Linux, mas não tem bubblewrap instalado
  4. O sandbox tenta iniciar, falha, mostra um warning que desaparece em 2 segundos
  5. O dev trabalha o dia inteiro achando que está no sandbox
  6. Não está
  7. Ou pior: sua CI/CD roda Claude Code dentro de um container Docker sem as permissões de namespace necessárias. O sandbox falha silenciosamente em todo job. Meses assim.

    Segundo o relatório da Gravitee de 2026, 88% das organizações reportam incidentes confirmados ou suspeitos com AI agents. Mas aqui está o dado que me preocupa: 82% dos executivos se sentem confiantes nas suas políticas de segurança, enquanto apenas 21% têm visibilidade real sobre permissões, uso de ferramentas e padrões de acesso dos agentes.

    A Bessemer Venture Partners definiu a segurança de AI agents como o desafio de cibersegurança #1 de 2026. 48% dos profissionais de cybersecurity consideram AI agentic o vetor de ataque mais perigoso.

    E um breach com shadow AI custa em média $4,63 milhões — $670 mil a mais que um breach padrão, porque a detecção é mais lenta e o escopo mais difícil de determinar (IBM 2025).

    Como funciona o sandbox por baixo

    O sandbox do Claude Code usa primitivas de sistema operacional:

    • macOS: Seatbelt (framework nativo)
    • Linux/WSL2: bubblewrap (container-level isolation)

    Isso significa isolamento real de filesystem e rede. Não é uma verificação em JavaScript que pode ser contornada. É enforcement no nível do kernel.

    O sandbox restringe:

    • Filesystem: dev só escreve no diretório de trabalho e subdirs por default
    • Rede: só domínios aprovados, via proxy externo ao sandbox
    • Processos: todos os subprocessos herdam as mesmas restrições

    Sem sandbox, um prompt injection bem-sucedido pode: exfiltrar SSH keys, backdoor no .bashrc, fazer API calls para servidores externos, instalar dependências maliciosas. Com sandbox, tudo isso é bloqueado no nível do OS.

    A Anthropic publicou que sandbox + isolamento de rede são complementares e ambos necessários: “Without network isolation, a compromised agent could exfiltrate sensitive files. Without filesystem isolation, a compromised agent could backdoor system resources to gain network access.”

    O stack completo de defesa

    Se você acompanha este blog, já cobri as outras peças do stack de governança enterprise do Claude Code:

    sandbox.failIfUnavailable é a peça que conecta tudo. De que adianta ter managed settings impecáveis se o sandbox que deveria enforcement elas falha silenciosamente?

    E tem mais uma setting que merece atenção: allowUnsandboxedCommands: false. Por default, quando um comando falha dentro do sandbox, o Claude Code tem um escape hatch chamado dangerouslyDisableSandbox — ele analisa a falha e pode tentar rodar o comando fora do sandbox (com permissão do dev). Desabilitando allowUnsandboxedCommands, esse escape hatch é completamente removido.

    A config completa para uma SH enterprise:

    
    {
      "sandbox": {
        "enabled": true,
        "failIfUnavailable": true,
        "allowUnsandboxedCommands": false,
        "filesystem": {
          "allowWrite": ["~/.npm", "/tmp"]
        }
      }
    }
    

    Deploy isso via managed-settings.d/ para todos os devs. Ninguém desliga.

    O que acontece quando você NÃO configura

    O relatório da AGAT Software sobre segurança de AI agents em 2026 mostra que 80,9% dos times técnicos já passaram da fase de planejamento para testes ou produção com AI agents. Mas apenas 14,4% foram a produção com aprovação completa de segurança e TI.

    Isso significa que mais de 85% dos deployments de AI agents em produção não passaram por review de segurança adequado. Incluindo, provavelmente, a configuração de sandbox do Claude Code na sua SH.

    Com fail-open (default), o risco é invisível. O sandbox está “ligado” no settings, todos acham que funciona, mas em 3 das 20 máquinas do time falta uma dependência. Esses 3 devs rodam sem proteção. Ninguém sabe.

    Com fail-closed (failIfUnavailable: true), o problema aparece na hora. O dev que não tem bubblewrap instalado vê um erro claro. Instala. Resolve. Segue protegido.

    O que eu penso

    Na minha experiência mentorando 300+ software houses, segurança é quase sempre reativa. O time implementa depois do incidente, não antes.

    Mas o cenário com AI agents é diferente. Não é um dev fazendo rm -rf por acidente. É um agente autônomo que raciocina sobre as próprias restrições e encontra formas de contorná-las. Que analisa padrões de deny rules e descobre bypasses via /proc. Que calcula se desabilitar o sandbox é a melhor estratégia para completar a tarefa.

    Isso não é bug. É o agente fazendo exatamente o que foi projetado para fazer: resolver problemas. O problema é que “resolver” inclui resolver as restrições de segurança.

    sandbox.failIfUnavailable é a resposta mais simples para o cenário mais perigoso: o sandbox que não está lá quando você precisa dele. Uma linha de config. Zero impacto no workflow. Máxima proteção no failure case.

    Se você tem devs usando Claude Code e sandbox ativado, verifica agora se failIfUnavailable está true. Se não está, muda. Hoje.

    Sou Thulio, mentoro 300+ SHs desde 2016.

Marcado:

Deixe um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *