Ben DAVAKAN

Vous êtes au bon endroit pour concrétiser vos ambitions sur le web. Parlons-en dès maintenant.

une faille dans l’extension contact form entries de WordPress touche 70 000 sites web

une faille dans l’extension contact form entries de WordPress touche 70 000 sites web

une faille dans l’extension contact form entries de WordPress touche 70 000 sites web

une faille dans l’extension contact form entries de WordPress touche 70 000 sites web

Sommaire

Un avis de sécurité a été publié concernant un plugin WordPress chargé d’enregistrer les soumissions de formulaires de contact. Cette faille permet à des acteurs non authentifiés de supprimer des fichiers, de provoquer un déni de service ou d’exécuter du code à distance. La vulnérabilité a reçu une note de gravité de 9,8 sur 10, ce qui souligne l’urgence et la gravité du problème.

Base de données pour Contact Form 7, WPForms et Elementor Forms

Le plugin connu sous le nom de Database for Contact Form 7, WPForms, Elementor Forms — parfois référencé comme Contact Form Entries Plugin — conserve dans la base de données WordPress les entrées envoyées via les formulaires de contact. Il offre des fonctionnalités pour visualiser les soumissions, les rechercher, les marquer comme lues/non lues, les exporter et d’autres options d’administration. Ce plugin est installé sur plus de 70 000 sites, ce qui en fait une cible attractive pour les attaquants.

Une vulnérabilité de type PHP Object Injection permet à un attaquant non authentifié d’exploiter le plugin — autrement dit, il n’est pas nécessaire de se connecter au tableau de bord du site pour mener l’attaque.

Pour rappel, un objet PHP est une structure de données manipulée dans le code PHP. Les objets peuvent être convertis en une suite de caractères (sérialisés) afin d’être stockés ou transmis, puis reconstitués (désérialisés) en objets. La faille réside dans le fait que le plugin accepte et traite des objets PHP fournis par des sources non fiables, ce qui ouvre la porte à une injection d’objet.

Lorsqu’un site WordPress dispose également du plugin Contact Form 7, la combinaison des deux plugins peut activer une chaîne de gadgets de désérialisation (POP chain), permettant d’atteindre des effets dangereux lors de la désérialisation.

Selon l’avis de Wordfence :

« Cette situation autorise des attaquants non authentifiés à injecter un objet PHP. La présence d’une chaîne de gadgets (POP chain) dans le plugin Contact Form 7, souvent utilisé conjointement, permettrait aux attaquants de supprimer des fichiers arbitraires — entraînant un déni de service ou une exécution de code à distance si le fichier wp-config.php est effacé. »

Toutes les versions du plugin jusqu’à la 1.4.3 incluse sont concernées. Les utilisateurs sont invités à passer à la version la plus récente — au moment de la publication, il s’agit de la 1.4.5.

Featured Image by Shutterstock/tavizta

Comprendre la vulnérabilité : qu’est-ce que l’injection d’objet PHP ?

La PHP Object Injection exploite la manière dont PHP sérialise et désérialise les objets. Lorsqu’une application accepte des données sérialisées provenant de l’extérieur et les désérialise sans validation stricte, un attaquant peut injecter une structure d’objet spécialement construite. Si le code applicatif possède des méthodes magiques (__wakeup, __destruct, etc.) ou des appels à des fonctions sensibles lors de la désérialisation, ces méthodes peuvent être utilisées par l’attaquant pour déclencher des actions non prévues — notamment la manipulation du système de fichiers, l’exécution de commandes, ou la suppression de fichiers.

Concrètement, la chaîne d’exécution malveillante (souvent appelée POP chain — Property Oriented Programming) s’appuie sur des classes et méthodes légitimes présentes dans l’application ou ses dépendances. En combinant plusieurs objets et en manipulant leurs propriétés, l’attaquant peut faire en sorte que la logique interne du plugin exécute des opérations dangereuses.

Impact potentiel sur les sites affectés

Les conséquences possibles d’une exploitation réussie sont variées et graves :

  • Suppression de fichiers arbitraires — Un attaquant peut effacer des fichiers essentiels (comme wp-config.php), rendant le site indisponible ou corrompant sa configuration.
  • Déni de service — La suppression de fichiers critiques ou la création d’un état instable peut interrompre le fonctionnement normal du site.
  • Exécution de code à distance (RCE) — Dans certains scénarios, la suppression ou la modification d’un fichier stratégique peut permettre d’exécuter du code malveillant sur le serveur.
  • Compromission étendue — Une fois un accès suffisant obtenu, l’attaquant peut déposer des backdoors, voler des données des formulaires (y compris des informations sensibles si elles y étaient stockées), ou propager la compromission vers d’autres sites hébergés sur le même serveur.

Pourquoi la combinaison avec Contact Form 7 est problématique

Le plugin vulnérable est conçu pour interagir avec les entrées de formulaires, et beaucoup de sites l’utilisent conjointement avec Contact Form 7. Wordfence a identifié qu’une chaîne d’objets (POP chain) existante dans Contact Form 7 peut être exploitée lors de la désérialisation par le plugin d’enregistrement des entrées. En pratique, l’enchaînement de gadgets tirés des deux plugins permet d’exécuter des opérations allant jusqu’à la suppression de fichiers arbitraires.

La présence simultanée de ces deux plugins sur un même site augmente considérablement le risque d’exploitation, car l’attaquant dispose d’un ensemble d’éléments (classes et méthodes) suffisant pour construire une POP chain fonctionnelle.

Versions affectées et correctifs disponibles

Le problème touche toutes les versions du plugin jusqu’à la 1.4.3 incluse. Un correctif a été publié dans les versions ultérieures ; la version la plus récente au moment de la rédaction est la 1.4.5. Il est donc impératif de vérifier la version installée sur votre site et d’appliquer la mise à jour fournie par l’éditeur du plugin.

Procédure recommandée pour les administrateurs de sites

Voici une checklist structurée, adaptée aux responsables techniques et administrateurs WordPress qui souhaitent réduire le risque ou réagir à une compromission potentielle :

1) Mettre à jour le plugin

Vérifiez la version installée du plugin (dans le tableau de bord WordPress > Extensions) et installez la version fixe (>= 1.4.5) si vous êtes sur une version vulnérable (<= 1.4.3). Si vous gérez plusieurs sites, automatisez ou planifiez les mises à jour pour réduire les fenêtres d’exposition.

2) Isolation et contrôle d’urgence

Si vous suspectez une activité malveillante ou si vous n’êtes pas en mesure d’appliquer la mise à jour immédiatement :

  • Désactivez temporairement le plugin affecté depuis le tableau de bord ou en renommant son dossier via FTP/SSH.
  • Si nécessaire, placez le site en mode maintenance ou restreignez l’accès à l’environnement administratif.

3) Examiner les logs et l’intégrité des fichiers

Recherchez dans les journaux d’accès web des requêtes suspectes ciblant les endpoints du plugin ou des patterns de désérialisation. Contrôlez l’intégrité des fichiers système et recherchez des modifications récentes sur des fichiers critiques (notamment wp-config.php et les fichiers PHP du répertoire wp-content).

4) Restaurer depuis une sauvegarde saine

Si des fichiers critiques ont été supprimés ou modifiés et que vous disposez d’une sauvegarde antérieure à l’incident, restaurez le site depuis cette sauvegarde après avoir corrigé la vulnérabilité. Assurez-vous que la sauvegarde ne contient pas déjà de backdoors.

5) Procédures de remédiation post-compromission

  • Changer les identifiants d’accès (comptes administrateurs WordPress, comptes FTP/SFTP, bases de données).
  • Regénérer les clés de sécurité et les salts dans le fichier wp-config.php si ce fichier a été exposé ou modifié.
  • Scanner l’ensemble du site avec des outils de sécurité reconnus pour détecter des webshells ou des fichiers inconnus.
  • Analyser les bases de données pour identifier les injections de contenu ou les modifications dans les tables.

Mesures préventives et bonnes pratiques

Au-delà du correctif immédiat, adoptez des pratiques qui limitent la surface d’attaque et la probabilité d’exploitation future :

  • Suivi et gestion des extensions — Limitez le nombre d’extensions installées, préférez celles maintenues régulièrement et populaires, et mettez en place une politique de mise à jour.
  • Principe du moindre privilège — Assurez-vous que les comptes système et les processus PHP n’ont pas plus de permissions que nécessaire. Réduisez les droits d’écriture sur le système de fichiers quand c’est possible.
  • Pare-feu applicatif (WAF) — Un WAF peut détecter et bloquer des patterns d’attaque connus, y compris certains vecteurs de désérialisation.
  • Validation stricte des entrées — Lors du développement de plugins, évitez d’accepter des données sérialisées externes ou implémentez une validation et un filtrage strict.
  • Scans réguliers — Programmez des analyses de sécurité automatisées pour détecter les vulnérabilités connues et les signes d’intrusion.

Comment vérifier si votre site est affecté

Quelques étapes simples pour contrôler l’état de vos installations :

  • Connectez-vous à l’administration WordPress et vérifiez la version du plugin Database for Contact Form 7, WPForms, Elementor Forms.
  • Examinez le dossier wp-content/plugins/ via FTP/SSH pour vérifier la présence du plugin et lire son fichier readme ou son fichier principal afin d’y trouver l’étiquette de version.
  • Consultez les logs d’accès pour repérer des requêtes POST ou GET inhabituelles visant des routes du plugin.
  • Utilisez des scanners de vulnérabilité WordPress pour détecter automatiquement la présence d’une version vulnérable.

Considérations techniques supplémentaires (sans divulguer d’exploits)

Il est important de comprendre que la divulgation publique d’exploits détaillés favorise l’utilisation malveillante. Néanmoins, voici des explications techniques générales utiles aux administrateurs :

  • La désérialisation dangereuse se produit lorsque le code appelle unserialize() sur des données contrôlées par l’utilisateur sans vérification. Les attaques exploitent des méthodes magiques ou des destructeurs présents dans des classes accessibles pour obtenir des effets secondaires.
  • Une POP chain est construite en enchaînant plusieurs objets et en manipulant leurs propriétés, de manière à ce que lors de la désérialisation, l’exécution déclenche des méthodes sur ces objets dans un ordre favorable à l’attaquant.
  • L’effacement d’un fichier comme wp-config.php a un impact majeur car ce fichier contient les informations de connexion à la base de données et autres paramètres critiques ; sa suppression peut rendre le site inutilisable et ouvrir des opportunités d’évasion et d’escalade.

Que faire si vous suspectez une compromission mais que vous n’êtes pas certain ?

Même en l’absence de preuves irréfutables, il est préférable d’adopter une approche prudente :

  • Renforcez la surveillance (logs, alertes, intégrité des fichiers).
  • Appliquez les mises à jour disponibles et désactivez l’extension vulnérable si vous ne pouvez pas la mettre à jour immédiatement.
  • Si vous n’avez pas les compétences internes, faites appel à un service de réponse aux incidents spécialisé en sécurité WordPress pour réaliser un audit détaillé.

Gestion des risques et communication

Pour les organisations dont le site web est critique (commerce en ligne, portail d’informations, etc.), il est essentiel de :

  • Tenir un registre des modifications et des maintenances.
  • Documenter les procédures de restauration et de communication en cas d’incident.
  • Informer les parties prenantes internes (équipes techniques, support, direction) en cas d’attaque confirmée afin de coordonner la réponse.

Conclusion — Priorité à la mise à jour et à l’analyse

Cette vulnérabilité illustre une problématique récurrente : la désérialisation non sécurisée peut conduire à des compromissions sévères, surtout lorsque plusieurs composants tiers sont combinés sur un même site. La présence d’un grand nombre d’installations (plus de 70 000) renforce la nécessité d’agir rapidement.

En résumé : vérifiez la version de votre plugin Database for Contact Form 7, WPForms, Elementor Forms, appliquez la mise à jour vers la version corrective (1.4.5 au moment de la rédaction), et suivez les étapes d’investigation et de remédiation si vous suspectez une exploitation. Mettez en place des garde-fous : sauvegardes régulières, gestion des extensions, contrôle des accès et surveillance active.

Références