Regra e hook leem o comando; o sandbox não lê nada: o sistema operacional simplesmente não deixa o processo escrever fora da pasta nem abrir a rede. Mas sandbox também falha em silêncio. Nesta aula você prova, com quatro tentativas de fuga, o que segura na sua máquina, e vê duas travas que não seguraram nesta.
3Duas travas que não seguraram aqui: systemd --user e Claude sem socat
4O que o sandbox não cobre: ler fora da pasta
Objetivo: provar na sua máquina que o sandbox bloqueia escrita fora da pasta e rede, em vez de confiar na flag.
01 · Quatro tentativas de fuga
Clique em cada sonda.
ISOLAMENTO: OK só com escreve-fora e rede BLOQUEADOS
Clique em cada bloco do diagrama para ver o que ele faz.
Relato de fonte secundária: a Help Net Security registra sandbox e allowlist falhando em 2026 no Cursor e no Codex CLI. A conclusão prática é provar a trava, não pedir mais confirmação.
02 · Ensaio: a mesma prova com quatro travas
Sem trava, sandbox do Codex nos perfis :read-only e :workspace, e systemd-run com PrivateNetwork e ProtectHome. Nenhum modelo.
## sem trava
escreve-dentro ABERTO
escreve-fora ABERTO
rede ABERTO
le-segredo ABERTO
aviso: lê arquivos fora da pasta; tire segredos do alcance ou corte a rede
ISOLAMENTO: FURADO (2 fuga(s))
saída: 1
## codex sandbox :read-only
escreve-dentro BLOQUEADO
escreve-fora BLOQUEADO
rede BLOQUEADO
le-segredo ABERTO
aviso: lê arquivos fora da pasta; tire segredos do alcance ou corte a rede
aviso: nem a pasta de trabalho é gravável (bom para revisar, não para executar)
ISOLAMENTO: OK
saída: 0
## codex sandbox :workspace
escreve-dentro ABERTO
escreve-fora BLOQUEADO
rede BLOQUEADO
le-segredo ABERTO
aviso: lê arquivos fora da pasta; tire segredos do alcance ou corte a rede
ISOLAMENTO: OK
saída: 0
## systemd-run PrivateNetwork + ProtectHome
escreve-dentro ABERTO
escreve-fora ABERTO
rede ABERTO
le-segredo ABERTO
aviso: lê arquivos fora da pasta; tire segredos do alcance ou corte a rede
ISOLAMENTO: FURADO (2 fuga(s))
saída: 1
codex-cli 0.163.0, systemd 255. O systemd aceitou as flags e rodou sem elas; o journal registrou "PrivateNetwork=yes is configured, but the kernel does not support or we lack privileges for network namespace, proceeding without".
Neste Ubuntu, kernel.apparmor_restrict_unprivileged_userns=1 impede o systemd do usuário de criar os namespaces. O Codex só funciona aqui porque o bubblewrap ganhou um perfil AppArmor próprio (01/10/2026). Em outra máquina pode ser o contrário: por isso a prova roda na sua.
03 · Codex, Claude Code e o que cada um isola
Pela doc de cada um, lida em 19/10/2026.
1. Codex
codex exec -s read-only ou -s workspace-write roda os comandos do modelo num sandbox (no Linux, bubblewrap com filtro seccomp, diz a doc do codex sandbox). A doc recomenda workspace-write para trabalho local sem supervisão e reserva o --yolo para runner já isolado.
codex sandbox -P [perfil] -- [comando] roda um comando seu no sandbox, sem modelo: é o que o ensaio usa. Os perfis :read-only e :workspace foram observados no 0.163.0.
2. Claude Code
sandbox.enabled põe os comandos do Bash numa fronteira do sistema: escrita limitada e rede só por um proxy com lista de domínios. No Linux depende de bubblewrap e socat.
O sandbox cobre comandos de shell; as ferramentas de arquivo, MCP e hooks rodam fora dele (doc). Para elas, valem as regras da aula 4.
3. Falhar alto
Por padrão, se o sandbox do Claude Code não consegue subir, ele roda os comandos sem sandbox. Com sandbox.failIfUnavailable: true, recusa iniciar.
No loop, ligue o failIfUnavailable: trava ausente tem de parar o loop, não deixá-lo rodar aberto.
Doc do Claude Code"By default, if the sandbox can't start because a dependency is missing or the platform is unsupported, Claude Code runs commands without sandboxing."
04 · Claude Code: sandbox com falha explícita
Nesta máquina falta o socat. Com failIfUnavailable, o Claude Code recusa iniciar antes de qualquer chamada ao modelo (não gasta cota).
Terminal · pedir sandbox e exigir que exista
cd /tmp/ensaio-seg/iso
claude --settings '{"sandbox":{"enabled":true,"failIfUnavailable":true}}' -p "responda só: ok" --tools ""
echo "saída: $?"
Exemplo do repositório
Error: sandbox required but unavailable: sandbox is enabled but dependencies are missing: socat not installed · install missing tools (e.g. apt install bubblewrap socat) or see https://code.claude.com/docs/en/sandboxing
sandbox.failIfUnavailable is set — refusing to start without a working sandbox.
saída: 1
Claude Code 2.1.303. Sem o failIfUnavailable, pela doc, a mesma sessão teria rodado os comandos sem sandbox.
Instale bubblewrap e socat (o próprio erro sugere apt install bubblewrap socat) e rode de novo: a sessão sobe e responde. Depois, peça ao Claude para rodar as sondas do prova-isolamento.sh, uma de cada vez, e confira BLOQUEADO em escreve-fora e rede.
05 · Prática
As quatro travas na sua máquina e a trava do seu loop.
E15 · Prova das quatro travas
10 min
Rode o ensaio. Anote quais travas deram OK na sua máquina; o resultado do systemd pode ser diferente do daqui.
Pronto quando: "sem trava" termina em ISOLAMENTO: FURADO (2 fuga(s)) e saída: 1; "codex sandbox :workspace" em escreve-dentro ABERTO, ISOLAMENTO: OK e saída: 0.
E16 · Claude Code falha alto
10 min
Rode o bloco do Claude Code. Se recusar iniciar, instale as dependências que o erro pede e rode de novo.
Pronto quando: sem as dependências: refusing to start without a working sandbox e saída: 1; com elas: saída: 0.
E17 · A trava do seu loop
10 min
Rode o prova-isolamento.sh com o mesmo wrapper que o seu loop usa para chamar o agente (o mesmo -s do Codex, o mesmo systemd-run). Anote a data e o resultado no mapa ("prova_isolamento"), para a aula 8.
Pronto quando:bash $P [wrapper do seu loop] --; echo $? → ISOLAMENTO: OK e 0.
06 · Teste da aula
Pergunta 1 de 4
O systemd aceitou PrivateNetwork=yes sem erro. A rede está cortada?competência
Correto
O systemd do usuário seguiu sem o namespace e só registrou no journal. Flag aceita não é trava de pé: a tentativa de fuga é que decide.
No perfil :workspace, o agente consegue ler um segredo em ~/.config. O que fazer?
Correto
Ler não vaza se não houver saída. Com a rede cortada pelo mesmo sandbox e o segredo fora do alcance, a tríade não fecha.
Não é essa
Ler não vaza se não houver saída. Com a rede cortada pelo mesmo sandbox e o segredo fora do alcance, a tríade não fecha.Rever: Quatro tentativas de fuga
Pergunta 4 de 4
Qual a diferença entre o sandbox e a regra deny da aula 4?
Correto
find -delete, python3 -c ou um script que apaga passam por regra de texto; não passam por um sistema de arquivos só leitura.