UNKNOWNCVE-2026-33661

Verificação de assinatura de retorno de chamada do WeChat Pay ignorada quando o cabeçalho Host é localhost

Plataforma

php

Componente

yansongda/pay

Corrigido em

3.7.20

## Resumo A função `verify_wechat_sign()` em `src/Functions.php` **ignora incondicionalmente toda a verificação de assinatura** quando a requisição PSR-7 reporta `localhost` como o host. Um atacante pode explorar isso enviando uma requisição HTTP forjada para o endpoint de retorno de chamada do WeChat Pay com um cabeçalho `Host: localhost`, ignorando completamente a verificação de assinatura RSA. Isso permite forjar notificações falsas de sucesso de pagamento do WeChat Pay, potencialmente fazendo com que as aplicações marquem os pedidos como pagos sem o pagamento real. ## Código Vulnerável **`src/Functions.php` linhas 243-246:** ```php function verify_wechat_sign(ResponseInterface|ServerRequestInterface $message, array $params): void { // BYPASS: Retorna sem qualquer verificação de assinatura se o cabeçalho Host for localhost if ($message instanceof ServerRequestInterface && 'localhost' === $message->getUri()->getHost()) { return; // Nenhuma assinatura verificada! } // ... openssl_verify() só é alcançado quando Host != localhost $wechatSerial = $message->getHeaderLine('Wechatpay-Serial'); $sign = $message->getHeaderLine('Wechatpay-Signature'); $result = 1 === openssl_verify($content, base64_decode($sign), $public, 'sha256WithRSAEncryption'); }

Como corrigir

Nenhum patch oficial disponível. Procure alternativas ou monitore atualizações.

Monitore suas dependências automaticamente

Receba alertas quando novas vulnerabilidades afetarem seus projetos.

Começar grátis