julienbrs / exploit-CVE-2023-3460

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 07/04/2023 Ultimate Member Unauthorized Admin Access

Sommaire

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

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 avec les identifiants admin:password. En allant sur l'onglet Users, vous pourrez voir que uniquement l'utilisateur admin est présent. one_admin

    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 avec les identifiants donnés par l'exploit et observer dans l'onglet Users qu'un nouvel utilisateur a été créé avec le rôle Administrator.

    two_admin

  • 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é³ 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

  1. CVE (Common Vulnerabilities and Exposures) : Système de référencement international pour les vulnérabilités de sécurité informatique. Plus d'informations.
  2. nvd.nist.gov : Base de données de référence pour les vulnérabilités de sécurité informatique. Site officiel.
  3. 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
  4. 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.
  5. WAF (Pare-feu d'Application Web) : Outil de sécurité pour surveiller et filtrer le trafic HTTP entre un serveur web et Internet. Approfondissement.
  6. 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.
  7. 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.

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/

About


Languages

Language:PHP 70.0%Language:JavaScript 20.2%Language:CSS 8.6%Language:Sass 1.0%Language:Python 0.2%Language:Makefile 0.0%Language:Dockerfile 0.0%Language:Shell 0.0%