Call'ade Mobile, Cybersécurité

Audit cybersécurité d'un site WordPress piraté

Comment j'ai établi, sans rien forcer, que le site d'une boutique de réparation hébergeait du spam actif, et ce que j'ai proposé pour en sortir.

Par Victor Aubague · relevés du · retour à l'étude complète

Méthode

Regarder sans toucher

Je n'avais aucun mandat sur ce site. Tout ce qui suit vient de ce qu'il montre déjà à n'importe quel visiteur, relevé le 5 octobre 2026 entre 7 h 02 et 7 h 20 (heure UTC).

Un audit de sécurité commence souvent par un scanner. Ici, c'était exclu : je n'étais ni le propriétaire du site, ni son prestataire. Envoyer des requêtes d'attaque ou essayer un mot de passe sur le site d'un tiers, c'est déjà une tentative d'accès frauduleux au sens de l'article 323-1 du Code pénal, même avec de bonnes intentions.

J'ai donc travaillé comme un visiteur attentif. J'ai lu le code HTML des pages, les en-têtes que le serveur renvoie avec chaque réponse, le sitemap que le site publie pour Google, et l'API REST de WordPress, qui répond en lecture à tout le monde tant que personne ne la ferme. J'ai parcouru les 132 adresses liées depuis le site, au rythme d'une requête par seconde, pour ne rien charger côté serveur.

Cette contrainte n'a presque rien coûté. Un site compromis pour du référencement frauduleux a besoin d'être vu : le spam n'a de valeur que si Google le lit. Il se trouve donc, par construction, dans les pages publiques.

Ce que j'ai lu

  • Les pages publiques et leur code HTML
  • Les en-têtes de réponse d'une requête ordinaire
  • Le sitemap et ses neuf sous-sitemaps
  • L'API REST publique, en lecture seule
  • Les rapports Lighthouse
  • Le statut Google Safe Browsing

Ce que je n'ai pas fait

  • Aucun scan de vulnérabilité
  • Aucune tentative de connexion
  • Aucune requête vers l'administration ou les dossiers des extensions
  • Aucun formulaire envoyé
  • Aucun test de la faille citée plus bas

Constats

Quatre signes, tous visibles depuis la rue

Pris un par un, chacun a une explication innocente possible. Ensemble, ils décrivent un site dont quelqu'un d'autre se sert.

32 articles de casino, antidatés

L'API publique annonçait 38 articles. Aucun n'avait été écrit par le magasin : 6 venaient du thème de démonstration, 32 parlaient de casino et de paris sportifs, en vietnamien et en anglais, chacun avec un lien vers un site de jeu. Ils s'affichaient sous l'en-tête de Call'ade, avec son numéro de téléphone juste au-dessus.

Leurs dates allaient de janvier 2020 à octobre 2024. Elles étaient fausses, et le site le dit lui-même. La preuve tient en quatre recoupements, résumés dans le tableau : l'ordre de création des articles contredit leur date, et leur propre texte parle d'années qui n'existaient pas encore.

Pourquoi antidater ? Un article publié aujourd'hui apparaît en tête de la liste dans l'administration, là où le gérant le verrait. Daté de 2020, il se range tout en bas, sous des pages que personne ne rouvre. La date réelle d'injection ne se voit pas de l'extérieur, et je ne l'affirme pas.

Article de casino en vietnamien publié sous l'en-tête et le numéro de téléphone du magasin, titre flouté
Un des 32 articles, servi sous l'en-tête du magasin. Le titre, qui contient le nom du site de jeu, est flouté.
RecoupementCe que montrent les données publiques
L'ordre des numérosWordPress numérote les articles dans l'ordre de leur création. Les articles de démonstration du thème, datés du 11 novembre 2023, portent les numéros 344 à 349. Sept articles de casino datés de janvier à avril 2020 portent des numéros supérieurs à 3 000 : ils ont donc été créés après novembre 2023.
L'année dans l'adresseCes sept articles « de 2020 » ont tous une adresse qui se termine par -2025.
Le texte lui-mêmeUn article daté du 21 avril 2024 parle de l'année 2026 dans son titre, et cite « 2026 » 33 fois dans son texte.
Aucune relectureSur les 38 articles, la date de modification est identique à la date de publication.
Relevé dans l'API REST publique de WordPress, le 5 octobre 2026. Aucun identifiant de compte ni adresse d'article n'est reproduit ici.

Environ 16 000 commentaires de spam, et ça continue

Sous un article de démonstration du thème, la page pesait 24,5 Mo de HTML. Elle portait 15 533 commentaires marqués « en attente de modération » et des liens vers 9 147 domaines différents : marchés du darknet, cryptomonnaies, casinos.

« En attente de modération » devrait vouloir dire invisible. Le module de commentaires du thème les affichait pourtant à tous les visiteurs. L'API, elle, ne comptait que 12 commentaires approuvés : l'outil que regarde le gérant ne montrait rien d'anormal.

Le rythme dit le reste. Ce n'est pas une vieille attaque oubliée : 5 722 commentaires en septembre 2026, 1 162 sur les quatre premiers jours d'octobre, le dernier daté du 4 octobre.

  1. Juin 20261 058
  2. Juillet 20264 732
  3. Août 20262 793
  4. Septembre 20265 722
  5. Du 1er au 4 octobre1 162
Commentaires de spam reçus sur l'article le plus visé, par mois de 2026. Comptés dans le HTML public de la page, le 5 octobre 2026.

Un bloc de liens caché sur l'accueil

Le code de l'accueil contenait un bloc « Actualités » masqué sur les quatre tailles d'écran. Le visiteur ne le voit jamais. Google, qui lit le code, y trouvait trois liens vers les derniers articles de casino, avec leurs titres en balise de sous-titre. C'est du texte caché au sens des règles anti-spam de Google, et il est placé sur la page la plus forte du site, celle qui transmet le plus d'autorité.

Ce même bloc avait un effet secondaire : il créait une pagination. Les adresses /page/2/ à /page/14/ répondaient toutes avec une copie de l'accueil. J'y reviens dans la page consacrée au SEO.

Les comptes du site, listés en public

L'API des utilisateurs répondait à tout le monde. Elle donnait le compte principal, dont le nom affiché était une adresse e-mail, et un second compte à l'intitulé générique, auteur des 25 articles de casino les plus récents. L'auteur des 7 autres n'existait plus : son compte avait été supprimé, ses articles non. Je ne reproduis ici ni les noms, ni les identifiants, ni l'adresse : savoir qu'ils étaient publics suffit à décider qu'il faut tout changer.

Exposition

Une surface d'attaque bien plus grande que le besoin

Un site vitrine de trois boutiques n'a besoin que de pages et d'un formulaire. Celui-ci faisait tourner une boutique en ligne, une dizaine d'extensions et des formulaires de démonstration.

Les en-têtes de sécurité absents

Chaque réponse d'un serveur web porte des en-têtes, invisibles à l'écran, qui disent au navigateur comment se protéger. Le minimum courant tient en quelques lignes de configuration. Ici, la redirection vers HTTPS était correcte, et presque tout le reste manquait.

En-têteÉtatCe que ça laisse faire
Redirection de HTTP vers HTTPSPrésente (301)Correct
Strict-Transport-Security (HSTS)AbsentLe navigateur ne retient pas que le site exige HTTPS
X-Frame-OptionsAbsentLe site peut être affiché dans le cadre d'une page tierce
Content-Security-PolicyMinimaleAucune restriction sur les sources de scripts
X-Content-Type-Options, Referrer-Policy, Permissions-PolicyAbsentsProtections de base non activées
Versions des logicielsAffichéesPHP, WordPress, WooCommerce, Elementor lisibles dans le code de la page
Requête GET ordinaire sur l'accueil, le 5 octobre 2026. Aucun de ces en-têtes ne corrige une intrusion déjà faite : ils réduisent ce qu'un attaquant peut faire ensuite.

Des versions en retard, et une faille publique

Le code de l'accueil affichait les versions de WordPress et de ses principales extensions. La plupart des petites extensions étaient à jour, signe de mises à jour automatiques actives. Les trois briques les plus lourdes, elles, ne suivaient pas.

Je ne cite qu'une faille dont une page publique vise explicitement la version installée : CVE-2026-48888, un déni de service sans authentification sur WooCommerce avant 11.1.0, publiée le 7 septembre 2026 et corrigée en 11.1.0 (fiche WPScan). Je ne l'ai pas testée. Elle ne dit rien du point d'entrée de l'intrusion, qui ne se voit pas de l'extérieur. Elle dit autre chose : WooCommerce tournait pour une boutique en ligne qui n'existait pas.

LogicielVersion affichéeDernière versionRemarque
WordPress6.9.97.1.2Branche encore maintenue
Elementor4.1.44.3.3Aucune faille publique sur cette version
WooCommerce10.7.011.1.2CVE-2026-48888, corrigée en 11.1.0
All in One SEO5.0.2.15.0.2.1À jour
Versions lues dans les balises « generator » du HTML public, comparées aux dépôts officiels le 5 octobre 2026.
Page Shop du site actuel : bannière de démonstration floutée, produits fictifs Lotion Bottle, Juice, Jar mockup
La boutique en ligne : six produits du thème de démonstration (plantes, oreillers, lampe), ajoutables au panier. Personne n'y vend rien, mais tout son code tourne. Photo de bannière floutée.
Formulaire Booking Form du site actuel : prénom, nom, téléphone, e-mail, dates d'arrivée et de départ, nombre d'adultes
Un formulaire de réservation d'hôtel en anglais, reste du thème, public et déclaré à Google. Chaque formulaire oublié est une porte de plus à surveiller.

Google ne signalait encore rien

Le rapport de transparence Safe Browsing de Google ne levait aucun drapeau sur le domaine, avec une dernière analyse datée du 4 août 2026. Les navigateurs n'affichaient donc pas d'écran rouge. C'est une bonne nouvelle à moitié : Safe Browsing cherche les logiciels malveillants et l'hameçonnage, pas le spam de référencement. Un site peut être déclassé dans la recherche bien avant qu'un navigateur ne le bloque.

Impact

Ce que ça coûte à une boutique

Le site ne vend rien en ligne et ne stocke pas de carte bancaire. On pourrait croire qu'il n'y a rien à perdre. Il y a le nom du magasin.

La confiance

Un client qui cherche « Call'ade » et tombe sur une page de paris en vietnamien, sous le logo et le numéro du magasin, ne se dit pas que le site a été piraté. Il se dit que l'endroit est louche. La boutique a 867 avis à 4,9 sur 5 sur sa fiche Google de Villefranche : c'est cette réputation que le spam utilise comme vitrine.

Google

Les règles anti-spam de Google visent précisément ce cas : contenu injecté par un tiers, liens cachés, pages créées pour manipuler le classement. Le site risque une action manuelle, ou plus simplement un déclassement, sur les recherches qui comptent pour lui : « réparation téléphone Villefranche-sur-Saône » et son propre nom. Et le site aggravait son cas lui-même, en déclarant les 32 articles de casino dans son sitemap.

Les clients

Les liens de spam renvoient vers des marchés du darknet et des sites de jeu, publiés sous un domaine que les clients du magasin ont des raisons de croire sûr. Personne n'a été victime à ma connaissance. Le risque, lui, est en ligne tant que les pages le sont.

Intérieur de la boutique de Villefranche : comptoir arrondi, sol en bois clair, mur d'étagères en vague éclairée, grande vitrine sur la rue. Personne floutée au comptoir.
Ce que le client voit en entrant rue de la Gare. Le site compromis parle au nom de cette boutique-là. Photo de la fiche Google, personne floutée.

Plan de nettoyage

Six étapes, dans cet ordre

L'ordre compte. Nettoyer avant de changer les accès, c'est laisser la porte ouverte à celui qui a déjà la clé.

  1. Changer tous les accès, le même jour

    Hébergement, base de données, comptes du site, messagerie, registrar du domaine. Supprimer les comptes de publication que personne ne reconnaît. Activer la double authentification partout où elle existe. Tant qu'un seul mot de passe ancien survit, le nettoyage peut être défait dans la nuit.

  2. Garder une copie hors ligne, pour preuve

    Une sauvegarde complète du site et de la base, rangée hors du serveur et jamais remise en ligne. Elle sert à dater l'intrusion plus tard, ou à répondre à un assureur.

  3. Mettre à jour, ou mieux, retirer

    WordPress, Elementor et WooCommerce avaient du retard. Mais la vraie mise à jour, c'est la suppression : WooCommerce et trois packs d'extensions tournaient pour une boutique en ligne qui n'existait pas.

  4. Nettoyer le contenu

    Supprimer les 32 articles de casino, fermer les commentaires, retirer le bloc de liens caché de l'accueil, vider les comptes inconnus. Vérifier aussi les fichiers du thème et des extensions, là où une porte dérobée se cache d'habitude.

  5. Faire sortir le spam de Google

    Chaque ancienne adresse de spam répond « supprimé » (code 410), un sitemap neuf ne déclare que les vraies pages, l'outil de suppression de la Search Console accélère pour les plus visibles.

  6. Surveiller, puis vérifier

    Search Console (actions manuelles, problèmes de sécurité, couverture), alertes de connexion, contrôle des en-têtes. Vérifications à J+1, J+7 et J+30, puis chaque mois.

J'ai aussi recommandé de ne pas migrer WordPress vers le nouveau site. Une base WordPress compromise peut garder une porte dérobée dans un fichier de thème, une option de la base ou un compte discret. La recopier, c'est la déplacer. Le contenu utile du magasin tenait en neuf pages : il est plus sûr de le réécrire que de le transférer.

Refonte

Moins de choses à attaquer

La meilleure protection d'une extension, c'est de ne pas l'installer. La refonte retire tout ce dont la boutique n'a pas besoin.

Le nouveau site est construit en Astro, en sortie statique : les pages sont fabriquées une fois, à la publication, puis servies comme de simples fichiers. Aucun code ne tourne quand un visiteur arrive, il n'y a pas de base de données à interroger depuis la page, pas d'extension à tenir à jour. Une faille de type WooCommerce n'a tout simplement nulle part où exister.

Le gérant garde la main sur ses prix et ses horaires grâce à une administration Payload, une application à part, sur une autre adresse, que le site ne mentionne nulle part. Quand il enregistre un prix, le site se reconstruit. Il n'y a qu'un compte à protéger, et il se protège avec un mot de passe long et une double authentification.

Site WordPress actuelNouveau site
Code exécuté à chaque visitePHP et base de donnéesAucun : des fichiers HTML déjà construits
ExtensionsUne dizaine, dont 4 packs pour ElementorAucune
AdministrationSur le même domaine que le siteApplication séparée, sans lien depuis le site
CommentairesOuverts, affichés avant modérationAucun
Formulaires5, dont un de démonstrationUn seul point d'entrée, avec champ piège et limite de débit
Comptes publicsListés par l'APIAucune API publique de comptes
En-têtes de sécuritéPresque tous absentsHSTS, interdiction des cadres, politique de contenu
Comparaison établie à partir du relevé du 5 octobre 2026 et de l'architecture de la maquette. Le site statique ne protège ni la messagerie, ni le compte du nom de domaine, ni les fiches Google : ces accès-là restent à sécuriser à part.

Ce choix a un coût honnête à dire : plus de module de blog en trois clics, plus d'extension à ajouter un soir pour tester une idée. Pour une boutique qui n'a jamais publié un article elle-même, et dont le blog a servi de porte d'entrée au spam, c'est un renoncement facile.