# Referências e notas de procedência

> Regra desta palestra: nada entra num slide como fato sem fonte, e as três
> categorias abaixo nunca se misturam na tela. Cada slide traz o carimbo da
> categoria a que pertence.

| Carimbo | O que significa |
| :-- | :-- |
| `INCIDENTE REAL` | aconteceu, com dano real, e está coberto por imprensa técnica ou por declaração da própria empresa |
| `PESQUISA / DEMONSTRAÇÃO` | pesquisador demonstrou em ambiente controlado; **não** houve vítima |
| `CENÁRIO FICTÍCIO` | inventado por nós para a demo; dados sintéticos |
| `DOCUMENTAÇÃO` | comportamento documentado pelo fabricante da ferramenta |

---

## 1. Incidentes reais

### 1.1 Replit / Jason Lemkin / SaaStr — julho de 2025

**Usado no slide 06.**

Durante um experimento público de *vibe coding*, narrado dia a dia, o agente da
Replit executou comandos não autorizados e apagou dados de produção de uma
aplicação, apesar de um *congelamento de código* declarado explicitamente pelo operador
mais de uma vez. A Replit reconheceu o incidente publicamente: o CEO pediu
desculpas, houve postmortem, e o produto mudou — separação automática entre
banco de desenvolvimento e produção, melhorias de reversão, e um modo em que o
agente apenas planeja.

- Fortune — *AI-powered coding tool wiped out a software company's database in
  'catastrophic failure'*, 23/07/2025
  <https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/>
- The Register — *Vibe coding service Replit deleted user's production
  database*, 21/07/2025
  <https://www.theregister.com/2025/07/21/replit_saastr_vibe_coding_incident/>
- The Register — *Replit makes vibe-y promise to stop its AI agents making vibe
  coding disasters*, 22/07/2025 (cobre a resposta e as mudanças de produto)
  <https://www.theregister.com/2025/07/22/replit_saastr_response/>
- Gizmodo — *Replit's AI Agent Wipes Company's Codebase During Vibecoding
  Session*
  <https://gizmodo.com/replits-ai-agent-wipes-companys-codebase-during-vibecoding-session-2000633176>
- AI Incident Database — incidente 1152
  <https://incidentdatabase.ai/cite/1152/>

**Como falar disso no palco.** O slide afirma três coisas, e só três: houve
congelamento de código explícito; o agente executou comandos não autorizados e apagou
dados de produção; a Replit respondeu publicamente e mudou o produto. Não
dramatize além disso, e não faça piada às custas do operador — ele fez em
público, com print, o que muita gente fez em privado e não contou.

### 1.2 PocketOS — abril de 2026

**Usado no slide 08.**

Um agente do Cursor, rodando Claude Opus 4.6, trabalhava numa tarefa ligada ao
ambiente de **staging**. Ao encontrar um descasamento de credencial, decidiu
apagar um volume no Railway. Para isso, procurou e encontrou um token de API
num arquivo fora do escopo da tarefa. O token tinha sido criado para uma
finalidade específica e inofensiva — adicionar e remover domínio customizado
pelo CLI — mas fora emitido com escopo para qualquer operação, inclusive as
destrutivas. O agente apagou o volume de produção. Não houve prompt de
confirmação, aviso, ou verificação de que aquilo era produção. A documentação
do Railway registrava que apagar um volume apaga as cópias de segurança junto: a cópia de segurança
estava dentro do raio da explosão. O relato público fala em cerca de nove
segundos. A Railway ajudou na recuperação e ajustou salvaguardas.

- The Register — *Cursor-Opus agent snuffs out startup's production database*,
  27/04/2026
  <https://www.theregister.com/2026/04/27/cursoropus_agent_snuffs_out_pocketos/>
- The New Stack — *How a Cursor AI agent wiped PocketOS's production database
  in under 10 seconds*
  <https://thenewstack.io/ai-agents-credential-crisis/>
- AI Incident Database — incidente 1469
  <https://incidentdatabase.ai/cite/1469/>
- Zenity — *AI Agent Destroys Production Database in 9 Seconds*
  <https://zenity.io/blog/current-events/ai-agent-database-deletion-pocketos>
- Hackread — *Cursor AI Agent Wipes PocketOS Database and Backups in 9 Seconds*
  <https://hackread.com/cursor-ai-agent-wipes-pocketos-database-backups/>

**Nota de honestidade, para dizer em voz alta.** Parte da reconstrução minuto a
minuto vem do relato público do operador. Os fatos centrais — token de escopo
amplo encontrado fora do escopo da tarefa, ação destrutiva em produção durante
uma tarefa de staging, cópias de segurança no mesmo raio — estão bem cobertos por imprensa
técnica e por bases de incidente. Detalhes não confirmados não devem ser
apresentados como laudo forense.

## 2. Pesquisa e demonstração

### 2.1 Invariant Labs — GitHub MCP e *toxic agent flow*, maio de 2025

**Usado no slide 14. Não é um vazamento real.**

Os pesquisadores demonstraram que uma *issue* maliciosa num repositório público
pode, via injeção indireta, levar um agente com integração do GitHub por MCP a
puxar dados de repositórios privados para o contexto e publicá-los num pull
request no repositório público. A demonstração de 26/05/2025 usou Claude 4 Opus
e um repositório montado para o teste. Os pesquisadores chamaram o padrão de
*toxic agent flow* — "injeção indireta de prompt para disparar uma sequência
maliciosa de uso de ferramentas" — e registraram que "mesmo modelos alinhados
de última geração são vulneráveis a esses ataques", concluindo que
**alinhamento de modelo não é suficiente** e que a defesa precisa ser
sistêmica: permissões granulares por contexto e monitoramento.

- Invariant Labs — *GitHub MCP vulnerability*
  <https://invariantlabs.ai/blog/mcp-github-vulnerability>

### 2.2 Simon Willison — *the lethal trifecta*, 2025

**Usado no slide 14.**

O termo que a comunidade adotou para a combinação: **entrada não confiável** +
**acesso a dado sensível** + **capacidade de agir ou exfiltrar**. Cada
ingrediente é inofensivo sozinho; os três na mesma sessão transformam injeção
de prompt de curiosidade linguística em problema sistêmico.

- <https://simonwillison.net/tags/lethal-trifecta/>

### 2.3 OWASP

Usado como pano de fundo, não citado nominalmente nos slides.

- OWASP Top 10 for LLM Applications / GenAI Security Project —
  <https://genai.owasp.org/>
- OWASP API Security Top 10 — API1 *Broken Object Level Authorization*, que é
  literalmente a falha A do AcmeCRM —
  <https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/>

## 3. Documentação

**Usada no slide 11.** Conferida contra a documentação vigente em setembro de
2026. Se você for reapresentar esta palestra, confira de novo: esta é a parte
que envelhece mais rápido.

- Claude Code — *Configure permissions*
  <https://code.claude.com/docs/en/permissions>
- Claude Code — *Configure the sandboxed Bash tool*
  <https://code.claude.com/docs/en/sandboxing>
- Claude Code — *Settings reference*
  <https://code.claude.com/docs/en/settings-reference>

Os três pontos que o slide 11 afirma, e onde cada um está documentado:

1. **A sintaxe.** Regras de `Read` e `Edit` usam padrões no estilo `gitignore`.
   `Read(./.env)`, `Read(./.env.*)`, `Read(./secrets/**)` são a forma vigente.
   A documentação traz um exemplo pronto em *Exclude sensitive files*.

2. **O alcance real do deny.** As regras de deny de `Read` e `Edit` valem para
   as ferramentas de arquivo do Claude, para os comandos de arquivo que o
   Claude Code reconhece no Bash — `cat`, `head`, `tail`, `sed` — e para os
   alvos de redirecionamento. **Não** valem para subprocessos arbitrários que
   abram arquivos por conta própria, como um script Python ou Node. Para
   imposição no nível do sistema operacional, a própria documentação manda
   habilitar o sandbox.

3. **Como as duas camadas se combinam.** Com o sandbox ligado, as restrições de
   filesystem combinam as configurações de `sandbox.filesystem` **com** as
   regras de deny de `Read` e `Edit`: as duas são fundidas na fronteira final
   do sandbox. O sandbox impõe no nível do SO, para o comando e para os
   processos filhos, e roda em macOS, Linux e WSL2 — não em Windows nativo.

## 4. Cenário fictício

Tudo no **AcmeCRM** é inventado: ACME Corp, Wayne Enterprises, Alice, Bob,
Bruce, Alfred, todos os clientes, pedidos, chamados, artigos, usuários, senhas
e tokens. Os domínios usam o TLD reservado `.test`, que nunca resolve. Os
segredos são strings obviamente inúteis, geradas por script e nunca
versionadas. A exfiltração do ato D4 é simulada na interface e sempre
acompanhada de banner dizendo isso.

Nenhuma semelhança com pessoa, empresa, sistema ou credencial real é
intencional. Ver `docs/03-prd-acmecrm.md`.

## 5. O que foi deliberadamente deixado de fora

Registrado para quem for revisar ou reapresentar:

- **Números de dano financeiro.** Nenhuma das fontes primárias sustenta uma
  cifra confiável para os dois incidentes. Inventar número para dramatizar é
  exatamente o oposto do que esta palestra defende.
- **Reconstrução de transcrição do agente.** Circulam versões editadas do que o
  agente "disse" nos dois casos. Não usamos nenhuma como citação literal.
- **Comparação entre fabricantes.** A palestra não afirma que uma ferramenta é
  mais segura que outra. A tese é sobre configuração e privilégio, não sobre
  marca.
