L’extension Flamingo
Flamingo est une extension très utile pour WordPress, elle vient en complément de Contact Form 7, elle-même une des deux extension pour les formulaires de contact les plus utilisées. Flamingo sert à stocker les messages envoyés par le formulaire de contact. Il n’est pas possible d’y répondre mais toutes les informations sont là : tous les champs demandés ainsi qu’un horodatage.
Dans quels cas l’utiliser ?
Si vous avez un doute sur des emails qui seraient passés en indésirables ou des problèmes de messagerie, ou encore si vous êtes plusieurs à administrer le site et que vous voulez vous assurer qu’un message envoyé par le formulaire à bien été traité (notamment dans les sites médicaux). Enfin, si des messages sont bloqués en spam car votre logiciel de captcha (Google Re-captcha ou h-captcha par exemple), vous pourrez les voir dans l’onglet « spam » de flamingo au lieu qu’ils soient supprimés.
La faille de sécurité Flamingo
Comment nous nous sommes aperçus de l’attaque
Nos formulaires de contacts sont attaqués en permanence par des robots, en 2024 nous savons que c’est un peu le jeu, mais normalement le formulaire fait son travail et nous ne sommes pas submergés de spams directement dans notre boite, comme si nous avions laissé traîner notre adresse sur le net.
Début avril 2024, nous avons reçu une première alerte d’un hébergement d’un de nos clients pour base de données saturée. Etonnant, mais pas anormal, nous utilisons des logiciels de confiance mais ce site n’avait pas été créé par nos soins, nous en avions juste récupéré la maintenance. Quand la BDD est saturée chez OVH, elle passe en « readonly« .
Ce qui signifie qu’il n’est plus possible de se logger dans le backend de WordPress car chaque connexion est inscrite dans une table de logs. Donc direction l’hébergement > base de données et phpmyadmin chez OVH pour regarder quelle table serait en surpoids, à la recherche d’un plugin qui aurait inscrit 10 ans de logs à purger, ou une extension de sauvegardes mal paramétré.
Dans notre cas, il s’agissait des tables wp_postmeta et wp_posts qui étaient énormes : respectivement 729,3Mo pour l’une et 232,1Mo pour l’autre.
Dans ce cas, c’est plus délicat d’intervenir directement dans la base, une information dans backend peut être stockée dans plusieurs lignes de la même table (c’est le cas pour wp_postmeta). En regardant parmi les dernières lignes inscrites dans la base, nous avons vu des mots dans la colonne meta_value qui ont fait tilt : « acceptance », « recaptcha », … C’est du coté du formulaire que les données avaient été inscrites.
Notre procédure pour résoudre le problème
1ère étape : dupliquer le site sur un autre hébergement pour accéder au backend
Il nous fallait un hébergement qui puisse encaisser une bdd de plus de 1Go, heureusement nous avons un serveur de pré-prod chez O2switch qui autorise des bdd sans limite de taille. Après avoir changé les petites informations dans la table (wp_options pour les URL) et dans les fichiers (wp_conf.php pour le pointage vers la BDD), nous avons pu nous connecter au backend et aller voir flamingo pour en savoir plus. Effectivement, plus de 182 000 spam était stockés dans le plugin.
Après avoir regardé si nous ne pouvions pas supprimer les lignes directement en sql, nous avons préféré passer par le backend pour être sûr de nettoyer parfaitement la base.
Note : les commandes que nous avions trouvées n’étaient que sur certaines lignes, sans prendre en compte toutes les lignes dans toutes les tables inscrites par les modules Contact Form 7 et Flamnigo, avec en plus, le risque de se retrouver sur un site bancal avec des erreurs liées à des lignes supprimées hâtivement.
Modifier le nombre de lignes qui apparaissent dans WordPress et passer en lot des spams dans la corbeille
Par défaut, WordPress n’affiche que 20 lignes, ce qui nous faisait plus de 9 000 pages à faire défiler 🙁
Pour éviter des erreurs serveurs sur un trop grand nombre de lignes modifiées en même temps : « Request-URI Too Long The requested URL’s length exceeds the capacity limit for this server. Additionally, a 414 Request-URI Too Long error was encountered while trying to use an ErrorDocument to handle the request. » nous avons bloqué le nombre à 445 lignes, ce qui ne nous faisait encore pas loin de 400 pages, énorme mais beaucoup moins que les 9000 initiaux.
Nous avons donc fait, page par page les 400 déplacements de spam > corbeille et vidé la corbeille tous les 10 000 messages pour optimiser le temps du serveur.
Bref, après plusieurs heures, l’onglet spam de flamingo était vide, ainsi que la corbeille. Après vérification dans la base : nos tables wp_postmeta et wp_posts ne faisaient plus qu’une 30aine de Mo !
2nd étape : déplacer la base nettoyée dans l’hébergement du client
Après avoir créé un dump de notre base chez O2switch, nous avons créé une nouvelle base chez OVH et importée dedans les données de la base fraichement nettoyée. De nouveau : petite modification du wp_options et du fichier wp_config. php pour le faire pointer vers la nouvelle base : banco, nous avons de nouveau accès au backend du site dans son hébergement propre.
À peine le temps d’aller se taper le ventre de joie en allant voir la section spam de flamingo vide que déjà 3 messages étaient de nouveau arrivés. Visiblement, les robots nous envoyaient 3 à 5 spams par minutes, pas étonnant que la bdd soit saturée..
3ème étape : désactiver l’extension flamingo
Après avoir vérifié le re-captcha et modifier ses paramètres en mettant des tests élevés, et mis à jour tous les plugins (contact form 7 v 5.9.3 et Flamnigo v 2.5), l’attaque était toujours aussi forte, pareil après avoir banni des IPs via le plugin de sécurisation du WP. Donc, seule solution : désactiver le plugin Flamingo jusqu’à la mise à jour d’une des extensions qui bloquera plus efficacement cette nouvelle génération de robots spammeurs.