Share
## https://sploitus.com/exploit?id=5434DDF9-58E8-5271-BBBC-66EED3F5A6C8
---
title: "Sécurité des SI - CVE 2023-38408"
---

# Analyse et exploitation de la CVE-2023-3460

| CVE ID        | CVSS Score                                                 | Discovered | Affected Plugin | Vulnerability Type        |
| ------------- | ---------------------------------------------------------- | ---------- | --------------- | ------------------------- |
| CVE-2023-3460 | ![Critical](https://img.shields.io/badge/9.1-Critical-red) | 07/04/2023 | Ultimate Member | Unauthorized Admin Access |

## Sommaire

- [Introduction](#introduction)
- [Mécanisme général de la vulnérabilité](#mécanisme-général-de-la-vulnérabilité)
  - [Mécanisme de gestion des rÎles dans Wordpress](#mécanisme-de-gestion-des-rÎles-dans-wordpress)
  - [Mauvaise implémentation d'Ultimate Member](#mauvaise-implémentation-dultimate-member)
- [Cible de sécurité pour CVE-2023-3460](#cible-de-sécurité-pour-cve-2023-3460)
  - [HypothĂšses](#hypothĂšses)
  - [Utilisateurs typiques](#utilisateurs-typiques)
  - [Les biens à protéger](#les-biens-à-protéger)
  - [Les menaces](#les-menaces)
  - [Les fonctions de sécurité](#les-fonctions-de-sécurité)
- [Architecture Typique](#architecture-typique)
- [Mitigation de la vulnérabilité](#mitigation-de-la-vulnérabilité)
- [Expérimentation de la vulnérabilité](#expérimentation-de-la-vulnérabilité)
  - [Reproduction](#reproduction)
  - [Détails sur exploit.py](#détails-sur-exploitpy)
- [Annexe](#annexe)
  - [Glossaire](#glossaire)
  - [Sources](#sources)

## Introduction

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](https://nvd.nist.gov/vuln/detail/CVE-2023-3460) sur l'Ă©chelle CVSS par le NISTÂČ.

## Mécanisme général de la vulnérabilité

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.

### MĂ©canisme de gestion des rĂŽles dans Wordpress

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`.

### Mauvaise implémentation d'Ultimate Member

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é.

## Cible de sécurité pour CVE-2023-3460

### HypothĂšses

#### Sécurité organisationnelle

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.

#### Sécurité physique

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.

#### Sécurité logique

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.

### Utilisateurs typiques

- 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.

### Les biens à protéger

- 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.

### Les menaces

- 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.

#### Couverture des biens par les menaces

| 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é.

## Architecture Typique

#### Serveur Web :

- 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.

#### SystÚme de Gestion de Base de Données (SGBD) :

- Habituellement MySQL ou MariaDB.
- Stocke les données du site WordPress, y compris les données utilisateur gérées par Ultimate Member.

#### WordPress avec Plugin 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.

#### Réseau et Sécurité :

- 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.

#### Utilisateurs/Administrateurs :

- 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 Externes (optionnel) :

- 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.




## Mitigation de la vulnérabilité

En tant qu'administrateur, voici des mesures concrĂštes qui peuvent ĂȘtre prises pour attĂ©nuer les risques associĂ©s Ă  cette vulnĂ©rabilitĂ©.

#### 1. Restriction des Métadonnées Modifiables

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.

#### 2. SĂ©curisation des Formulaires d'Inscription

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.

#### 3. Suivi et Analyse des Journaux

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.

#### 4. Utilisation de Solutions de Sécurité Web Avancées

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é.

#### 5. Gestion des Permissions et des RĂŽles

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](https://www.cyberark.com/fr/what-is/least-privilege/).

#### 6. Mises à jour et Patches de Sécurité

Application Rapide des Mises Ă  Jour : Faire des mises Ă  jour de sĂ©curitĂ© rĂ©guliĂšres pour les plugins et WordPress lui-mĂȘme.

#### 7. Sensibilisation et Formation des développeurs

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.



## Expérimentation de la vulnérabilité

### Reproduction

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](http://localhost:8000/wp-login.php?) avec les identifiants `admin:password`. En allant sur l'onglet [Users](http://localhost:8000/wp-admin/users.php), vous pourrez voir
  que uniquement l'utilisateur `admin` est présent.
  ![one_admin](ressources/one_admin.png)


  Note: si vous avez `docker-compose` et non `docker 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](http://localhost:8000/wp-login.php?) avec les identifiants donnés par l'exploit et observer dans l'onglet [Users](http://localhost:8000/wp-admin/users.php) qu'un nouvel utilisateur a été créé avec le rÎle `Administrator`.

  ![two_admin](ressources/after_exploit.png)

- `make down` pour arrĂȘter le serveur Wordpress et supprimer les donnĂ©es.

### DĂ©tails sur exploit.py

- `make exploit` lance le script `exploit.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Ă©](https://developer.wordpress.org/apis/security/nonces/)Âł 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.

## Annexe

## Glossaire

0. **CVE (Common Vulnerabilities and Exposures)** : SystÚme de référencement international pour les vulnérabilités de sécurité informatique. [Plus d'informations](https://cve.mitre.org/).
1. **nvd.nist.gov** : Base de données de référence pour les vulnérabilités de sécurité informatique. [Site officiel](https://nvd.nist.gov/).
2. **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](https://developer.wordpress.org/plugins/users/roles-and-capabilities/), et [comment les utiliser](https://gist.github.com/octalmage/d748456cfd48db849207)
3. **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](https://developer.wordpress.org/apis/security/nonces/).
4. **WAF (Pare-feu d'Application Web)** : Outil de sécurité pour surveiller et filtrer le trafic HTTP entre un serveur web et Internet. [Approfondissement](https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/).
5. **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](https://www.cisco.com/c/en/us/products/security/intrusion-prevention-system-ips/index.html).
6. **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](https://owasp.org/www-community/attacks/csrf).


## Sources

| 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/ |