Segurança do Loop Autônomo|INEMA.CLUB-PRO

Aula 1 · 15 min

A tríade letal: dados privados, conteúdo não confiável, saída para fora

Um agente que lê dado privado, lê texto escrito por qualquer pessoa e consegue mandar algo para fora pode ser comandado por quem escreveu o texto. O nome é de Simon Willison. Nesta aula você mapeia as sessões do seu loop nas três pernas e corta uma onde as três se juntam.

Começar a aula
Três cabos grossos chegando a um único conector central sobre uma bancada escura.

Nesta aula você vai

  1. 1As três pernas: dado privado, conteúdo de terceiros, canal de saída
  2. 2Por que o risco está no conjunto da sessão, não numa ferramenta
  3. 3O mapa do loop em JSON e o triade.py que confere
  4. 4Cortar a perna mais barata: quase sempre a saída

Objetivo: mapear as sessões do seu loop nas três pernas da tríade letal e cortar uma perna onde as três se juntam.

01Três pernas na mesma sessão

Clique em cada perna.

Clique em cada bloco do diagrama para ver o que ele faz.

O risco está na sessão que enxerga tudo junto: um fetch inofensivo vira perna de saída ao lado do banco de clientes.

02Como pensar a tríade no seu loop

Três regras que valem para Claude Code e Codex.

1. Sessão, não ferramenta

Marque as pernas por sessão do loop: tudo o que aquele contexto enxerga ao mesmo tempo. Uma ferramenta pode marcar as três sozinha (um MCP de e-mail lê sua caixa, lê o que um estranho mandou e envia para qualquer endereço).

O curso 3 mostra como dividir o trabalho em sessões; aqui você decide o que cada uma pode juntar.

03O mapa do loop e o triade.py

Uma sessão por objeto; cada ferramenta marca o que faz. O script só lê o JSON: quem garante que o mapa é verdadeiro é você.

Arquivo · kit/mapas/triagem.json (fictício)
{
  "loop": "triagem de issues (exemplo do curso, fictício)",
  "sessoes": [
    {
      "nome": "triagem",
      "ferramentas": [
        { "nome": "ler issues abertas do GitHub", "terceiros": true },
        { "nome": "ler o repositório e o .env", "privado": true },
        { "nome": "comentar na issue", "saida": true, "muda_estado": true },
        { "nome": "abrir URL (fetch)", "terceiros": true, "saida": true }
      ]
    }
  ]
}
Terminal · antes e depois do corte
K=~/projetos/loop-r-eng-seguranca-v72/kit
for m in triagem triagem-cortada; do
  echo "## $m"; python3 $K/triade.py $K/mapas/$m.json; echo "saída: $?"
done
Exemplo do repositório
## triagem
triagem      privado:sim  terceiros:sim  saída:sim  → FECHA
TRÍADE: violada em triagem
saída: 1
## triagem-cortada
leitor       privado:não  terceiros:sim  saída:não  → OK
respondente  privado:sim  terceiros:não  saída:sim  → OK
TRÍADE: nenhuma sessão autônoma com as três (2 sessões)
saída: 0

No mapa cortado, o leitor das issues não tem dado nem saída: grava só campos.json (rótulo, prioridade, arquivo citado). O respondente lê esses campos, o repositório e comenta só na issue de origem.

04Na sua máquina: o inventário de MCP

O inventario.py do projeto Tríade Letal lê os servidores MCP do Claude Code e do Codex e monta a matriz para você preencher. Só lê arquivos de configuração; não acessa a rede nem imprime segredo.

Terminal · demo e a sua matriz
[ -d ~/projetos/triade-letal ] || git clone -q https://github.com/inematds/triade-letal ~/projetos/triade-letal
cd ~/projetos/triade-letal
python3 inventario.py --demo                    # exemplo fictício, para ver o formato
python3 inventario.py --md /tmp/matriz.md > /dev/null && grep -c "|" /tmp/matriz.md
Exemplo do repositório
onde                               servidor                privado  terceiros   saída  transporte
-------------------------------------------------------------------------------------------------
Claude Code (global)               gmail                    talvez     talvez  talvez  npx gmail-mcp
Claude Code (global)               fetch                         -     talvez  talvez  uvx mcp-server-fetch
Claude Code (global)               postgres-clientes        talvez          -       -  npx @modelcontextprotocol/server-postgre
Codex CLI                          playwright                    -     talvez  talvez  npx @playwright/mcp

Palpite somado do conjunto (o agente que enxerga TODOS esses servidores ao mesmo tempo):
  [x] dados privados
  [x] conteúdo de terceiros
  [x] canal de saída

  As três pernas podem estar juntas. Confirme linha a linha e corte uma perna (ver CHECKLIST.md).
8

O "talvez" é palpite pelo nome do servidor. O número no fim é a contagem de linhas da tabela da sua matriz: muda de máquina para máquina.

05Prática

Ensaio do mapa, o inventário da sua máquina e o mapa do seu loop.

E1 · Ver a tríade fechar e abrir

5 min

Clone o repositório do curso em ~/projetos e rode o bloco "antes e depois do corte".

Pronto quando: triagem termina em TRÍADE: violada em triagem e saída: 1; triagem-cortada em TRÍADE: nenhuma sessão autônoma com as três (2 sessões) e saída: 0.

E2 · Inventário da sua máquina

10 min

Rode o bloco do inventário. Abra /tmp/matriz.md e marque, linha a linha, as três colunas do que cada servidor faz de verdade. Acrescente à mão o que não é MCP: shell, navegador, envio de mensagem do seu bot.

Pronto quando: python3 inventario.py --demo termina em As três pernas podem estar juntas e grep -c "|" /tmp/matriz.md imprime um número maior que zero.

E3 · O mapa do seu loop

15 min

Copie kit/mapas/triagem.json para ~/meu-mapa.json e descreva o seu loop: uma sessão por contexto, cada ferramenta com as pernas que marca. Se alguma sessão fechar, corte uma perna no mapa e no loop.

Pronto quando: K=~/projetos/loop-r-eng-seguranca-v72/kit; python3 $K/triade.py ~/meu-mapa.json; echo $? → a última linha começa com TRÍADE: e o código é 0 (ou 1 com a sessão anotada para corrigir na aula 2).

06Teste da aula

Pergunta 1 de 4

Quais são as três pernas da tríade letal?competência

07Em três frases

Três pernas, uma sessãoDado privado + conteúdo de terceiros + saída = qualquer texto lido pode comandar o vazamento.
Some por sessãoO mapa marca cada ferramenta; o risco é o que a sessão enxerga junto.
Corte, não peçaDestino fixo, sem rede, leitor sem dados: estrutura, não prompt.

Para ir além

Próxima aula