Autenticar um Webhook não é validá-lo
Muitos desenvolvedores lançam um bug perigoso em produção. Eles confundem autenticação com validação.
Autenticação significa que a mensagem veio do provedor correto. Validação significa que os dados dentro da mensagem estão corretos.
Se você fizer apenas o primeiro passo, você perde dinheiro.
Uma vulnerabilidade recente do WordPress (CVE-2026-9189) mostra esse erro. O Contact Form 7 PayPal and Stripe Add-on falhou ao verificar os valores dos pagamentos.
Veja como um invasor explora isso:
- Um invasor cria um pedido de US$ 2.000.
- O invasor faz um pagamento real de US$ 1.
- Eles definem o número da fatura para corresponder ao pedido de US$ 2.000.
- O PayPal envia uma notificação real e verificada para o pagamento de US$ 1.
- O plugin vê a mensagem verificada e marca o pedido de US$ 2.000 como pago.
O plugin confiou no mensageiro, mas ignorou a mensagem.
Não cometa esse erro. Ao lidar com webhooks, siga estes passos:
- Autentique a mensagem usando assinaturas ou segredos compartilhados (shared secrets).
- Corresponda o valor e a moeda ao pedido em seu banco de dados.
- Verifique se o e-mail do destinatário corresponde à sua conta.
- Use um valor do lado do servidor (server-side) para vincular o pedido. Não confie apenas em um ID de fatura enviado no payload.
- Use idempotência para ignorar IDs de transação duplicados.
- Mantenha a verificação TLS ativa para todas as requisições.
- Falhe de forma segura (fail closed). Se qualquer verificação falhar, interrompa tudo.
Se você usa a versão 2.4.9 ou anterior do Contact Form 7 PayPal and Stripe Add-on, atualize-a agora. Cada pedido não pago é um alvo para este exploit.
Sempre autentique o mensageiro e, em seguida, verifique os dados.