WordPress · 9 min · publié le 31 décembre 2024

Contact Form 7 et piratage : ce qui est vrai, ce qui ne l'est pas

Contact Form 7 n'est pas « le » virus. Une version ancienne, ou un add-on d'upload, l'est parfois. Coupez l'upload si vous n'en avez pas besoin, mettez à jour, et cherchez un script parallèle : le formulaire a souvent servi de rampe, pas de payload unique.

Réponse directe

Le plugin n'est pas « le » virus. Une version ancienne ou un add-on d'upload l'est parfois. Coupez l'upload, mettez à jour, cherchez un script parallèle.

contact form 7 piraté cf7 malware formulaire wordpress hack

Ce qui est vrai, ce qui circule

CF7 est partout, donc souvent présent sur un site piraté. Corrélation n'est pas entrée. Les versions avec CVE d'upload ou d'injection, elles, sont des portes documentées. Lisez le numéro de version dans l'écran extensions, pas un titre Facebook « CF7 hacké ».

Un formulaire sans pièce jointe, à jour, n'explique pas un mu-plugin. Cherchez ailleurs : thème nulled, File Manager, voisin. Plugin vulnérable.

Lisez le numéro de version CF7 et la liste des add-ons avant d'accuser « le formulaire ». Un CF7 à jour sans pièce jointe n'explique pas un mu-plugin. Un add-on d'upload abandonné + des `.php.jpg` dans uploads, si. Coupez le champ fichier le temps du dossier. Les messages Flamingo montrent parfois le nom du fichier déposé : traitez-le comme un objet suspect, pas comme une pièce jointe anodine.

L'add-on d'upload, plus que le cœur

Les champs fichier (CV, photo, « joindre un devis ») écrivent dans `uploads`. Si le plugin ne restreint pas les extensions, un `cv.php.jpg` ou un `.phtml` passe. C'est le scénario n°1 autour de CF7. Coupez le champ fichier le temps du dossier, ou validez une liste blanche (pdf, jpg) côté serveur, pas seulement en JavaScript.

Les add-ons marketplace « CF7 file upload », « drag and drop » abandonnés : plus risqués que le plugin principal. Désinstallez-les après copie si plus maintenus.

Après un upload réussi, cherchez dans `uploads` les PHP et doubles extensions. PHP dans uploads.

Liste blanche pdf/jpg côté serveur, pas seulement en JavaScript. Les add-ons « drag and drop » marketplace abandonnés : plus risqués que CF7. Désinstallez-les après copie s'ils ne sont plus maintenus. Puis chasse PHP dans uploads.

Flamingo, copies, pièces jointes

Flamingo stocke les messages en base. Utile pour voir un attachement nommé `invoice.php`. Ça n'exécute pas le PHP tout seul — sauf si un autre bug sert le fichier. Traitez les pièces comme des objets suspects.

Une copie mail vers une boîte piratée : l'attaquant lit les leads. Changez SMTP et la boîte. Ce n'est pas un shell, c'est une fuite de messages.

Spam envoyé vs site pris

Un CF7 ouvert sans limiteur envoie du spam : l'hébergeur suspend pour abus mail. Le site n'est pas forcément « pris ». Journal d'envoi : le script est `wp-cron` / `admin-post` du form, pas un `radio.php`. Deux dossiers. Si le journal montre un PHP à la racine, là oui, rampe + payload.

Ne formatez pas le serveur pour du spam de formulaire. Rate-limit, captcha, puis voyez.

Un CF7 ouvert sans limiteur envoie du spam : l'hébergeur suspend pour abus mail, le site n'est pas forcément pris. Journal d'envoi : form vs `radio.php` à la racine. Deux dossiers. Ne formatez pas le serveur pour du spam de formulaire.

Chercher autour de CF7, pas seulement dedans

Un RCE dans un vieux CF7 a permis de poser un fichier. Le zip officiel CF7 remplacé ne l'enlève pas. Dates à la racine, mu-plugins, users admin. Par où commencer.

Les shortcodes CF7 dans des widgets texte : un attaquant y colle un iframe. Lisez les widgets et Elementor. Elementor.

Un RCE vieux CF7 a permis de poser un fichier. Le zip officiel remplacé ne l'enlève pas. Dates racine, mu-plugins, users. Les shortcodes dans les widgets : un iframe s'y colle. Par où commencer.

Mettre à jour sans croire que c'est fini

MAJ CF7 + add-ons après le clean, pas comme seul geste. Comparez le dossier au zip : fichiers en trop. Un `cf7-extra.php` n'est pas officiel.

Révoquez les capabilities étranges si un add-on en a créé. Users.

Captcha, SMTP, et fausse piste

Installer reCAPTCHA le soir de l'incident n'enlève pas un shell. Ça réduit le spam futur. Un SMTP (Brevo, Mailgun) mal configuré n'est pas un piratage CMS. Distinguez les tickets hébergeur « malware » et « outgoing spam ».

Quand changer de formulaire

Si CF7 n'est là que pour trois champs texte, un formulaire hébergé (ou le bloc natif + un service) réduit la surface. Si vous avez des parcours complexes, restez, à jour, sans upload inutile.

Page WordPress piraté. créer un espace.

Mettre à jour CF7 après le clean n'est pas le seul geste : comparez le dossier au zip, chassez racine et mu-plugins. Page WordPress piraté. Créer un espace.

SMTP, captcha, et données des messages

Installer reCAPTCHA le soir de l'incident n'enlève pas un shell. Ça réduit le spam futur. Distinguez ticket hébergeur « malware » et « outgoing spam ». Un SMTP (Brevo, Mailgun) mal configuré n'est pas un piratage CMS. Une copie mail vers une boîte lue : changez SMTP et la boîte — fuite de leads, pas forcément un shell.

Flamingo : données perso souvent. Si la table a pu être lue, le constat l'indique. La CNIL, si due, vous incombe. Ne demandez pas de pièces d'identité sur un form WordPress ordinaire.

Si CF7 n'est là que pour trois champs texte, un formulaire hébergé réduit la surface. Parcours complexes : restez, à jour, sans upload inutile. WordPress piraté.

Questions fréquentes

Je désinstalle CF7 tout de suite ?

+
Si vous n'en avez plus besoin, après copie, oui. Si le site en dépend, coupez l'upload, mettez à jour, chassez les fichiers autour. Si vous n'en avez plus besoin, après copie, oui. Sinon coupez l'upload, mettez à jour, chassez autour.

Akismet aurait empêché le piratage ?

+
Akismet filtre le spam de contenu. Pas un upload PHP. Pendant l'incident, un antispam de plus ajoute du bruit. Akismet filtre le spam de contenu, pas un upload PHP.

Les messages Flamingo sont une donnée perso ?

+
Souvent oui (noms, e-mails). Si la table a pu être lue, le constat l'indique. La notification CNIL, si due, vous incombe. Souvent oui. Si la table a pu être lue, le constat l'indique. La CNIL, si due, vous incombe.

Un thème « contact » custom sans CF7 peut-il être la porte ?

+
Oui, un `mail.php` maison à la racine est même plus fréquent sur les sites bricolés. Cherchez les PHP qui appellent `mail()` ou `wp_mail`. Un mail.php maison à la racine est même plus fréquent. Cherchez les appels mail() / wp_mail.

CF7 chiffre-t-il les pièces jointes ?

+
Non, pas au sens coffre-fort. Ne demandez pas de pièces d'identité sur un form WordPress ordinaire. Non. Ne demandez pas de pièces d'identité sur un form WordPress ordinaire.
À lire ensuite
Plugin vulnérable PHP dans uploads File Manager Guide WordPress WordPress piraté Déclarer mon site