Sugestões

Ask a Question
Back to all

Assinatura criptográfica (HMAC-SHA256) nos webhooks

Contexto

Atualmente os webhooks do Asaas utilizam um token estático no header asaas-access-token para autenticação. Esse modelo não protege contra:

  • Replay attacks — um request capturado pode ser reenviado indefinidamente
  • Adulteração de payload — o token prova origem, mas não integridade do corpo

O próprio changelog do Asaas registra que webhooks já existiram sem autenticação nenhuma, e que tokens simples como "1234" eram aceitos em produção até recentemente.

Sugestão

Implementar assinatura HMAC-SHA256 no payload dos webhooks, enviando o resultado em um header dedicado:

ex: asaas-signature: t=1712345678,v1=abc123...

O receptor recalcularia o HMAC usando a chave secreta cadastrada e compararia com o header — rejeitando qualquer request com payload adulterado ou timestamp fora de uma janela de 5 minutos.

Impacto esperado

  • Proteção real contra replay attacks e adulteração de payload em sistemas financeiros
  • Stripe, Mercado Pago, PagBank e Adyen já implementam esse padrão
  • 65% dos providers de webhook no mercado usam HMAC (fonte: Hookdeck/ngrok)
  • Atualmente o Asaas é outlier entre gateways de pagamento nesse quesito