Contournement de la vérification de la signature de rappel WeChat Pay lorsque l'en-tête Host est localhost
Plateforme
php
Composant
yansongda/pay
Corrigé dans
3.7.20
## Résumé La fonction `verify_wechat_sign()` dans `src/Functions.php` **ignore inconditionnellement toute vérification de signature** lorsque la requête PSR-7 indique `localhost` comme hôte. Un attaquant peut exploiter cette faille en envoyant une requête HTTP falsifiée au point de terminaison de rappel WeChat Pay avec un en-tête `Host: localhost`, contournant ainsi complètement la vérification de la signature RSA. Cela permet de falsifier de fausses notifications de succès de paiement WeChat Pay, ce qui pourrait amener les applications à marquer les commandes comme payées sans paiement réel. ## Code vulnérable **`src/Functions.php` lignes 243-246:** ```php function verify_wechat_sign(ResponseInterface|ServerRequestInterface $message, array $params): void { // BYPASS: Returns without any signature check if Host header is localhost if ($message instanceof ServerRequestInterface && 'localhost' === $message->getUri()->getHost()) { return; // No signature verified! } // ... openssl_verify() only reached when Host != localhost $wechatSerial = $message->getHeaderLine('Wechatpay-Serial'); $sign = $message->getHeaderLine('Wechatpay-Signature'); $result = 1 === openssl_verify($content, base64_decode($sign), $public, 'sha256WithRSAEncryption'); }
Comment corriger
Aucun correctif officiel disponible. Recherchez des alternatives ou surveillez les mises à jour.
Surveillez vos dépendances automatiquement
Recevez des alertes quand de nouvelles vulnérabilités affectent vos projets.
Commencer gratuitement