Sugestões
Assinatura criptográfica (HMAC-SHA256) nos webhooks
15 days ago
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
