Avis de sécurité Ultimate Member
Si vous avez reçu un e-mail de ma part vous dirigeant vers cette page, c’est parce que votre site
web semble exécuter une version d’Ultimate Member (l’extension WordPress d’adhésion et de
profils utilisateurs, d’Ultimate Member, qui se trouve dans vos fichiers à
/wp-content/plugins/ultimate-member/) qui se situe dans la plage affectée par un problème de
sécurité connu. Cette page explique en quoi consiste le problème, comment déterminer s’il
s’applique à votre site, comment lire votre version sans vous laisser tromper, et vers quelle
version mettre à jour.
Le problème est CVE-2026-19423, une faiblesse d’élévation de privilèges non authentifiée dans les formulaires d’inscription et de profil de l’extension. Elle affecte les versions 2.6.7 à 2.12.1 d’Ultimate Member et est corrigée dans la 2.13.0, publiée le 24 août 2026. Si vous exécutez une version dans cette plage, mettez à jour Ultimate Member vers la 2.13.0 ou une version ultérieure. Aucun score CVSS n’a été publié pour ce problème (il a été attribué par WPScan sans vecteur de sévérité), je ne vais donc pas vous en citer un, et je n’ai connaissance d’aucun code d’exploitation public le concernant.
Les versions antérieures à 2.6.7 ne sont pas affectées par ce problème, et je tiens à être précis sur ce point plutôt que de laisser l’avis paraître plus large qu’il ne l’est. Il ne s’agit pas d’une faille présente depuis les débuts de l’extension : le chemin de code dont elle dépend a été introduit dans la 2.6.7. Une installation plus ancienne que la 2.6.7 n’est donc pas une cible ici, et je n’ai pas écrit aux sites qui en exécutaient une. Si votre version s’avère inférieure à 2.6.7, vous pouvez ignorer cet avis pour ce problème (même si maintenir à jour une extension aussi en retard vaut la peine pour d’autres raisons).
Avant toute chose, la condition qui détermine à quel point cela concerne votre site, car je préfère l’énoncer clairement plutôt que de laisser l’avis paraître plus grave qu’il ne l’est : ce problème n’atteint qu’un site où l’un de vos formulaires d’inscription ou de profil Ultimate Member propose à la personne qui le remplit un choix de rôle, et où l’inscription est ouverte au public. Une configuration standard d’Ultimate Member ne place pas de sélecteur de rôle sur son formulaire d’inscription (un administrateur doit l’ajouter délibérément), de sorte que de nombreux sites exécutant une version affectée ne sont pas du tout exposés. Je peux lire la version de votre extension depuis un fichier public, mais je ne peux pas voir comment vos formulaires sont construits ni si l’inscription est ouverte ; cet avis est donc un avertissement préventif et non un constat confirmé concernant votre site.
Un mot sur l’urgence, car il s’agit d’un avis conditionnel. Si aucun de vos formulaires Ultimate Member ne permet à un visiteur de choisir un rôle, la mise à jour relève de la maintenance ordinaire des extensions. Si l’un d’eux le permet, et que l’inscription est ouverte, veuillez traiter la mise à jour comme une priorité : dans cette configuration, un visiteur créant un compte pour lui-même pourrait attribuer à ce compte des privilèges élevés, potentiellement jusqu’à un niveau équivalent à celui d’un administrateur, sans aucun accès préalable à votre site. C’est une conséquence sérieuse là où elle s’applique, et c’est pourquoi j’écris au lieu de classer cela en basse priorité ; mais elle ne s’applique que dans les conditions ci-dessus, et la mise à jour la supprime indépendamment de celles-ci.
Il s’agit d’une faille de l’extension, pas du cœur de WordPress. Un WordPress parfaitement à jour ne vous protège pas si l’extension Ultimate Member elle-même est sur une version affectée.
Ce message est-il légitime ?
Oui. Il s’agit d’un avis de bonne foi, dans le cadre d’une divulgation responsable, émanant d’un chercheur en sécurité indépendant. Je ne vous demande pas d’argent, de mots de passe ni d’accès à votre site, et je n’ai pas tenté de m’y introduire, de m’y inscrire ni d’exploiter quoi que ce soit.
Tout ce que j’ai fait, c’est consulter des pages et des fichiers que votre site sert à chaque visiteur (de la même manière que votre page d’accueil est publique) et noter le numéro de version que l’extension publie. Je n’ai spécifiquement pas créé de compte, soumis de formulaire d’inscription ou de profil, ouvert de session, ni envoyé quoi que ce soit à la fonctionnalité concernée. Rien dans cette vérification ne touche vos données, votre espace d’administration ni aucune partie privée de votre site (plus de détails dans Ce que j’ai fait et n’ai pas fait ci-dessous).
Si vous souhaitez vérifier qui je suis, consultez les coordonnées au bas de cette page et la page À propos.
Pourquoi cela compte
Ultimate Member construit les pages d’inscription, de connexion et de profil des membres sur de très nombreux sites WordPress. Quand quelqu’un s’inscrit, l’extension décide du rôle que son nouveau compte doit recevoir. Sur un formulaire qui propose un sélecteur de rôle, elle est censée n’accepter que les rôles que ce formulaire a été configuré pour autoriser.
Dans les versions affectées, lorsque la liste des rôles autorisés d’un tel formulaire se retrouve vide, l’extension ne rejette plus le rôle soumis par le visiteur. Elle conserve cette valeur et ne la vérifie que par rapport aux rôles que votre site possède, et non par rapport aux rôles que le formulaire était censé proposer. La conséquence est qu’un visiteur créant un compte pour lui-même pouvait l’orienter vers un rôle qu’il n’aurait jamais dû recevoir, jusqu’à un niveau équivalent à celui d’un administrateur.
La condition préalable, répétée parce que c’est la partie la plus susceptible d’être mal comprise dans un sens comme dans l’autre : cela nécessite un sélecteur de rôle sur un formulaire public, et une inscription ouverte. Ni l’un ni l’autre n’est le réglage par défaut. Le formulaire d’inscription standard d’Ultimate Member ne comporte pas de champ de rôle, donc sur une installation typique il n’y a rien à atteindre ici. Là où un administrateur a ajouté un champ de rôle et laissé l’inscription ouverte, la barrière n’est haute que de la question de savoir qui peut soumettre ce formulaire, c’est-à-dire, avec une inscription ouverte, n’importe qui.
Je décris cela au niveau dont un opérateur de site a besoin pour agir, et pas au-delà. Je ne publie pas les détails qui permettraient à quelqu’un de le reproduire, et je vous demanderais de ne pas l’essayer contre votre propre site ni celui de quelqu’un d’autre. Lire votre numéro de version et vérifier vos propres formulaires, comme décrit ci-dessous, vous dit tout ce qu’il faut pour décider quoi faire.
Si mon e-mail a cité ce problème, cela signifie que la version signalée par votre site se situe dans la plage 2.6.7 à 2.12.1. Je n’ai pas testé si votre site en particulier est exploitable, et je ne peux pas voir comment vos formulaires sont construits. Tout ce que j’ai observé, c’est la version.
Suis-je concerné ?
Deux questions en décident, dans cet ordre.
Premièrement : l’un de vos formulaires propose-t-il un sélecteur de rôle, avec l’inscription ouverte ?
C’est la question décisive, et vous seul pouvez y répondre, car elle dépend de la façon dont vos formulaires sont construits, ce qui n’est pas visible de l’extérieur. La vérification est tout à fait sûre et constitue tout l’objet de cette page.
- Dans votre tableau de bord WordPress, allez dans Ultimate Member puis Formulaires (Forms), et ouvrez un à un chacun de vos formulaires d’inscription et de profil.
- Examinez les champs de chaque formulaire à la recherche d’un champ de sélection de rôle (une liste déroulante ou un ensemble d’options permettant à la personne qui s’inscrit de choisir un rôle, parfois libellé « Rôle »). Sur la plupart des sites, il n’y en a aucun, car le formulaire d’inscription standard n’en inclut pas.
- Vérifiez si l’inscription est ouverte au public : Réglages puis Général puis Inscription, la case « Tout le monde peut s’enregistrer » (cœur de WordPress), et si votre formulaire d’inscription Ultimate Member est accessible aux visiteurs.
- Si aucun formulaire ne propose de sélecteur de rôle, ce problème n’atteint pas votre site, même sur une version affectée, bien que la mise à jour vaille toujours la peine au titre de la maintenance ordinaire.
- Si un formulaire quelconque propose un sélecteur de rôle et que l’inscription est ouverte, traitez la mise à jour comme une priorité (voir Comment mettre à jour). Si vous ne pouvez pas mettre à jour immédiatement, la mesure provisoire consiste à retirer le champ de rôle de tout formulaire public d’inscription ou de profil, ou à fermer l’inscription publique, jusqu’à ce que vous ayez mis à jour. La véritable correction est la mise à jour.
Veuillez ne pas essayer de reproduire le problème contre votre propre site ni celui de quelqu’un d’autre ; vous n’en avez pas besoin pour répondre à la question ci-dessus.
Deuxièmement : quelle version utilisez-vous ?
Vous n’êtes pas obligé de me croire sur parole. Il existe deux moyens publics de lire votre version et un dans le tableau de bord, et ils devraient concorder.
Depuis l’espace d’administration WordPress (source faisant foi) :
- Connectez-vous à votre tableau de bord WordPress (généralement à
yourdomain.com/wp-admin). - Allez dans Extensions puis Extensions installées.
- Trouvez Ultimate Member, l’entrée dont le dossier est
ultimate-member, et notez la version affichée sous son nom.
Depuis le manifeste public (aucune connexion nécessaire) : ouvrez
yourdomain.com/wp-content/plugins/ultimate-member/readme.txt
dans un navigateur et lisez la ligne Stable tag: près du début. C’est la source publique que
j’ai lue. Si cette adresse renvoie un « introuvable », essayez README.txt en majuscules ;
certains hébergeurs sont sensibles à la casse et quelques paquets livrent le fichier en majuscules.
Depuis le code source de votre page (aucune connexion nécessaire) : affichez le code source de votre page d’accueil et cherchez les feuilles de style propres à l’extension exactement à ces chemins :
/wp-content/plugins/ultimate-member/assets/css/um-styles.min.css?ver=...
/wp-content/plugins/ultimate-member/assets/css/um-profile.min.css?ver=...
Le numéro ?ver= attaché à ces fichiers est la version propre de l’extension. Ultimate Member
charge ces feuilles de style sur chaque page publique par défaut, que la page affiche ou non un
espace membres, donc votre page d’accueil suffit généralement.
Le piège à éviter ici, et il est facile d’y tomber. Ultimate Member embarque des copies de
plusieurs bibliothèques tierces à l’intérieur de son propre dossier d’extension, et chacune
porte son propre numéro de version, sans aucun rapport. Le code source de votre page peut montrer
une bibliothèque de recadrage d’images à ?ver=1.6.1, Font Awesome à ?ver=6.5.2 ou Select2 à
?ver=3.6.2, toutes sur des chemins commençant par le dossier de l’extension Ultimate Member. Un
opérateur qui cherche le dossier de l’extension dans le code source et lit la première valeur
?ver= qui apparaît peut facilement repartir avec l’un de ces numéros, qui n’a rien à voir avec la
version de l’extension. Ne lisez la version que sur les feuilles de style um- propres à
l’extension (um-styles, um-profile, um-account et similaires), et ignorez tout autre ?ver=
de la page. Si vous n’arrivez pas à obtenir un numéro lisible depuis le code source, c’est courant
et ce n’est le signe de rien : les extensions de cache et d’optimisation suppriment couramment la
valeur ?ver= ; utilisez alors la readme.txt ou l’écran d’administration.
Appliquez ensuite cette règle, en notant que les versions se comparent numériquement, pas alphabétiquement, de sorte que la 2.12.1 est plus récente que la 2.6.7 même si « 12 » semble plus petit que « 6 » en tant que texte :
- 2.6.7 à 2.12.1 : affectée, sous réserve de la question sur les formulaires ci-dessus. Mettez à jour vers la 2.13.0 ou une version ultérieure.
- 2.13.0 ou plus récente : déjà corrigée en ce qui concerne ce problème. Prendre la dernière version disponible est le meilleur choix.
- Toute version antérieure à 2.6.7 : non affectée par ce problème. La mise à jour vaut tout de même la peine au titre de la maintenance ordinaire.
Comment mettre à jour
L’extension est gratuite, toujours publiée et activement maintenue, la correction est donc une mise à jour normale. La voie la plus sûre est de mettre à jour via WordPress lui-même, après avoir fait une sauvegarde :
- Sauvegardez votre site (fichiers et base de données) avant toute modification. La plupart des hébergeurs proposent des sauvegardes en un clic, ou utilisez une extension de sauvegarde WordPress.
- Dans l’administration WordPress, allez dans Tableau de bord puis Mises à jour, ou Extensions puis Extensions installées. Si une mise à jour d’Ultimate Member est listée, installez-la depuis là.
- Si vous préférez la ligne de commande, WP-CLI fait la même chose :
wp plugin update ultimate-member(la commande utilise le nom du dossier, pas le nom affiché). - Si aucune mise à jour n’apparaît, vous pouvez obtenir la dernière version directement depuis la page de l’extension dans le répertoire WordPress.org, Ultimate Member, et mettre à jour via Extensions puis Ajouter une extension puis Téléverser une extension.
- Après la mise à jour, confirmez le nouveau numéro de version (2.13.0 ou ultérieure) avec les étapes ci-dessus, et créez un compte de test (ou vérifiez vos parcours existants de membres et d’inscription) pour vous assurer qu’ils fonctionnent toujours comme prévu.
Pendant que vous y êtes, il vaut la peine de confirmer que le cœur de WordPress et vos autres extensions sont à jour, car le même principe s’applique à tous.
Après la mise à jour : cela a-t-il déjà été utilisé contre vous ?
La mise à jour vers la 2.13.0 ou une version ultérieure clôt le problème, et pour beaucoup de sites c’est là toute la tâche. Cette page est un avis préventif, pas un rapport d’incident : je n’ai aucune visibilité sur ce qui s’est passé sur votre site, et je n’ai pas regardé.
Une vérification complémentaire vaut la peine d’être faite, et elle est conditionnée à la même question sur les formulaires. Étant donné que l’issue de ce problème, là où il s’applique, est un compte doté de privilèges élevés, si votre site avait un formulaire d’inscription ou de profil proposant un sélecteur de rôle pendant que l’inscription était ouverte et que vous exécutiez une version affectée, il vaut la peine de confirmer que personne ne l’a utilisé pour créer un compte qui ne devrait pas exister :
- Passez en revue vos comptes utilisateurs, en particulier les administrateurs. Dans Utilisateurs puis Tous les utilisateurs, filtrez par Administrateur (et tout autre rôle à privilèges élevés) et cherchez des comptes que vous ne reconnaissez pas, ou des comptes créés autour ou après la période où vous étiez sur une version affectée. Prêtez attention aux utilisateurs récemment inscrits dont le rôle est supérieur à celui d’un membre normal.
- Si vous trouvez un compte que vous ne pouvez pas expliquer, traitez-le comme n’importe quel accès non autorisé présumé : supprimez-le ou rétrogradez-le, forcez une réinitialisation du mot de passe de vos administrateurs, et si votre organisation dispose d’une équipe de sécurité informatique, associez-la.
- Si tout est comme il se doit, et surtout si aucun formulaire ne proposait de sélecteur de rôle au départ, la mise à jour seule suffit.
Pour être clair sur le cadre : il s’agit d’une auto-vérification, pas d’une déclaration selon laquelle votre site a été attaqué. Cet avis repose sur un numéro de version, pas sur une quelconque preuve d’incident.
Ce que j’ai fait et n’ai pas fait
Pour être totalement transparent sur la vérification derrière mon e-mail : je n’ai lu que des
fichiers que votre site sert déjà à chaque visiteur, à savoir votre page d’accueil et les adresses
des feuilles de style Ultimate Member qui y sont inscrites, ainsi que la readme.txt publique de
l’extension dans wp-content/plugins/ultimate-member/. Je n’ai pas accédé à votre espace
d’administration WordPress, à votre base de données, à la configuration de vos formulaires ni à
aucune partie privée du site.
En particulier, je n’ai jamais créé de compte, jamais soumis votre formulaire d’inscription ou de profil, jamais ouvert de session, et jamais rien envoyé à la fonctionnalité concernée. Rien n’a été soumis, testé ni exploité. Cela compte ici, car une soumission d’inscription est proche de l’action exacte que concerne ce problème ; « je n’y ai pas touché » constitue donc toute la différence entre une divulgation et une intrusion.
Je m’abstiens aussi délibérément de publier les détails qui aideraient quelqu’un à agir sur ce problème. La description ci-dessus s’arrête au niveau dont un opérateur de site a besoin, et je ne mets en lien aucun code de preuve de concept.
Il s’agit d’une observation fondée sur la version : votre site signale une version dans la plage 2.6.7 à 2.12.1. Ce n’est pas une affirmation que votre site était exploitable au moment où j’ai vérifié. Comme ce problème dépend de la façon dont vos formulaires sont construits et de l’ouverture de l’inscription (des choses que je ne peux pas voir), un site dans la plage affectée peut très bien ne pas être exposé du tout, et un site dans cette plage peut être protégé par d’autres moyens, comme un pare-feu applicatif web ou un correctif rétroporté. Si vous avez déjà mis à jour, ou remédié au problème d’une autre manière, aucune action n’est nécessaire, et je vous prie de m’excuser pour le dérangement.
Je n’ai pas de webmestre / je suis bloqué
Si vous n’êtes pas la personne qui maintient le site, veuillez transmettre cette page à celle qui s’en charge (votre développeur web, votre agence ou votre hébergeur). Elle reconnaîtra rapidement les étapes ci-dessus.
Si vous maintenez le site vous-même et que vous êtes bloqué, je serai heureux de vous orienter gratuitement dans la bonne direction. Contactez-moi via les coordonnées ci-dessous.
Contact
Evan Harris, chercheur en sécurité
- E-mail : security@mail.mcpsec.dev
- X : @Evan__Harris
- GitHub : eharris128
- LinkedIn : Evan Harris
Je contacte les opérateurs au sujet de problèmes comme celui-ci uniquement pour les aider à sécuriser leurs sites. Si vous préférez ne plus être contacté, dites-le-moi simplement et je le respecterai.
Références
Avis officiels et suivi
Éditeur / extension