Voltar as noticias
Auditando a Segurança do MarketNow: Um Relato Aberto
Casos de UsoMediaEN

Auditando a Segurança do MarketNow: Um Relato Aberto

Dev.to - MCP·4 de julho de 2026

Lançamos o MarketNow há 2 semanas. Depois, fizemos um teste de penetração. Este é o relatório honesto do que encontramos, o que corrigimos e o que ainda está pendente.

Por que fizemos isso

O MarketNow lida com dinheiro real — pagamentos em USDC na Base para habilidades de agentes de IA. Antes de promovê-lo amplamente, queríamos saber: é realmente seguro?

Realizamos 4 auditorias paralelas:

  1. Pentest de segurança — vulnerabilidades prontas para exploração
  2. Teste de carga de desempenho — usuários simultâneos
  3. Auditoria funcional/i18n — traduções e UX
  4. Auditoria de SEO — descobribilidade

Descobertas CRÍTICAS (4) — todas corrigidas

C1: Falha silenciosa no gasto do mandato

O que: Quando um agente comprou uma habilidade, chamamos recordMandateSpend() para debitar o mandato. Mas a chamada não incluía o segredo interno, então foi rejeitada com 403. A licença foi emitida de qualquer forma.

Impacto: Um agente com um mandato de $10 poderia comprar 100 habilidades a $5 cada = $500 gastos, limite de $10 nunca aplicado.

Correção: Passar _internal: true, _secret: process.env.MANDATES_INTERNAL_SECRET. Lançar em caso de falha — fail-closed: sem licença se o gasto falhar.

C2: Repetição de txHash

O que: O mesmo txHash USDC poderia ser usado para emitir licenças ilimitadas.

Impacto: Pague $1 uma vez, obtenha todas as habilidades de $1 gratuitamente.

Correção: Deduplicar armazenamento via GitHub _data/used_txs/. Verificar se o txHash já foi usado antes de emitir a licença.

C3: Desvio de valor

O que: Verificamos received >= expected em vez de received === expected.

Impacto: Pague $50 uma vez, resgate cada habilidade com preço ≤ $50.

Correção: Correspondência exata: if (value !== BigInt(expectedAmountRaw)).

C4: Redenção de txHash roubado

O que: Verificamos se o txHash era válido e se o valor estava correto, mas nunca verificamos QUEM o enviou.

Impacto: Raspagem do Basescan para transferências USDC para nossa carteira, resgatá-las antes do verdadeiro comprador.

Correção: Validar se a carteira from corresponde ao walletAddress do chamador.

Descobertas ALTAS (5) — todas corrigidas

# Problema Correção
H1 CORS * em todos os endpoints Lista de permissões (apenas marketnow.site)
H2 PII do mandato (emails) expostos na API de lista Redigir: hasEmail: true em vez de email
H3 Limitador de taxa por instância (não global) Limitação documentada; Upstash Redis no roadmap
H4 Webhook do Stripe sem idempotência Verificar se o arquivo existe antes de escrever
H5 Segredos padrão de fallback Falhar rapidamente se STRIPE_SECRET_KEY não estiver definido

Descobertas MÉDIAS (7) — todas corrigidas

  • As chaves de licença agora usam crypto.randomBytes (não Math.random)
  • Lista de permissões de URL de webhook (anti-SSRF: apenas Slack, Discord, Telegram, Zapier)
  • Headers de segurança em /api/* (nosniff, no-referrer, DENY)
  • Header CSP em rotas SPA
  • Mensagens de erro não vazam mais internos do RPC
  • perPurchaseCapUsd padrão para min($50, limit) não limite total
  • INTERNAL_SECRET falha fechada se não definido

Resultados de desempenho

Teste Resultado
200 simultâneos /api/search 0% de erro, p95=1.09s
50 simultâneos homepage 0% de erro, p95=853ms
Sustentado 5 req/s × 30s 100% de sucesso, p95=291ms
Memória (700+ requisições) 0 crescimento (92MB → 92MB)
Efetividade do cache 1 carga fria + 700+ acertos
vulnerabilidades npm 0

O que ainda está pendente de forma honesta

Não afirmamos que tudo está perfeito:

  1. Auditoria independente de terceiros — Cure53 / Trail of Bits adiada até termos receita. Revisão por pares voluntária aberta.
  2. Limitador de taxa — em memória por instância, não global. Correção do Upstash Redis no roadmap.
  3. Escrow on-chain — USDC é irreversível. Processo de disputa manual por enquanto. Escrow de contrato inteligente visando Q1 2027.
  4. HTML duplicado de SPA — todas as rotas servem o mesmo HTML. Migração SSG no roadmap.

O relatório completo

Tudo está documentado em:

Lições

  1. Fail-closed > fail-open. Se algo der errado, não emita a licença.
  2. Correspondência exata > verificação de intervalo. === não >= para valores de pagamento.
  3. Validar o remetente. Um txHash válido não significa que SEU cliente pagou.
  4. Armazenamento de deduplicação é essencial. Cache é para desempenho, dedup é para segurança.
  5. Pentest antes do lançamento, não depois. Tivemos sorte — encontramos 4 críticos antes de qualquer dinheiro real fluir.

MarketNow — camada de confiança para comércio de agentes. 8.560 habilidades MCP, segurança Sentinel L2, x402 + USDC na Base. AliceLabs LLC (Wyoming, EUA). Experimente.

Contexto Triplo Up

A segurança em plataformas que lidam com transações financeiras é crucial, especialmente para empresas brasileiras que buscam integrar agentes de IA. O relatório de auditoria pode servir como um guia para práticas de segurança em serviços similares.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.