Vue d'ensemble
Le nombre de cas graves et l'état du site tel qu'il a été évalué le 30 juillet 2026.
Inventaire du site
| Article | Valeur |
|---|---|
| Adresse du site | https://northgate-advisors.com |
| Version de WordPress | 7.0.2 |
| Serveur Web | nginx |
| Préfixe des tables de la base de données | wp_ (par défaut) |
| Pile | Thrive Theme (thème enfant actif), WooCommerce et Subscriptions, Amelia Booking, Fluent Suite (Forms, CRM, Support, SMTP), Formidable, Rank Math Pro, Real Cookie Banner Pro, Wordfence, Patchstack |
| Fichiers PHP | 47,005 |
| Tables de base de données | 355 |
| Comptes utilisateurs | 317 (dont 8 administrateurs) |
| Plugins | 54 actifs, 63 présents sur le disque |
| Thèmes | 7 (thrive-theme-child actif) |
| Taille totale | 4,8 Go |
Que s'est-il passé ?
Reconstitué à partir des registres d'accès au site et des journaux de son module de sécurité. Toutes les heures sont exprimées en UTC. Deux éléments sont plus importants que les événements individuels : la méthode d'intrusion n'a jamais été enregistrée, et l'alerte signalant l'existence de la porte dérobée est restée sans suite pendant six jours.
Passez la souris sur un marqueur pour voir de quoi il s'agit, ou cliquez dessus pour accéder aux détails ci-dessous.
-
Avant le 22juilletLe site a été piraté. Trois comptes administrateur ont été créés, que personne dans votre équipe ne reconnaît. Le chemin d'accès n'a pas été enregistré. Cela a été rendu possible par : quatre plugins dont les versions présentent des failles de sécurité connues, et un dossier « media » qui accepte et exécute du code PHP.
-
22 juillet, 03 h 20 UTCPremière connexion de l'attaquant. Compte
a4f2_71c9d038(adresse sur shellcode.lol) se connecte depuis203.0.113.41dès la première tentative, sans qu'aucune tentative précédente n'ait échoué. Le fait que la création du compte ait réussi dès la première tentative signifie que celui-ci a été créé par la personne qui l'a utilisé, et non deviné. -
23 juillet, 03 h 20 UTCConnexion du deuxième attaquant. Compte
8b16f402c7dese connecte depuis203.0.113.88. -
23 juillet, 04 h 48 UTCConnexion du troisième attaquant. Compte
site_admin(adresse à shelltool.invalid) se connecte depuis198.51.100.23. -
Du 23 au 26 juilletVotre équipe supprime les trois comptes. Supprimés un par un à partir de
198.51.100.9. Il n'y a plus aujourd'hui d'administrateur inattendu. -
27 juillet, 15 h 00 UTCUne modification des règles de protection du serveur a été enregistrée. La règle censée empêcher l'exécution de PHP dans le dossier « media » n'est pas active.
-
28 juillet, 01 h 03 UTCVotre propre analyse antivirus signale la présence de cette porte dérobée. Signalé à
wp-content/uploads/_9ce8098b.php, classé au niveau de gravité maximal. Les alertes par e-mail étaient activées et correctement configurées à ce moment-là ; une notification aurait donc dû parvenir à l'adresse opérationnelle de votre agence. -
30 juilletÉtat des lieux. Le fichier de la porte dérobée a disparu et aucun code malveillant n'a été détecté sur le site. L'alerte reste en attente de confirmation dans le scanner, et les conditions qui ont permis à la porte dérobée de fonctionner n'ont pas changé.
Indicateurs de compromission
Les éléments concrets liés à cet incident, accompagnés d'une indication précisant s'ils sont toujours d'actualité et ce qu'il convient d'en faire. Deux des sept éléments sont toujours d'actualité. Il est recommandé de vérifier les autres sur tout autre site que vous gérez, car un site copié conserve les vestiges de l'ancien.
Nous avons demandé cette adresse le 30 juillet et le serveur a renvoyé la réponse « introuvable ». Vérifiez sur vos autres sites si ce chemin d'accès existe et s'il y a un fichier PHP situé directement dans le dossier « media ».
L'identifiant de ce fichier précis, qui reste inchangé même si vous le renommez. Transmettez-le à votre hébergeur ou collez-le dans la barre de recherche de fichiers de votre plugin de sécurité pour retrouver ce même fichier sur un autre site.
Ces trois éléments ont été supprimés de ce site entre le 23 et le 26 juillet. Ouvrez la liste des utilisateurs de tous les autres sites que vous gérez et recherchez ces trois adresses, ainsi que tout ce qui se termine par « shellcode.lol » ou « shelltool.invalid ».
Ces trois adresses correspondent aux comptes de l'attaquant à partir desquels il s'est connecté. Aucune activité n'a été détectée depuis le 23 juillet. Bloquez-les au niveau de votre pare-feu et recherchez-les dans l'historique de connexion de vos autres sites.
Ce cas ne relève pas de l’histoire. Huit sessions administrateur provenant de cette adresse sont actuellement ouvertes et valides jusqu’au 11 août. Demandez dès aujourd’hui à votre organisme et à votre développeur d’applications s’il s’agit bien de la leur. Si personne ne la revendique, considérez que le site est toujours accessible à un tiers (H-2).
Communiqué à toute personne qui en fait la demande, confirmé le 30 juillet. Supprimez ce fichier dès aujourd’hui, puis modifiez tout ce qu’il contenait: le mot de passe de la base de données, les neuf clés et sels, ainsi que la clé Mailgun (C-1).
GIF89aCe qu'il faut rechercherVoici à quoi ressemblerait une variante de cette porte dérobée sur d'autres sites. Répertoriez le contenu du dossier « media » sur vos autres sites et considérez comme suspect tout fichier PHP qui s'y trouve, quel que soit son nom.
Conclusions
24 résultats, classés par ordre de gravité décroissante. Utilisez le filtre situé dans la barre ci-dessus pour affiner votre recherche en fonction de la gravité.
Votre mot de passe de base de données, toutes vos clés de sécurité et votre clé API de messagerie peuvent être téléchargés par n'importe qui
Une copie du fichier de configuration principal de WordPress a été laissée dans le dossier public avec une extension de fichier différente. Comme cette extension n'est pas .php, le serveur ne l'exécute pas, il transmet simplement le texte. Lorsque l'on interroge cette adresse sur Internet, on obtient le fichier dans son intégralité, qui contient le nom de la base de données, l'identifiant de l'utilisateur de la base de données, le mot de passe de la base de données, ainsi que les neuf éléments d'authentification clés et sels, ainsi que la clé d'envoi Mailgun. Nous avons vérifié que le fichier a été mis à disposition le 30 juillet 2026 et n'avons pas conservé de copie de son contenu.
Ce que cela signifie concrètement. La clé de messagerie permet à n'importe qui d'envoyer des e-mails qui semblent provenir de votre domaine, ce qui constitue un moyen tout trouvé de pratiquer le phishing à l'encontre de vos propres clients. Les clés d'authentification permettent à un attaquant de falsifier des sessions et des formulaires. Le mot de passe de la base de données est limité par le fait que celle-ci n'accepte que les connexions provenant du serveur lui-même et que le port de la base de données n'est pas accessible depuis l'extérieur, ce que nous avons vérifié ; il n'est donc pas directement utilisable depuis Internet, mais il devient immédiatement utilisable par quiconque parvient à s'introduire sur ce serveur.
wp-config.7 994 documents clients peuvent être téléchargés sans se connecter
Quatre dossiers distincts contiennent les documents des clients que le serveur web met à la disposition de toute personne qui en fait la demande. Nous avons vérifié qu'un fichier de chaque ensemble pouvait être téléchargé sans problème depuis l'Internet public, et nous n'en avons conservé aucun.
- 5 606 documents fiscaux dans
uploads/client-statements/, nommé dans une séquence simple (statement_5393.pdf,statement_3084.pdf). Le dossier n'est protégé par aucun moyen de sécurité et la numérotation est prévisible, ce qui permet de parcourir l'ensemble de la série. Les scanners automatisés procèdent ainsi systématiquement. - 27 factures dans
wp-content/billing_invoices_temp/, intituléinvoice-4395.pdfet d'autres similaires, tout aussi faciles à deviner. Le dossier contient bien une règle d'accès, mais celle-ci est écrite pour Apache alors que votre site fonctionne sous nginx ; elle n'a donc aucun effet. - 1 113 fichiers envoyés via vos formulaires dans
uploads/fluentform/. - 1 248 pièces jointes répartis dans 248 dossiers de tickets d'assistance dans
uploads/fluent-support/. Il s'agit des ensembles les plus sensibles parmi les quatre : les noms de fichiers eux-mêmes, visibles dans l'adresse, font référence à des attestations fiscales, des relevés bancaires, des polices d'assurance et des relevés de comptes d'investissement, chacun étant associé au nom de famille d'un client.
Une distinction est importante pour déterminer le degré d’urgence de chaque ensemble. Les documents fiscaux et les factures sont numérotés de manière séquentielle ; ainsi, n’importe qui peut les répertorier sans rien savoir de votre site. Les fichiers de formulaires et de tickets comportent une chaîne aléatoire dans leur nom ; ils ne peuvent donc pas être devinés un par un, mais rien n’empêche non plus d’y accéder : le nom suffit, et celui-ci peut être divulgué via l’historique du navigateur, les en-têtes de référence, les liens partagés, ainsi qu’à toute personne ayant accès à la base de données. L’obscurité n’est pas une protection.
Il s'agit de données relatives à la fiscalité, à la facturation et à la correspondance des clients, qui constituent des données à caractère personnel sensibles au sens du RGPD. Considérez la possibilité d'un accès non autorisé comme un risque réel et non théorique, étant donné que le site était également sous le contrôle des pirates au cours de cette même période.
Le dossier « media » exécute du code PHP, ce qui a permis à la porte dérobée de fonctionner, et il est toujours accessible
Votre module de sécurité tente effectivement d'empêcher l'exécution des fichiers PHP dans le dossier « media », mais il le fait à l'aide d'une règle .htaccess, or les fichiers .htaccess sont une fonctionnalité d'Apache que nginx ignore complètement. Toutes les règles de ce type sur ce site sont inactives, y compris celle-ci.
Nous l'avons vérifié directement. Un fichier PHP existant dans le dossier « media » a été sollicité depuis Internet et le serveur l'a exécuté au lieu de renvoyer son contenu. Le contrôle des règles de protection de votre site a abouti à la même conclusion le 27 juillet : l'exécution de code PHP dans le dossier « media » n'est pas bloquée.
C'est plus grave qu'il n'y paraît. La porte dérobée découverte le 28 juillet était un fichier PHP situé précisément dans ce dossier, dissimulé sous un GIF89a en-tête afin qu'il soit considéré comme une image lors du téléchargement. La suppression de ce fichier a permis de résoudre le problème. Tant que les téléchargements peuvent s'exécuter, la prochaine faille liée au téléchargement de fichiers dans l'un de vos 54 plugins produira à nouveau le même résultat.
wp-content/uploads/ vers PHP. Il suffit de quelques lignes dans la configuration du serveur, et c'est de loin le changement le plus important de cette liste. Ne vous fiez pas à un paramètre de plugin pour cela.Les trois comptes administrateur créés par les pirates disposaient d'un contrôle total sur le site
Trois comptes disposant de tous les droits d'administrateur se sont connectés au site entre le 22 et le 23 juillet. Leurs adresses e-mail indiquent les outils utilisés : shellcode.lol, shelltool.invalid, ainsi qu'un nom généré automatiquement associé à un nom de domaine d'apparence plausible. Chacun d'entre eux s'est connecté avec succès dès la première tentative, sans avoir essuyé d'échec préalable, ce qui exclut toute hypothèse de devinette de mot de passe et signifie que les comptes ont été créés par la personne qui les a ensuite utilisés.
Votre équipe a supprimé ces trois comptes entre le 23 et le 26 juillet, et il ne reste aujourd’hui aucun administrateur inattendu. C’est la bonne issue, mais un compte disposant de droits d’administrateur peut tout faire avant d’être supprimé : installer un plugin, modifier des fichiers de thème, consulter l’intégralité de la base de données, exporter des données clients. Partons du principe que tout cela était possible pendant ces quelques jours.
Une porte dérobée présentant un niveau de gravité maximal a été signalée par votre propre scanner, mais aucune mesure n'a été prise suite à cette alerte.
Le 28 juillet à 01 h 03, l'analyse anti-malware de votre site a signalé un fichier du dossier « media » comme malveillant, avec un niveau de gravité de 100. Le fichier était dissimulé sous la forme d'une image (il commençait par le texte GIF89a) et son code assemblait, lettre par lettre, les noms de fonctions dangereuses afin de déjouer les scanners. Ces fonctions permettaient d’accepter un fichier téléchargé, d’écrire des fichiers sur le disque et d’exécuter des commandes système. En clair : un outil permettant de télécharger n’importe quoi et d’exécuter des commandes sur votre serveur.
Le fichier a disparu du site aujourd’hui et nous avons vérifié que l’adresse renvoie désormais une réponse « page introuvable ». L’alerte figure toutefois toujours dans la liste des alertes nouvelles et non traitées ; or, la notification était activée avec une adresse de destination valide à ce moment-là, ce qui signifie que quelqu’un aurait dû recevoir un e-mail à ce sujet le 28 juillet. Ce même scan recense également 35 plugins et thèmes obsolètes, dont aucun n’a non plus fait l’objet d’une prise en compte.
Une console de débogage qui enregistre toutes les requêtes de base de données est accessible à une adresse publique
Un outil de diagnostic autonome est installé à la racine de votre site. Nous avons vérifié que l'adresse était correcte le 30 juillet. Cet outil ne fait pas partie de WordPress et n'utilise pas les identifiants de connexion à WordPress ; il est protégé par un mot de passe unique qui lui est propre. L'outil peut lire votre journal de débogage, réécrire votre fichier de configuration principal et enregistrer le texte complet des requêtes de base de données, c'est pourquoi SAVEQUERIES est activée dans votre configuration et pourquoi un fichier d'interception de la base de données se trouve dans wp-content.
Le texte des requêtes de base de données n’est pas un contenu anodin. Il contient des hachages de mots de passe, des identifiants de session et tout ce que vos formulaires transmettent, ce qui, pour ce site, inclut les données clients. Deux autres éléments aggravent encore la situation : la sauvegarde de configuration qui divulgue vos identifiants dans C-1 a été créée par ce même outil, et votre scanner de logiciels malveillants est explicitement configuré pour ignorer ce répertoire ; c’est donc le seul endroit du site qui n’est soumis à aucun contrôle.
Nous avons examiné son code et n'avons détecté aucun comportement malveillant caché : les actions sensibles sont protégées par un mot de passe et un jeton d'authentification. Le problème n'est pas qu'il soit malveillant, mais qu'il soit présent sur un site de production traitant des données fiscales.
wp-content/db.php fichier d'interception et le SAVEQUERIES paramètre du site en ligne. Si cela s'avère réellement nécessaire, limitez-le aux adresses IP de votre bureau au niveau du serveur et cessez de l'exclure des analyses anti-malware.Huit sessions d'administrateur provenant d'un serveur que personne n'a identifié, valables jusqu'au 11 août
Votre compte d'administrateur principal compte actuellement huit connexions simultanées. sessions, tous provenant de l'adresse 192.0.2.117 (un fournisseur d'hébergement, et non une connexion professionnelle), qui se présentaient tous comme node plutôt que dans un navigateur. Ils ont été créés par paires les 23, 24, 26 et 28 juillet et restent valables jusqu'au 11 août.
Ces sessions n'ont pas été créées par quelqu'un qui aurait saisi un mot de passe : le mot de passe enregistré pour ce compte est toujours au format ancien, et WordPress met automatiquement ce format à jour dès la première utilisation d'un mot de passe correct. Cela signifie donc qu'un élément crée des sessions d'administrateur par programmation. Nous avons écarté la connexion de gestion via WP Umbrella , qui utilise des adresses différentes et fonctionne différemment.
L'explication la plus probable est qu'il s'agit de votre propre intégration, étant donné qu'un compte utilisateur nommé « PortalApp » existe sur le site. Cela ferait de ce comportement un phénomène normal, bien que peu recommandable. L'autre possibilité est que ce compte ne vous appartienne pas, auquel cas il s'agit d'un accès administrateur permanent. Nous ne pouvons pas faire la distinction entre ces deux cas depuis l'extérieur, et la période durant laquelle les comptes des attaquants étaient actifs recoupe ces dates.
192.0.2.117 leur appartient, aujourd'hui. Si personne ne le revendique, considérez que le site reste accessible à un tiers. Dans tous les cas, mettez fin à toutes les sessions sur ce compte et veillez à ce que les intégrations utilisent un compte dédié doté uniquement des autorisations nécessaires, jamais celui de l'administrateur principal.Quatre plugins utilisent des versions présentant des failles de sécurité connues, et 35 mises à jour sont en attente
Votre scanner signale que ces quatre éléments utilisent une version pour laquelle une vulnérabilité a été rendue publique, ce qui signifie que les détails techniques sont accessibles à tous. Au total, 35 plugins et thèmes ne sont pas à jour, notamment l'ensemble de la suite Thrive, WooCommerce, Amelia et la suite Fluent.
C'est sans doute par là que l'intrusion a eu lieu. La porte dérobée s'est glissée sous la forme d'un fichier d'apparence d'image dans le dossier « media », ce qui correspond à la signature d'une faille dans la gestion des téléchargements ; or, Fluent Forms est le composant de ce site qui gère les fichiers téléchargés par les clients. Nous ne pouvons pas déterminer quelle faille a été exploitée sans consulter les journaux d'accès de votre serveur, mais le fait de conserver ces versions en place maintient la porte dérobée dans le même état qu'elle était le 22 juillet.
L'éditeur de fichiers intégré est activé, ce qui permet à n'importe quelle session d'administrateur d'exécuter du code
WordPress intègre un éditeur qui permet à un administrateur de modifier les fichiers des thèmes et des extensions directement depuis le navigateur. Sur ce site, cette fonctionnalité est activée. Cela signifie que toute session d'administrateur permet d'exécuter du code arbitraire, sans qu'il soit nécessaire de télécharger ou de transférer des fichiers.
Étant donné que trois comptes d'administrateur appartenant à des pirates étaient connectés au cours du mois de juillet, cette fonctionnalité était à leur disposition. Elle devrait être désactivée définitivement : les modifications légitimes doivent passer par le processus de déploiement de votre agence, et non par l'éditeur du navigateur.
define('DISALLOW_FILE_EDIT', true); au fichier de configuration. Ajoutez également define('FORCE_SSL_ADMIN', true);, qui fait actuellement défaut.Une attaque par force brute ciblant les noms réels de vos employés est en cours, et 7 administrateurs sur 8 ne disposent pas d'une authentification à deux facteurs.
Au cours des sept derniers jours, le site a enregistré 393 tentatives de connexion infructueuses provenant de 221 adresses différentes, auxquelles s'ajoutent 56 tentatives bloquées par le système de protection des connexions et 21 tentatives d'énumération des noms d'utilisateur. Si l'on examine l'historique complet du plugin, l'ampleur de la campagne est plus importante : le nom d'affichage Daniel a été pris pour cible environ 500 fois et Rossi Marta environ 179.
Ce qu'il faut retenir, c'est qu'il s'agit là de vrais noms de vraies personnes présentes sur votre site, et non pas des noms habituels admin des tentatives de devinette. Cela signifie que les pirates ont récupéré les noms d’auteurs sur vos pages et testent actuellement les mots de passe des comptes connus. Une adresse par nom, réparties de manière dispersée, à un rythme délibérément suffisamment lent pour passer pour du trafic normal.
Un seul de vos huit comptes d'administrateur dispose d'une authentification à deux facteurs activée. Pour les sept autres, seul un mot de passe correct constitue un obstacle, et les mots de passe sont justement ce que cette campagne vise à obtenir à terme.
Votre dossier contenant le jeton d'accès OneDrive est accessible en lecture publique
L'intégration OneDrive met en cache ses données d'autorisation dans un dossier sans contrôle d'accès, et nous avons constaté qu'un fichier qui s'y trouve était accessible depuis Internet. Le nom du fichier à lui seul révèle déjà l'adresse du compte associé et l'identifiant de votre tenant Microsoft. Dans l'état où nous l'avons examiné, le fichier de jeton était vide, mais sur un site en production, c'est à cet emplacement que se trouve un jeton d'accès valide à votre OneDrive.
Un jeton valide de ce type permet d'accéder en lecture et en écriture au stockage de documents connecté, sans mot de passe et sans déclencher de notification de connexion.
Huit comptes d'administrateur, dont deux n'ont pas été utilisés depuis des mois
Huit comptes disposent de tous les droits d'administrateur sur un site traitant des données fiscales et de paiement. Ces huit comptes correspondent tous à des personnes ou à des organisations avec lesquelles vous travaillez ; aucun n'est donc un compte malveillant, mais deux d'entre eux semblent inactifs.
- Un compte d'agence créé en octobre 2022, inactif depuis janvier 2025, dont le mot de passe enregistré est toujours au format ancien.
- Un compte d'assistance fournisseur créé le 21 mai 2026, utilisé une seule fois depuis une adresse au Bangladesh, puis inactif depuis. L'adresse correspond à celle de l'équipe d'assistance de l'un de vos fournisseurs de plugins ; il s'agit donc probablement d'un accès légitime mis en place par votre agence, mais ce compte ne devrait plus être actif.
Chaque administrateur inactif représente un jeu complet de clés dont personne ne s'occupe.
Un canal de gestion à distance reste associé à deux comptes administrateur, bien que son module soit désactivé
Un plugin de gestion de sites distants reste installé mais désactivé, et deux comptes administrateur conservent toujours ses paramètres de connexion, notamment une clé de connexion enregistrée. Ses tâches planifiées sont toujours enregistrées, et il a laissé un dossier contenant un clone du serveur dans le répertoire « media ».
Un outil de ce type est, par nature, un canal d'administration à distance. Lorsqu'il est désactivé, il n'est pas supprimé : les fichiers restent sur le disque et sa réactivation rétablit le canal. Il s'agit très probablement de la configuration de gestion propre à votre agence, ce qui est tout à fait normal, mais elle devrait soit être utilisée et à jour, soit être supprimée.
Du code exécutable et une ancienne copie en double d'un plugin se trouvent dans des dossiers qui ne devraient contenir ni l'un ni l'autre.
Quatre-vingt-onze fichiers de modèles PHP compilés ont été laissés dans le dossier « media » par un plugin de traduction qui n'est plus installé. Leur contenu est inoffensif, mais il s'agit de code exécutable dans un dossier qui ne devrait jamais en contenir, et comme le précise C-3, ce dossier exécute effectivement du code PHP sur ce serveur.
Par ailleurs, une deuxième copie complète du plugin OneDrive est disponible en version 3.5.2.1, alors que la version active est la 3.8.1. Elle n'est pas active, mais tous les fichiers qu'elle contient restent accessibles et exécutables, ce qui signifie que les failles de l'ancienne version persistent même si le plugin semble avoir été mis à jour.
Vos fichiers de configuration du serveur et votre journal de débogage sont accessibles au public
Trois fichiers décrivant la configuration de votre serveur sont mis à la disposition de toute personne qui en fait la demande. Nous avons vérifié ces trois fichiers le 30 juillet :
/.user.ini(112 octets), que votre scanner avait déjà signalé le 27 juillet et qui figure toujours parmi les problèmes non résolus. Elle révèle le chemin d'accès absolu du site sur le disque./.htaccess(1 901 octets), ce qui permet à un pirate d'accéder à l'intégralité de votre ensemble de règles, y compris les chemins d'accès que vous considérez comme protégés et le plugin de sécurité à l'origine de ces règles./wp-content/debug.log(220 octets), où sont consignées les erreurs PHP. Les journaux de débogage contiennent généralement des chemins d'accès aux fichiers, des extraits de requêtes et, parfois, des données transmises.
Aucune de ces informations n'est dangereuse en soi. Ensemble, elles constituent la phase de reconnaissance menée par un attaquant avant de choisir une technique, et elles sont collectées automatiquement par des outils d'analyse.
.log fichiers, au niveau du serveur. Sur Nginx, cela correspond à deux règles qui couvrent à la fois ces trois fichiers et de nombreux autres similaires.Toutes les règles de sécurité sur lesquelles s'appuie ce site ont été conçues pour un serveur web différent.
Nous avons détecté 24 fichiers de règles d'accès sur l'ensemble du site, créés par vos plugins de sécurité, de sauvegarde et de formulaires. Tous utilisent la syntaxe Apache. Or, votre serveur utilise nginx, qui ignore complètement ces fichiers.
Il s'agit d'une conséquence systématique plutôt qu'isolée : le blocage de PHP dans le dossier « media » (C-3), la protection du fichier de configuration, la Deny from all Le dossier des factures (C-2) et le dossier de mise en attente des sauvegardes apparaissent tous deux comme des protections actives dans le tableau de bord d’un plugin, alors qu’ils ne remplissent en réalité aucune fonction. C’est la seule et unique raison pour laquelle plusieurs constatations de ce rapport revêtent une gravité aussi importante.
Tout le monde peut créer un compte sur le site
Les inscriptions sont ouvertes, et les nouveaux comptes se voient attribuer le rôle d'« abonné ». Cela semble être un choix délibéré, compte tenu de la boutique, du système de réservation et des cours en ligne ; de plus, la liste des comptes correspond à celle de véritables clients : les pics d'inscriptions observés en février et mars coïncident avec la période des déclarations d'impôts.
Ce point figure ici car un formulaire d'inscription ouvert constitue la première étape classique des attaques visant à obtenir des privilèges plus élevés. Plusieurs plugins de ce site ont par le passé présenté des failles que seul un utilisateur connecté pouvait exploiter, et une inscription ouverte signifie que n'importe qui peut devenir un utilisateur connecté.
Quelques comptes utilisent des adresses e-mail jetables ou anonymes. Aucun d'entre eux ne dispose de privilèges.
Les identifiants des plugins désinstallés sont toujours stockés dans la base de données
Deux plugins qui ne sont plus installés ont laissé des identifiants : un gestionnaire de fichiers a laissé sa clé d'accès, et un plugin de sauvegarde a laissé des paramètres d'authentification HTTP enregistrés. Nous n'avons pas lu ces valeurs.
Un gestionnaire de fichiers mérite d'être mentionné pour une deuxième raison. Il permet un accès complet au système de fichiers depuis le navigateur, et on en trouve des traces à plusieurs endroits sur ce site, ce qui prouve qu'il a bien fonctionné ici à un moment donné. C'est le genre d'outil qui permet, à partir d'un seul compte administrateur compromis, d'obtenir un accès complet au serveur.
Les failles de configuration qui aggravent un incident au-delà de ce qui serait nécessaire
Trois éléments, qui, pris isolément, ne présentaient aucun danger, mais dont chacun a amplifié l'impact des événements.
- La journalisation complète des requêtes de la base de données est activée en environnement de production, ce qui explique pourquoi le journal des requêtes décrit dans H-1 contient des hachages de mots de passe et des données clients.
- La valeur par défaut
wp_préfixe de table, qui permet aux outils d'attaque automatisés de deviner les noms de vos tables sans avoir à les tester. - Les mises à jour automatiques étant désactivées, le site dépend entièrement du calendrier de mises à jour géré, et 35 mises à jour sont actuellement en attente.
Les identifiants de votre base de données sont en soi corrects : le mot de passe n'est ni vide ni ridiculement court, et les clés de sécurité sont uniques et n'ont pas conservé leurs valeurs par défaut. Il faut désormais les modifier uniquement parce que C-1 les a rendus publics.
Un dossier de plugins de sauvegarde est accessible sur le Web public, et nous ne pouvons pas voir ce qu'il contient
Ces deux adresses répondent à la requête au lieu de la refuser. Cela a plus d’importance qu’il n’y paraît : les plugins de sauvegarde enregistrent des archives complètes du site dans ces dossiers, et une seule archive contient l’intégralité de la base de données, c’est-à-dire tous les hachages de mots de passe, toutes les fiches clients et toutes les clés du site, le tout dans un seul fichier téléchargeable.
Nous tenons à préciser clairement les limites de ce que nous pouvons affirmer ici. Le contenu de ces dossiers échappe au champ d’observation de cette analyse ; nous ne les signalons donc ni comme exposés, ni comme sains. Ce que nous savons, c’est que les chemins d’accès sont actifs et que nous n’avons rencontré aucun blocage.
Spam dans les commentaires en attente de modération
Vingt-huit commentaires contenant des liens vers des sites de jeux d'argent et pour adultes se trouvent dans la file d'attente des spams. Le filtre les a tous interceptés, aucun n'a jamais été publié, et aucune de vos pages ne contient ce type de contenu. Il s'agit de spams entrants courants, répertoriés uniquement pour vous informer qu'ils ont été vérifiés.
Le contenu pointe toujours vers une adresse de préproduction
Dix cadres intégrés au contenu du constructeur de pages renvoient toujours vers un sous-domaine de préproduction. Cela ne constitue pas en soi une faille de sécurité, mais il convient de vérifier que le site de préproduction n'est pas accessible au public, car une copie d'un site contient généralement les mêmes données sans les modifications apportées lors de la maintenance.
Résidus de deux migrations d'hébergement et de plugins supprimés
Le site porte les traces visibles de son histoire : des tâches planifiées appartenant à un plugin de sécurité, un plugin de traduction, un journal d’activité et un outil de gestion qui ont tous disparu depuis longtemps, le nom d’une option qui conserve encore l’ancien préfixe de la table, plusieurs dossiers de cache obsolètes, une page de maintenance résiduelle faisant référence à l’ancien chemin d’accès du serveur, et une copie d’un fichier d’index. Quatorze dossiers aux noms aléatoires dans wp-content Elles peuvent paraître inquiétantes, mais il s’agit en réalité du cache des ressources du plugin de bannière de cookies, qui ne contient que du code JavaScript ; douze d’entre elles sont vides.
Il n'y a là aucune intention malveillante. C'est important, car c'est dans ce désordre que se cachent les fichiers malveillants, et parce qu'une personne qui consulte ce site à la hâte ne peut pas faire la différence.
Une vérification de la base de données ne peut pas être effectuée depuis l'extérieur
Les logiciels malveillants peuvent parfois se cacher au sein même du moteur de base de données, sous la forme d'un déclencheur ou d'une procédure stockée qui réinstalle une charge utile à chaque chargement d'une page. Il s'agit là de la seule catégorie de cachette qui ne peut être exclue d'après les informations disponibles ; ce cas est donc signalé comme « non résolu » plutôt que comme « nettoyé ».
Trois requêtes suffisent pour le déterminer en quelques secondes, en les exécutant sur la base de données en production :
SELECT TRIGGER_NAME, EVENT_OBJECT_TABLE, ACTION_TIMING, ACTION_STATEMENT FROM information_schema.TRIGGERS; SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION FROM information_schema.ROUTINES; SELECT EVENT_NAME, STATUS, EVENT_DEFINITION FROM information_schema.EVENTS;
Sur un site WordPress classique, ces trois éléments ne renvoient aucun résultat. Il convient de lire attentivement tout ce qui y est indiqué.
Les adresses que nous avons vérifiées sont accessibles au public
Chacune de ces demandes a été formulée sur Internet le 30 juillet 2026 et a reçu une réponse. Aucun contenu de fichier n'a été conservé.
Adresses exposées vérifiées 11 adresses
- /wp-config.php.wpdebugtoolkit-backupmot de passe de la base de données, toutes les clés, clé de messagerie
- /wp-content/uploads/client-statements/statement_5393.pdf1 sur 5 606 documents fiscaux
- /wp-content/billing_invoices_temp/invoice-4395.pdf1 sur 27 factures
- /wp-content/uploads/fluentform/1 113 formulaires envoyés, dont un vérifié
- /wp-content/uploads/fluent-support/ticket_140/1 sur 1 248 pièces jointes à un ticket
- /wpdebugtoolkit/console de journalisation des requêtes
- /wp-content/share-one-drive-cache/1.shortcodesdossier « token » accessible en lecture
- /.user.iniChemins d'accès au serveur divulgués
- /.htaccess1 901 octets, ensemble complet de règles divulgué
- /wp-content/debug.logJournal des erreurs PHP lisible
- /wp-content/updraft/Réponses concernant le dossier de sauvegarde, contenu inconnu
Contrôles réussis
Ce qui s'est avéré normal a été clairement indiqué, car il est tout aussi important de savoir ce qui a été écarté que de connaître les résultats.
Aucun code malveillant n'est présent dans les fichiers du site
Chaque fichier PHP a été analysé à la recherche de code caché ou chiffré, de code s'exécutant quel que soit le contenu envoyé par un visiteur, ainsi que de petits chargeurs réinstallant des logiciels malveillants supprimés. Rien n'a été détecté. Le cœur de WordPress, le thème actif, les trois plugins chargés automatiquement et les fichiers d'entrée du site sont tous tels qu'ils ont été fournis par leurs éditeurs, sans aucun code ajouté.
Les deux éléments de ce site capables d'exécuter du code arbitraire sont des outils légitimes, qui ont fait l'objet d'une analyse ligne par ligne : le gestionnaire d'extraits de code et la console de diagnostic dans H-1. Ces deux éléments soumettent cette fonctionnalité à une vérification par l'administrateur.
Vos pages et votre contenu sont propres : aucun lien injecté, aucun spam
Aucun script injecté, aucun lien caché, aucun spam destiné aux moteurs de recherche et aucun code de redirection dans aucune page ni dans aucun paramètre de page. Chaque cadre et chaque script intégré renvoie vers une destination attendue : votre propre site, vos outils d'analyse, votre bannière de consentement, Google Maps, YouTube et un outil de modélisation financière. Les liens sortants renvoient vers les autorités fiscales cantonales et fédérales suisses, Wikipédia et d'autres sites similaires. Aucun élément de votre contenu publié n'a été modifié.
Aucune persistance cachée dans la base de données
C'est la vérification la plus importante après une intrusion, car c'est celle qui résiste au nettoyage des fichiers. Les dix extraits de code stockés ont tous été lus dans leur intégralité et sont tous des travaux légitimes, soit les vôtres, soit ceux de votre agence. Aucune tâche planifiée ne contient de code. Aucun paramètre ne renferme de charge utile encodée. Chaque plugin actif dispose d'un dossier correspondant sur le disque ; il n'y a donc aucun plugin caché s'exécutant uniquement à partir de la base de données. Les paramètres d'adresse de votre site sont corrects et aucun changement d'adresse e-mail de l'administrateur n'est en attente.
Chaque source de mise à jour d'un plugin renvoie à son véritable éditeur, et il n'y a aucun signe de copies piratées de plugins, qui constituent un moyen courant pour les logiciels malveillants de s'introduire sur un site avec le consentement même de son propriétaire.
Votre site n'est pas utilisé pour envoyer du spam
Le volume de courrier reste stable, entre 11 000 et 14 000 messages par mois depuis plus de trois ans, ce qui correspond au calendrier de diffusion de votre newsletter, avec les pics habituels en janvier et en juillet. On ne constate ni pic soudain ni envoi inexpliqué ; l'accès obtenu par le pirate en juillet n'a donc pas été utilisé pour transformer le site en relais de spam. Cela signifie également que la réputation d'envoi de votre domaine reste intacte.
Il ne reste aucun administrateur inattendu, et aucun privilège caché n'a été accordé
Les 317 comptes ont tous été vérifiés au regard des autorisations qui leur sont attribuées. Les huit administrateurs appartiennent tous à votre équipe, à votre agence ou à un fournisseur de plug-ins, et aucun compte ne dispose d’autorisations accordées en dehors du mécanisme habituel. Le schéma d’enregistrement des clients correspond à votre activité, y compris le pic d’activité lié à la période fiscale. Les trois comptes de pirates décrits dans le document C-4 ont été supprimés, ce qui est confirmé.
Que faire, dans l'ordre ?
Classés par ordre de ce qui réduit le plus rapidement le risque. Les quatre premiers sont pour aujourd’hui.
- Supprimez la copie de la configuration qui a fait l'objet d'une fuite et procédez à la rotation des éléments qu'elle a exposés. Supprimer
wp-config.php.wpdebugtoolkit-backup, puis modifiez le mot de passe de la base de données, régénérez les neuf clés d'authentification et les sels, et générez une nouvelle clé API Mailgun. Le rotation C'est là l'essentiel : le fichier a pu être lu, ces valeurs doivent donc être considérées comme connues. - Restriction de l'accès public aux documents des clients. Bloc
uploads/client-statements/,billing_invoices_temp/,uploads/fluentform/etuploads/fluent-support/sur le serveur web, puis ne servez ces fichiers qu'à l'aide d'un script qui vérifie l'identité de la personne qui les demande. Demandez à votre hébergeur les journaux d'accès de ces dossiers afin de pouvoir déterminer si quelqu'un les a effectivement consultés. - Empêchez PHP de s'exécuter dans le dossier « media ». Une seule règle Nginx. C'est cette condition qui a transformé un fichier téléchargé en une porte dérobée fonctionnelle, et elle est toujours en place.
- Identifiez l'adresse 192.0.2.117 et mettez fin à toutes les sessions d'administrateur. Si personne ne revendique cette adresse, partez du principe qu'un intrus dispose toujours d'un accès administrateur et agissez en conséquence. La fermeture de toutes les sessions se fait automatiquement lorsque vous effectuez la rotation des clés à l'étape 1.
- Mettez à jour les quatre plugins présentant des failles de sécurité connues (Fluent Forms, Google Tag Manager, Loco Translate, Widget for Google Reviews), puis procédez aux 31 mises à jour restantes en attente.
- Exigez l'authentification à deux facteurs pour les huit comptes administrateur et réinitialisez leurs mots de passe. À l'heure actuelle, un seul d'entre eux dispose d'un deuxième facteur d'authentification, alors qu'une attaque par force brute visant les noms de vos collaborateurs est en cours.
- Désactiver l'éditeur de fichiers. Ajouter
DISALLOW_FILE_EDITetFORCE_SSL_ADMINdans le fichier de configuration. - Supprimez la console de diagnostic du site en production, ainsi que le fichier d'interception de la base de données et le paramètre d'enregistrement des requêtes. Si elle doit rester en place, limitez son accès par adresse IP et cessez de l'exclure des analyses de logiciels malveillants.
- Traduisez les règles de protection dans Nginx. Les 24 fichiers de règles d'accès de ce site sont tous écrits pour Apache et ne servent à rien. Tant qu'ils n'auront pas été traduits, plusieurs protections que vous croyez actives ne le sont pas.
- Réduisez le nombre d'administrateurs et fermez le canal de gestion à distance, ou vérifiez qu'il est effectivement utilisé. Supprimez les comptes inactifs des agences et des fournisseurs.
- Nettoyez les fichiers résiduels: les fichiers de modèles compilés dans le dossier « media », l'ancienne copie du plugin (en double), le dossier contenant le jeton OneDrive exposé, les identifiants laissés par les plugins supprimés et les tâches planifiées orphelines.
- Demandez à votre hébergeur les journaux d'accès au serveur web correspondant à la période du 15 au 28 juillet. C'est la seule source qui peut révéler la requête à l'origine de l'installation de la porte dérobée, ce qui vous permettra de vérifier que le point d'entrée est bel et bien fermé et non pas simplement inactif. Faites-en la demande sans tarder, car les délais de conservation sont généralement courts.
Qu'est-ce qui empêcherait que cela ne se reproduise ?
Dix des points soulevés ci-dessus trouvent leur réponse dans des éléments déjà présents dans votre tableau de bord « WP Umbrella ». Trois d’entre eux font actuellement l’objet d’un suivi. Les sept autres ne nécessitent qu’un simple réglage, et chaque ligne ci-dessous renvoie directement à la page correspondante.
Activer le journal d'activité
Il enregistre les connexions, les nouveaux comptes, les nominations d'administrateurs, les modifications de paramètres et les modifications de fichiers, en indiquant à chaque fois l'adresse et l'heure. Ces données sont conservées en dehors de votre site, de sorte que rien sur le site ne puisse les effacer.
Deux contrôles automatiques lui transmettent des informations. L'un signale un compte administrateur qui n'a pas été créé par WordPress, ce qui correspond exactement aux trois comptes de juillet (C-4). L'autre vérifie si votre serveur respecte réellement vos règles d'accès, ce qui correspond à M-5, et explique donc pourquoi le dossier « media » exécute toujours du code PHP (C-3). Il aurait également permis d'identifier la personne à l'origine des huit sessions provenant de l'adresse 192.0.2.117 (H-2).
Activer la limitation du nombre de tentatives de connexion et bloquer l'énumération des utilisateurs
La campagne dans H-5 ne fonctionne que parce qu'elle utilise les vrais noms de vos collaborateurs. Le blocage de l'énumération empêche vos pages d'auteur et l'API REST de les diffuser, et la limite de débit bloque une adresse après quelques échecs. Profitez-en pour activer l'option « Masquer les messages d'erreur de connexion » sur cette même page.
Aucune de ces trois méthodes ne remplace l'authentification à deux facteurs exigée par H-5, que nous ne proposons pas.
Activer / Désactiver l'éditeur de fichiers de thèmes et de plugins
C'est exactement la solution décrite par H-4 : un simple bouton à bascule au lieu d'une modification du fichier wp-config.php. Une session administrateur disposant de cet éditeur permet de modifier n'importe quel fichier de thème ou de plugin directement depuis le navigateur, ce que les comptes de juillet auraient pu faire.
Activer les mises à jour automatiques
Ils appliquent les mises à jour selon un calendrier défini, prennent des photos de vos pages clés avant et après, et annulent une mise à jour lorsque les pages changent. C'est précisément ce dernier point qui explique pourquoi 35 mises à jour ont pu s'accumuler (M-8).
Votre liste de vulnérabilités est déjà disponible
Les quatre plugins mentionnés dans H-3 figurent sur cette page avec leur avis de sécurité, et y figuraient déjà avant le début de cette analyse.
Il en allait de même pour l'alerte de niveau 100 concernant une faille de sécurité le 28 juillet. Aucune des deux n'a été consultée. Renseignez-vous auprès de votre agence pour savoir qui consulte cette page et à quelle fréquence, car c'est la seule chose qu'aucun paramètre ne peut faire à votre place.
Les plugins et thèmes désactivés sont déjà pris en compte
Le plugin de gestion à distance de la version M-2 et l'ancienne copie en double de OneDrive de la version M-3 sont tous deux pris en compte dans ce décompte.
Cela vous indique qu'ils existent. Cela ne vous dit pas que M-2 détient toujours une clé de connexion liée à deux comptes administrateur, c'est pourquoi il s'agit ici d'un constat et pas simplement d'un chiffre.
Vous souhaitez que nous le nettoyions pour vous ?
Si vous préférez ne pas vous charger vous-même de cette liste, nous pouvons nous occuper de la mise en conformité.
Ce que nous faisons
- Mesures de confinement : supprimer la copie de la configuration qui a fait l'objet d'une fuite et mettre fin à toutes les sessions actives.
- Mettez à jour le mot de passe de la base de données, toutes les clés d'authentification et la clé API de messagerie.
- Restreindre l'accès public aux documents fiscaux, aux factures, aux pièces jointes des formulaires et des tickets, ainsi qu'au dossier « token » au niveau du serveur.
- Bloquez l'exécution du PHP dans le dossier « media » à l'aide d'une règle de serveur qui ne dépende pas des paramètres du plugin.
- Réinstallez le cœur de WordPress et tous les plugins à partir des sources officielles, puis appliquez les mises à jour en attente.
- Supprimez la console de diagnostic, la copie du plugin en double et les fichiers exécutables restants.
- Nous allons procéder à une nouvelle analyse complète du site et vous remettre un rapport comparatif « avant/après ».
- Harden : désactivation de l'éditeur de fichiers, activation forcée du protocole HTTPS dans l'espace d'administration, mise en place de l'authentification à deux facteurs pour les administrateurs.
Ce que nous attendons de vous
- Accès SFTP ou FTP au site.
C'est tout ce dont nous avons besoin pour commencer. Tout le reste (rotation des identifiants, fermeture du point d'entrée, renforcement de la sécurité) est pris en charge dans le cadre de la phase de nettoyage.