A segurança dos teus agentes, num só comando.
Regras cumpridas, ações perigosas bloqueadas, código corrigido antes do commit e cada agente visível para a tua equipa.
npx -y @cybedefend/vibedefend@latest installRegião UE ou EUA, escolhida na instalação. O guard decide na tua máquina.
8 vezes menos regras violadas.
As tuas regras, servidas antes de cada edição.
Regras de negócio aprendidas no teu código e regras de segurança para a tua stack, escolhidas para o ficheiro editado.
Claude Code está a escrever
billing/refund.tsasync function refund(order, amount) { if (amount > 500) await approvals.second(order); await payments.refund(order, amount); return receipt(order); }
Reembolsos acima de 500 € precisam de um segundo aprovador.
Aprovada uma vez por Sofia M.Escrito com a tua regra, antes de a alteração entrar.
Os comandos perigosos nunca correm.
Remoções de esquema, sudo, leituras de segredos e push forçados são recusados; o agente sabe porquê e segue outro caminho.
OpenAI Codex quer executar
rm -rf ./storage/uploads
- Lido
- Verificado contra as tuas salvaguardas
- Recusado
- Executado
Bloqueado: caminho protegido, ficheiros dos utilizadores
Corrigido antes do commit.
Quando o agente termina, as alterações são analisadas e ele corrige cada falha. As falhas do projeto estão na sua sessão.
Injeção SQL alcançável
CWE-89, src/db/users.repo.ts:42"SELECT * FROM users WHERE id = $1", [id]Corrigida pelo agente antes do commit
Depois, provado, não suposto.
Depois do commit, o BLSA verifica a lógica de negócio e prova cada veredicto: a regra, o caminho, a linha.
Reembolsos acima de 500 € precisam de um segundo aprovador.BLSA, modo prova
POST /refundsPonto de entrada
approvals.second(order)O controlo da regra
payments.refund(order)Corre depois do controlo
Cumpre-se: aprovado antes de ser pago
Tudo o que faz, num só mapa.
Cada regra servida, cada recusa e cada correção, associadas ao seu agente e ao seu programador no Brain.
Cursorsrc/billing/cart-checkout.ts3 regras servidas
DROP TABLE invoices;Bloqueada
CWE-89, src/db/users.repo.ts:42Falha corrigida
Associado a Sofia M., no Brain
Ninguém avisou o teu agente. Agora já sabe.
Um comando. Todos os teus agentes. Sem cartão.
npx -y @cybedefend/vibedefend@latest installEm detalhe
Depois, provado, não suposto.
Depois do commit, o BLSA (Business Logic Security Analysis, desenvolvido com o CNRS e o laboratório CRIStAL) verifica a lógica de negócio da alteração, e o seu modo prova mostra porque é que cada veredicto se cumpre ou falha: a regra, o caminho no código, a linha. Hoje o BLSA está aberto aos nossos design partners.
As oito falhas de lógica de negócio que evita
das vulnerabilidades de API exploram a lógica de negócio, não uma CVE conhecida.
Wallarm, API ThreatStats 2026
Fuga multi-tenanttenant scoping nas queriesCWE-639
Consulta por id sem filtro de tenant: qualquer cliente autenticado consegue ler esta encomenda.
antes
// GET /api/orders/:id const order = await db.order.findUnique({ where: { id: req.params.id }, }); return res.json(order);
depois
// GET /api/orders/:id const order = await db.order.findUnique({ where: { id: req.params.id, tenantId: req.user.tenantId }, }); if (!order) return res.status(404).end(); return res.json(order);
Regra: tenant scoping nas queries
Reembolso sem controloteto de autorização nos reembolsosCWE-840
Reembolso criado sem verificar a função nem o teto: sai qualquer valor para qualquer intent.
antes
router.post('/refund', async (req, res) => { await stripe.refunds.create({ payment_intent: req.body.intent, amount: req.body.amount, }); return res.json({ ok: true }); });
depois
router.post('/refund', requireRole('finance'), async (req, res) => { const intent = await getOwnedIntent(req.user, req.body.intent); const amount = clampRefund(intent, req.body.amount); await stripe.refunds.create({ payment_intent: intent.id, amount }); return res.json({ ok: true }); });
Regra: teto de autorização nos reembolsos
Idempotência em faltachave de idempotência nos webhooksCWE-837
Sem chave de idempotência: o mesmo evento Stripe repetido credita a encomenda duas vezes.
antes
app.post('/webhook/stripe', async (req, res) => { await orders.markPaid(req.body.id); await ledger.append({ type: 'charge', ... }); res.send('ok'); });
depois
app.post('/webhook/stripe', async (req, res) => { const key = req.headers['idempotency-key']; if (await seen.has(key)) return res.send('dup'); await orders.markPaid(req.body.id); await ledger.append({ type: 'charge', key, ... }); await seen.add(key, '24h'); res.send('ok'); });
Regra: chave de idempotência nos webhooks
PII nos logspolítica de PII nos logsCWE-532
O req.body inteiro vai para os logs: email e palavra-passe em claro no teu fornecedor de logs.
antes
logger.info('signup', { user: req.body });
depois
logger.info('signup', { userId: hash(req.body.email), region: req.body.region, });
Regra: política de PII nos logs
Middleware de auth ignoradomiddleware de auth obrigatório nas rotasCWE-306
Rota montada sem o middleware de auth: chega-se a /admin/users sem sessão.
antes
// public.routes.ts router.get('/admin/users', listAllUsers);
depois
// admin.routes.ts (auth + rbac applied at mount) router.use(requireSession, requireRole('admin')); router.get('/users', listAllUsers);
Regra: middleware de auth obrigatório nas rotas
Rollout de feature flagdefaults seguros nas feature flagsCWE-1188
Flag ausente = true por omissão: a exportação liga-se sozinha em produção.
antes
if (flags.allow_anyone_to_export ?? true) { return exportAll(); }
depois
if (flags.allow_anyone_to_export === true && req.user.role === 'admin') { audit.log('export.all', req.user); return exportAll(); }
Regra: defaults seguros nas feature flags
Rate limit ausenterate limiting no loginCWE-307
Sem limite de tentativas em /login: força bruta sem travão.
antes
router.post('/login', loginHandler);
depois
router.post('/login', rateLimit({ windowMs: 60_000, max: 8, keyGenerator: ipAndEmail }), loginHandler);
Regra: rate limiting no login
Exportação entre tenantstenant scoping nas exportações adminCWE-285
findMany sem filtro de tenant: o CSV devolve os utilizadores de todos os clientes.
antes
router.get('/admin/export', requireAdmin, async (_req, res) => { const rows = await db.user.findMany({}); res.csv(rows); });
depois
router.get('/admin/export', requireAdmin, async (req, res) => { const rows = await db.user.findMany({ where: { tenantId: req.user.tenantId }, }); audit.log('export', req.user); res.csv(rows); });
Regra: tenant scoping nas exportações admin
Quatro camadas, uma instalação.
Regras servidas
As regras de negócio extraídas do teu código e as tuas regras de segurança, servidas antes de cada edição.
Claude Code está a escrever
src/billing/cart-checkout.ts
const total = new Decimal128(cart.sum); const rows = await db.query( "SELECT * FROM carts WHERE id = $1", [id] );
Os montantes usam Decimal128, nunca Number.
Extraída de src/billing.ts:14Qualquer consulta que misture dados do utilizador é parametrizada.
OWASP Top 10Servidas antes da edição
Proteção de segredos
As leituras diretas de segredos são recusadas; o agente recebe a referência gerida.
Cursorwebhooks.ts
cat .env | grep STRIPEBloqueado: leitura direta de um segredo
Em vez disso
process.env.STRIPE_WEBHOOK_SECRETnpm test -- webhooksOs testes passam
Registado para a equipa
Controlo de ações
Comandos destrutivos, eliminações de esquema e caminhos protegidos são travados antes de correrem.
OpenAI Codex
rm -rf dist/Permitido: saída do build
rm -rf .cache/Permitido: cache
rm -rf ./storage/uploadsBloqueado: caminho protegido, ficheiros dos utilizadores
Registado para a equipa
Descobertas em direto
As descobertas de SAST, SCA, segredos, IaC e CI/CD, em direto na sessão para o agente corrigir.
GitHub Copilot
SAST
src/db/users.repo.ts:42SQL injection
SCA
package.jsonlodash 4.17.20, CVE-2021-23337
Secrets
config/prod.ymlAWS access key
IaC
infra/main.tfS3 bucket public-read
CI/CD
.github/workflows/deploy.ymlpull_request_target
No contexto do agente, em direto
Os teus referenciais, servidos como regras.
As regras de segurança que o agente recebe seguem os referenciais que os teus auditores verificam.
- OWASP Top 10
- SOC 2
- RGPD
- ISO 27001
Experimenta grátis no teu próprio código.
Sem cartão. Para ires mais longe, fazemos um piloto com a tua equipa e definimos o preço contigo.
Antes de instalar.
No estudo controlado da CybeDefend de 24 de agosto de 2026, o mesmo agente aplicou 89 % das regras precisas com o VibeDefend, contra 12 % sem ferramenta e 13 % com um ficheiro de regras mantido à mão.