7 padrões de falha em APIs de vibe coding
Leitura ~6 min · Atualizado em outubro de 2026
Sete padrões explicam a maior parte do que encontramos em APIs geradas por IA. Cada um traz a evidência que vale no laudo, como testar e a correção. Nenhum depende de ler o código-fonte.
O mapa
| # | Padrão | Severidade |
|---|---|---|
| 01 | BOLA/IDOR | Crítica |
| 02 | Banco sem isolamento por registro | Crítica |
| 03 | Chave de administrador no bundle | Crítica |
| 04 | Rota sem sessão | Crítica |
| 05 | CORS com credenciais | Alta |
| 06 | Sourcemap e debug em produção | Alta |
| 07 | Endpoint de IA sem limite | Alta |
Os sete padrões
01 · BOLA/IDOR: trocar o ID e ver o dado de outro usuário
O servidor confere que existe sessão, mas não que o recurso pertence a quem chamou. É a falha mais comum e a mais grave em API.
GET /api/items/42 HTTP/2
Authorization: Bearer <token da conta A>
200 · item da conta BComo testar: Duas contas, um recurso em cada, troca do ID na requisição.
Correção: Checar o dono do recurso no servidor, em toda leitura e escrita.
Afeta: Lovable, Bolt, Cursor, v0
02 · Banco sem isolamento por registro
A chave usada pelo front é pública por design. Sem a política que decide quais linhas cada usuário vê, a API devolve a tabela inteira.
GET /rest/v1/profiles?select=* HTTP/2
apikey: <chave pública do app>
200 · 12.481 linhas · e-mails e telefonesComo testar: Consultar uma tabela com a chave pública e comparar com o que a sua conta deveria ver.
Correção: Ligar o isolamento em todas as tabelas e testar cada uma com a chave pública.
Afeta: Lovable, Ollama, Replit
03 · Chave de administrador no bundle
A credencial que ignora as regras vai para o JavaScript público. Qualquer visitante copia e usa.
const key = "eyJhbGciOiJIUzI1NiJ9...";
payload: { "role": "service_role" }Como testar: Procurar prefixos e JWT no bundle; decodificar o payload.
Correção: Remover do front, mover para o servidor e rotacionar a chave.
Afeta: Lovable, Bolt, opencode
04 · Rota sem sessão
O front esconde o botão, mas o handler responde para qualquer chamada. Esconder no cliente não é autorização.
GET /api/admin/users HTTP/2
(sem cookie)
200 · 412 registros · sem autenticaçãoComo testar: Chamar a rota em aba anônima e ver se devolve dado.
Correção: Exigir sessão e checar papel no início do handler.
Afeta: v0, Claude Code, opencode
05 · CORS com credenciais
A resposta reflete qualquer origem e aceita credenciais. Um site hostil lê a resposta autenticada em nome do usuário.
GET /api/me HTTP/2
Origin: https://evil.example
Access-Control-Allow-Origin: https://evil.example
Access-Control-Allow-Credentials: trueComo testar: Enviar origem hostil e conferir os dois headers.
Correção: Restringir a origens conhecidas e nunca combinar wildcard com credenciais.
Afeta: Bolt, Base44, Replit
06 · Sourcemap e debug em produção
O deploy manteve artefatos de desenvolvimento: código-fonte, caminhos internos e configuração expostos.
GET /assets/index.js.map HTTP/2
200 · JSON de sourcemap · fontes originaisComo testar: Acrescentar .map à URL de um JS e checar /.env e /api/debug.
Correção: Desativar sourcemaps e remover rotas de debug do deploy.
Afeta: Replit, Bolt, v0
07 · Endpoint de IA sem limite
Sem rate limit, um script transforma a feature em consumo ilimitado de tokens na sua conta.
POST /api/chat × 20 em sequência
20× 200 · nenhum 429Como testar: Disparar 20 requisições seguidas e observar o status.
Correção: Limite por IP e por usuário, com 429 e Retry-After.
Afeta: Lovable, Cursor, openai via Ollama
Como testar os sete em 48h
A Metodologia Express combina verificação automatizada com revisão manual: 11 checks rodam na suíte e os demais dependem de duas contas e julgamento. O laudo declara o que foi testado e o que ficou fora.
A metodologia completa está em as seis fases; os checks, em o que testamos. Para o contexto de decisão, leia por que fazer pentest em um SaaS de vibe coding.