Un enquêteur en sécurité a découvert un skimmer de cartes de crédit dissimulé dans un faux fragment de Google Tag Manager, exploitant une faille critique du plugin WordPress Funnel Builder. L'incident, mis au jour fin mai 2026, illustre comment une seule option de base de données mal protégée peut compromettre l'intégralité d'une boutique en ligne.
Détection du skimmer
Le skimmer a été repéré par le service de surveillance SecurityMetrics, qui a alerté un client de l'hébergeur Anchor Hosting. En soumettant une carte de test sur la page de paiement, le moniteur a observé le formulaire se remplacer par une copie quasi identique, tandis qu'une requête WebSocket était envoyée vers le domaine wss://wordpressws.com/ws avec une charge utile chiffrée. Le script de chargement se trouvait à la ligne 2709 du code HTML de la page de checkout, dissimulé derrière un commentaire « Google Tag Manager (noscript) ».
Le code, après décodage d'une chaîne base64, chargeait un fichier JavaScript hébergé sur https://socketws.com/jquery/jquery.min.js. Ce fichier ouvrait une connexion WebSocket persistante, envoyait un handshake avec le nom d'hôte, puis remplaçait l'iframe légitime de Braintree – le seul moyen de paiement affichant un formulaire de carte sur la page – par une interface contrôlée par l'attaquant. Chaque frappe était ainsi transmise en temps réel au serveur malveillant.
Origine de l'injection : une option WordPress non filtrée
L'enquête a révélé que le script n'était hébergé dans aucun fichier du site. Il était injecté dynamiquement via l'option de base de données _wfacp_global_settings, stockée dans la table wp_options. À l'intérieur de ce tableau sérialisé, la clé wfacp_global_external_script contenait le code malveillant. Cette option est conçue pour permettre aux propriétaires de boutique d'ajouter des scripts tiers (pixels, tests A/B, gestionnaires de balises) sans modifier les fichiers du thème. Cependant, le champ accepte du HTML brut sans aucune filtration ni échappement.
Une faille de validation de nonce dans Funnel Builder
Le chercheur a identifié la cause racine dans le mécanisme d'authentification du plugin Funnel Builder Pro. La fonction check_nonce(), censée vérifier que seuls les administrateurs peuvent écrire dans cette option, contenait une erreur de logique. Lorsque le paramètre $admin était défini sur true, la fonction acceptait aussi bien le nonce administrateur que le nonce client. Un simple utilisateur connecté avec un compte gratuit pouvait donc appeler n'importe lequel des 19 gestionnaires AJAX administrateurs, y compris celui qui écrit l'option _wfacp_global_settings.
« Il suffisait d'un compte client », résume l'enquêteur. Aucun mot de passe administrateur, aucun téléchargement de fichier, aucune édition de thème : une seule requête POST depuis n'importe quel visiteur connecté permettait d'injecter du code JavaScript sur toutes les pages de paiement.
Deux vecteurs, une même vulnérabilité
Un audit complet des 85 plugins actifs du site a montré que la version gratuite de funnel-builder présentait une faille similaire via un autre gestionnaire AJAX, tandis que la version Pro souffrait de l'erreur de nonce inversé. Les deux chemins menaient à la même option _wfacp_global_external_script. Les thèmes personnalisés et les autres plugins étaient sains.
Le chercheur précise qu'aucune base de données publique de vulnérabilités (CVE, Patchstack, Wordfence) ne référençait ce bug au moment de la découverte. « Il était simplement resté là », note-t-il.
Des attaquants actifs au-delà du skimming
En parallèle, l'analyse des journaux de commandes a montré des anomalies : de petites commandes suspectes suggéraient que les mêmes attaquants utilisaient un vérificateur de cartes volées (card checker) contre la boutique. Cela indique une campagne plus large visant à tester et exploiter les données dérobées.
Implications
Cet incident met en lumière les risques liés aux fonctionnalités d'injection de scripts dans les plugins de commerce électronique, surtout lorsque les contrôles d'accès sont défaillants. Les utilisateurs de Funnel Builder (développé par FunnelKit) sont invités à mettre à jour leurs plugins dès qu'un correctif sera disponible. En attendant, la désactivation de l'option wfacp_global_external_script ou la restriction des capacités des utilisateurs non administrateurs peuvent réduire le risque.