title |
---|
Sécurité des SI - CVE 2023-38408 |
CVE ID | CVSS Score | Discovered | Affected Plugin | Vulnerability Type |
---|---|---|---|---|
CVE-2023-3460 | 07/04/2023 | Ultimate Member | Unauthorized Admin Access |
- Introduction
- Mécanisme général de la vulnérabilité
- Cible de sécurité pour CVE-2023-3460
- Architecture Typique
- Mitigation de la vulnérabilité
- Expérimentation de la vulnérabilité
- Annexe
Cette étude se concentre sur la CVE¹-2023-3460, une vulnérabilité critique affectant le plugin "Ultimate Member" de Wordpress, permettant une escalade de privilèges non autorisée. Ce plugin est largement répandu et utilisé pour la gestion des profils sur des sites WordPress. Cette vulnérabilité présente un risque majeur car elle permet à un attaquant d'obtenir des droits d'administrateur et donc le contrôle total du site. C'est pourquoi cette faille a été classée comme critique et notée 9.1 sur l'échelle CVSS par le NIST².
La CVE-2023-3460 exploite une faille dans la gestion des rôles et des permissions par le plugin. Dans WordPress, la fonction WP_Capabilities³ est utilisée pour gérer les rôles et les permissions des utilisateurs. Cette fonction permet aux administrateurs de définir des capacités spécifiques pour chaque rôle utilisateur. Toutefois, une mauvaise utilisation de cette fonction peut conduire à des vulnérabilités d'élévation de privilèges.
Dans le cas d'Ultimate Member, la vulnérabilité permet à un attaquant de contourner la vérification des capacités WP et d'obtenir un accès de niveau administrateur au site. Le plugin fonctionne en utilisant une liste prédéfinie de clés de métadonnées utilisateur qui ne devraient pas être manipulées par les utilisateurs. Cependant, cette approche de sécurité, basée sur des listes de blocage, est souvent insuffisante car elle laisse des possibilités de contournement.
WordPress gère les rôles et les permissions des utilisateurs à travers une structure appelée wp_capabilities
. Cette structure est une représentation sérialisée des différents rôles et permissions accordés aux utilisateurs. Par exemple, un administrateur aura un ensemble de capacités différent d'un éditeur ou d'un contributeur. Ces capacités sont stockées dans la base de données WordPress sous forme de tableaux sérialisés dans la table wp_usermeta
.
La faille CVE-2023-3460 trouve son origine dans l'implémentation de la gestion des rôles et des permissions par Ultimate Member. Le plugin opère en utilisant une liste prédéfinie de clés de métadonnées utilisateur que les utilisateurs ne devraient pas manipuler. Cette liste est utilisée pour vérifier si les utilisateurs tentent d'enregistrer ces clés lors de la création d'un compte. Cette approche est un anti-pattern de sécurité courant, où le blocage des entrées connues comme nuisibles (listes de blocage) peut sembler intuitif, mais s'avère plus complexe qu'attendu et laisse souvent place à des contournements de sécurité.
Ici, Ultimate Member utilise une vérification insuffisante des métadonnées soumises lors de l'enregistrement des utilisateurs. Le plugin utilise une fonction appelée is_metakey_banned
pour vérifier si les métadonnées soumises par l'utilisateur sont autorisées. Cette fonction vérifie si les métadonnées soumises sont présentes dans la liste des métadonnées bannies. Si c'est le cas, la fonction renvoie true
et l'enregistrement de l'utilisateur est bloqué. Sinon, la fonction renvoie false
et l'enregistrement de l'utilisateur est autorisé.
Cependant, Wordpress accepte certains caractères accentués comme des caractères par défaut. Si un utilisateur soumet des métadonnées avec des caractères accentués, la fonction is_metakey_banned
ne les détectera pas et l'enregistrement de l'utilisateur sera autorisé.
Le plugin Ultimate Member est largement utilisé dans divers environnements, allant de petits blogs personnels à de grands sites e-commerce. Aucune hypothèse spécifique ne peut être faite sur les compétences en sécurité informatique des utilisateurs finaux ou des administrateurs des sites.
Les serveurs hébergeant les sites WordPress sont généralement situés dans des centres de données sécurisés. Pour les sites personnels, la sécurité physique dépend de l'environnement individuel de l'utilisateur.
On suppose que le plugin Ultimate Member est installé et configuré correctement selon les instructions officielles. Le site WordPress est supposé être maintenu à jour, avec des mesures de sécurité de base en place.
- Administrateurs de site : Gèrent la configuration du plugin et la sécurité globale du site.
- Utilisateurs du site : S'inscrivent et interagissent avec le site via le plugin Ultimate Member.
- Développeurs : Personnalisent et étendent les fonctionnalités du plugin pour des besoins spécifiques.
- B1 Confidentialité des données utilisateur : Informations personnelles et identifiants de connexion.
- B2 Intégrité du site Web : Prévention contre les modifications non autorisées du contenu ou de la structure du site.
- B3 Intégrité du plugin Ultimate Member : Code source et fonctionnalités du plugin.
- M1 Accès non autorisé : Un attaquant obtient des privilèges d'administrateur via la vulnérabilité.
- M2 Injection de code malveillant : Modification du comportement du site par l'injection de code.
- M3 Fuite de données : Accès non autorisé aux données confidentielles des utilisateurs.
- M4 Détérioration de la réputation : Conséquences négatives sur la réputation due à une compromission du site.
Menaces | B1 (Confidentialité des données utilisateur) | B2 (Intégrité du site Web) | B3 (Intégrité du plugin Ultimate Member) |
---|---|---|---|
M1 Accès non autorisé | X | X | X |
M2 Injection de code malveillant | X | X | |
M3 Fuite de données | X | ||
M4 Détérioration de la réputation | X |
7.5 Les fonctions de sécurité
- F1 Gestion sécurisée des rôles : Mécanismes robustes pour la gestion des rôles et permissions.
- F2 Validation des entrées : Vérifications strictes des données soumises pour empêcher l'injection de données malveillantes.
- F3 Mises à jour et patchs de sécurité : Mise à jour régulière du plugin pour corriger les vulnérabilités connues.
- F4 Formation et sensibilisation : Informer les administrateurs et les utilisateurs sur les meilleures pratiques de sécurité.
- Héberge le site WordPress.
- Typiquement, un serveur Apache ou Nginx sur une machine Linux (peut varier selon l'hébergeur ou les préférences de l'administrateur).
- Connecté à Internet pour permettre l'accès au site web.
- Habituellement MySQL ou MariaDB.
- Stocke les données du site WordPress, y compris les données utilisateur gérées par Ultimate Member.
- WordPress installé avec le plugin Ultimate Member pour la gestion des profils utilisateurs, l'inscription et la gestion des rôles.
- Peut inclure d'autres plugins et thèmes, qui peuvent interagir avec Ultimate Member.
- Firewall et autres mesures de sécurité réseau pour protéger le serveur.
- SSL/TLS pour sécuriser les communications entre le client et le serveur.
- Les administrateurs du site qui gèrent et maintiennent le site WordPress et le plugin Ultimate Member.
- Les utilisateurs finaux qui s'inscrivent et interagissent avec le site.
- Services d'email pour les notifications et la gestion des comptes.
- Intégrations avec des réseaux sociaux ou d'autres plateformes pour la connectivité et les fonctionnalités étendues.
En tant qu'administrateur, voici des mesures concrètes qui peuvent être prises pour atténuer les risques associés à cette vulnérabilité.
Validation des Entrées Utilisateur : Implémenter des validations côté serveur pour vérifier toutes les entrées utilisateur, en particulier celles qui modifient les métadonnées comme wp_capabilities
. Utiliser des expressions régulières ou des listes de validation (whitelists) plutôt que des listes de blocage pour contrôler les entrées.
CAPTCHA et Limites de Taux : Intégrer des CAPTCHAs et des limites de taux sur les formulaires d'inscription pour prévenir les attaques automatisées. Vérifications Côté Client : Bien que les validations côté client ne soient pas suffisantes seules, elles peuvent aider à prévenir les attaques automatisées et à améliorer l'expérience utilisateur.
Surveillance des Logs : Mettre en place un système de surveillance des logs pour détecter toute modification suspecte des rôles d'utilisateurs ou des tentatives d'injection de métadonnées. Cela peut se faire en utilisant des outils d'analyse de logs.
Pare-feu d'Application Web (WAF) : Configurer un WAF⁴ pour bloquer les attaques connues et inconnues, y compris les attaques par injection de code malveillant. Systèmes de Détection d'Intrusion (IDS/IPS)⁵ : Mettre en place un IDS/IPS pour détecter les tentatives d'exploitation de la vulnérabilité.
Révision des Rôles Utilisateurs : Examiner régulièrement les rôles attribués aux utilisateurs pour détecter toute élévation de privilèges anormale. Restriction des Permissions : Limiter les permissions accordées par défaut aux nouveaux utilisateurs et exiger une validation administrative pour l'attribution de rôles élevés, en suivant le principe de moindre privilège. Voir des détails sur ce principe ici.
Application Rapide des Mises à Jour : Faire des mises à jour de sécurité régulières pour les plugins et WordPress lui-même.
Former les développeurs aux bonnes pratiques de sécurités citées précédemment, et les sensibiliser aux risques / impacts d'une mauvaise implémentation.
Un Makefile est disponible pour vous aider à lancer l'exploitation de la faille. Vous pouvez l'utiliser comme suit:
-
make up
pour lancer Wordpress avec toute les installations nécessaires. Après un temps d'attente, cela lancera un serveur Wordpress, le configurera et installera la version 2.6.5 du plugin Ultimate Member. Il vous sera alors possible de vous connecter à Wordpress sur la page Login avec les identifiantsadmin:password
. En allant sur l'onglet Users, vous pourrez voir que uniquement l'utilisateuradmin
est présent.Note: si vous avez
docker-compose
et nondocker compose
vous pouvez modifier le Makefile en conséquence (variable DOCKER_COMPOSE= docker-compose).
Puis, vous pouvez lancer l'exploitation de la faille:
-
make exploit
Vous pourrez alors vous connecter à Wordpress sur Login avec les identifiants donnés par l'exploit et observer dans l'onglet Users qu'un nouvel utilisateur a été créé avec le rôleAdministrator
. -
make down
pour arrêter le serveur Wordpress et supprimer les données.
make exploit
lance le scriptexploit.py
. Ce script agit en plusieurs étapes: Détails Techniques de l'Exploit
1. Vérification de la Vulnérabilité : Avant de procéder à l'exploitation, le script vérifie si la version du plugin Ultimate Member installée sur le site cible est vulnérable, c'est-à-dire inférieure à la version 2.6.7.
2. Récupération du Nonce de Sécurité : Le script récupère un nonce de sécurité³ depuis la page d'inscription du site cible. Ce nonce est nécessaire pour que la requête d'inscription soit acceptée par WordPress. Le nonce est récupéré en analysant le code HTML de la page d'inscription.
3.Exploitation de la Vulnérabilité : Le script soumet ensuite une requête POST à la page d'inscription, incluant un paramètre manipulé (wp_càpabilities[administrator]=1
). Ce paramètre utilise un caractère accentué (à) pour contourner les contrôles de sécurité du plugin et sérialiser incorrectement les données, attribuant ainsi le rôle d'administrateur au nouvel utilisateur créé.
4. Confirmation de l'Exploit : Après l'envoi de la requête, le script vérifie si l'opération a réussi en analysant la réponse du serveur.
- CVE (Common Vulnerabilities and Exposures) : Système de référencement international pour les vulnérabilités de sécurité informatique. Plus d'informations.
- nvd.nist.gov : Base de données de référence pour les vulnérabilités de sécurité informatique. Site officiel.
- WP_Capabilities : Attribut sérialisé de WordPress utilisé pour gérer les rôles et permissions des utilisateurs. En savoir plus sur les rôles et capacités de Wordpress, et comment les utiliser
- Nonce de Sécurité : Jeton utilisé dans les communications informatiques pour empêcher certaines formes d'attaques, telles que les attaques de type CSRF. Détails ici.
- WAF (Pare-feu d'Application Web) : Outil de sécurité pour surveiller et filtrer le trafic HTTP entre un serveur web et Internet. Approfondissement.
- IDS/IPS (Systèmes de Détection et de Prévention d'Intrusion) : Dispositifs ou applications qui surveillent un réseau ou des systèmes pour détecter des activités malveillantes. Explications complémentaires.
- Cross-Site Request Forgery (CSRF) : Attaque qui force un utilisateur connecté à exécuter des actions non souhaitées sur une application web. En savoir plus.
Nom | Lien |
---|---|
NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
Version du package utilisé pour l'exploitation 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
Patch of the exploit | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
Review of the exploit | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
OWASP Top 10 Application Security Risks | https://owasp.org/www-project-top-ten/ |