Le 16 janvier 2023, l’équipe Wordfence Threat Intelligence a divulgué de manière responsable plusieurs vulnérabilités dans Menu rapide du restaurant, un plugin WordPress qui permet aux utilisateurs de configurer des menus de restaurant sur leurs sites. Ce plugin est vulnérable à l’autorisation manquante, à la référence d’objet directe non sécurisée, à la falsification de requête intersite ainsi qu’au script intersite dans les versions jusqu’à 2.0.2 incluses.
Nous avons constaté que les informations de contact n’étaient pas facilement disponibles pour le fournisseur, nous avons donc contacté l’équipe de sécurité du plugin WordPress directement le 16 janvier 2023 pour signaler les problèmes de sécurité. L’équipe a accusé réception de notre e-mail le 18 janvier 2023. Tous les problèmes ont été résolus dans la version 2.1.0, qui a été publiée le 20 janvier 2023. Malheureusement, le plugin est toujours fermé pour les téléchargements à ce stade, nous vous recommandons donc de télécharger manuellement la version corrigée de ce lien et mettre à jour le plugin, ou désinstaller complètement le plugin jusqu’à ce que le plugin ait été rétabli.
Nous avons publié une règle de pare-feu pour remédier au manque de vérification des autorisations le 16 janvier 2023. Prime, Se soucieret Réponse les clients ont reçu cette protection le même jour, tandis que les sites exécutant toujours la version gratuite de Wordfence recevront la même protection 30 jours plus tard, le 15 février 2023.
En raison de la nature des vulnérabilités de Cross-Site Request Forgery, qui impliquent d’inciter les administrateurs à effectuer des actions qu’ils sont autorisés à effectuer, il n’est pas possible de fournir une protection complète sans bloquer les demandes légitimes. En tant que tel, nous vous recommandons de mettre à jour dès que possible pour vous assurer que votre site est entièrement protégé contre tout exploit ciblant ces vulnérabilités.
Résumés des vulnérabilités
Le plugin Quick Restaurant Menu pour WordPress est vulnérable au contournement d’autorisation en raison d’une vérification de capacité manquante sur ses actions AJAX dans les versions jusqu’à 2.0.2 incluses. Cela permet aux attaquants authentifiés, avec des autorisations au niveau de l’abonné et au-dessus, d’invoquer les actions destinées à une utilisation par l’administrateur. Les actions comprennent la création, la mise à jour et la suppression d’éléments de menu et d’autres fonctions de gestion de menu. Étant donné que le plug-in ne vérifie pas qu’un ID de publication transmis à l’une de ses actions AJAX appartient à un élément de menu, cela peut entraîner une suppression/modification arbitraire des publications.
Le plug-in Quick Restaurant Menu pour WordPress est vulnérable à la référence d’objet directe non sécurisée dans les versions jusqu’à la version 2.0.2 incluse. Cela est dû au fait que lors de la suppression/modification d’un élément de menu, le plugin ne vérifie pas que l’ID de publication fourni à l’action AJAX est bien un élément de menu. Cela permet aux attaquants authentifiés, avec un accès de niveau abonné ou supérieur, de modifier ou de supprimer des messages arbitraires.
Le plugin Quick Restaurant Menu pour WordPress est vulnérable à Cross-Site Request Forgery dans les versions jusqu’à 2.0.2 incluses. Cela est dû à une validation nonce manquante ou incorrecte sur ses actions AJAX. Cela permet aux attaquants non authentifiés de mettre à jour les éléments de menu, via une demande falsifiée accordée, ils peuvent inciter un administrateur de site à effectuer une action telle que cliquer sur un lien.
Analyse de vulnérabilité
Quick Restaurant Menu est un plugin proposé par ThingsForRestaurants qui offre aux propriétaires de sites la possibilité de créer des menus pour différentes occasions telles que le déjeuner et le dîner, ainsi que la possibilité de tarifer les articles différemment par menu.
Dans le cadre des fonctionnalités du plugin, les éléments de menu peuvent être créés, supprimés et déplacés dans les menus. Des séparateurs peuvent être ajoutés aux menus pour séparer visuellement les différentes sections de menu les unes des autres. Les éléments de menu sont stockés sous forme de messages avec le type erm_menu_item
.
Plus précisément, le plug-in permet aux utilisateurs d’organiser les éléments de menu pour les menus via une méthode de glisser-déposer et utilise des actions AJAX pour y parvenir. Vous trouverez ci-dessous l’une de ces fonctions plus en détail :
function erm_delete_menu_item() { if (isset($_POST['post_id'])) { wp_delete_post( absint($_POST['post_id']), true); wp_send_json_success(); } exit(); } add_action( 'wp_ajax_erm_delete_menu_item', 'erm_delete_menu_item' );
Nous pouvons voir que cette fonction courte vérifie l’existence d’un post_id
paramètre dans la requête POST, convertit ce paramètre fourni en entier, puis supprime l’élément de menu avec cet identifiant. Cette fonction peut être appelée en envoyant une requête POST à /wp-admin/admin-ajax.php
qui contient le nom de l’action ainsi qu’un identifiant de publication.
POST /wordpress/wp-admin/admin-ajax.php HTTP/1.1
Host: 127.0.0.1
action=erm_delete_menu_item&post_id=49
Un moment pédagogique : des mesures de sécurité importantes
Nous allons utiliser cette fonction et cette vulnérabilité ci-dessus pour discuter de plusieurs mesures de sécurité qui doivent être prises pour sécuriser les actions AJAX.
Contrôles d’autorisation – Vérifiez les capacités de l’utilisateur
Les actions AJAX sont par défaut mises à la disposition des utilisateurs authentifiés. Cela signifie que l’action ci-dessus peut être utilisée par les abonnés. Cependant, il n’est pas courant que les abonnés modifient les menus des restaurants. Il est donc important que ces fonctionnalités soient protégées contre les abus en s’assurant que l’utilisateur effectuant l’action est autorisé à le faire. Une façon d’y parvenir est un contrôle de capacité via le utilisateur_actuel_can fonction, c’est-à-dire current_user_can(‘manage_options’).
D’autres fonctionnalités peuvent être jugées suffisantes, mais la capacité de gérer les options permet à un utilisateur d’accéder aux paramètres généraux d’un site WordPress et est souvent utilisée comme proxy. Un autre contrôle, plus approprié et plus restreint, serait current_user_can(‘edit_posts’, post_id), qui garantirait que l’utilisateur effectuant l’action demandée a la capacité de modifier le message avec l’ID fourni.
Cette vérification de capacité est absente de cette action et d’autres actions AJAX.
Protection contre la falsification des requêtes intersites – Vérification de l’intention
En plus de s’assurer qu’un utilisateur a l’autorisation d’effectuer une action, il faut également s’assurer qu’il avait l’intention d’effectuer l’action en premier lieu. Nous avons précédemment écrit sur l’importance d’implémenter correctement les vérifications nonce pour prévenir les vulnérabilités Cross-Site Request Forgery. En règle générale, le nonce est défini lorsqu’une action telle que glisser, ajouter ou supprimer un élément de menu est initiée dans le tableau de bord de l’administrateur ou la page correspondante du plugin. L’action AJAX traitant la requête doit vérifier que le nonce qui lui est fourni est correct, vérifiant ainsi que la requête a été lancée avec intention.
Les nonces peuvent être ajoutés à une URL directement via la fonction wp_nonce_url() ou via wp_create_nonce(). Pour la vérification du nonce, WordPress propose plusieurs options. L’une d’elles est la fonction check_admin_referer() qui accepte le nom de l’action protégée ainsi que le nom du nonce destiné à la protéger. Il vérifie le nonce ainsi que le référent en s’assurant que la demande provient d’une page d’administration. La deuxième option – check_ajax_referer() – vérifie le nonce et valide que la requête est une requête AJAX. Une fonction à usage général fournie aux développeurs est wp_verify_nonce(), qui attend un nonce comme argument et s’assure qu’il est correctement défini.
Cette protection contre les attaques Cross-Site Request Forgery est absente de cette action et d’autres actions AJAX dans le plugin.
Référence directe d’objet non sécurisée – Vérification de l’objet traité
Le plugin stocke les éléments de menu sous forme de messages avec le type erm_menu_item
. Dans l’action AJAX ci-dessus, il appelle le wp_delete_post
fonction pour supprimer définitivement ses éléments de menu. Cependant, il ne vérifie pas que l’élément supprimé est de type erm_menu_item
. De plus, le force_delete
L’indicateur est défini pour garantir que les éléments sont supprimés immédiatement.
Un moyen approprié de s’assurer que la suppression n’affecte pas les éléments sur lesquels l’utilisateur ne doit pas agir consiste à utiliser une vérification de type. WordPress fournit à cet effet la fonction get_post_type() pour récupérer le type de publication qui peut être utilisé pour vérifier que la publication est le bon type qui doit être modifié. Cela pourrait être utilisé en conjonction avec le contrôle de capacité current_user_can(‘edit_posts’, post_id) susmentionné qui vérifie que l’utilisateur qui lance l’action est autorisé à modifier la ressource, qui dans ce cas serait l’ID de publication fourni.
Mettre tous ensemble
Les actions AJAX du plugin ont été affectées par plusieurs vulnérabilités qui, lorsqu’elles sont combinées, pourraient entraîner des dommages importants sur un site avec une version vulnérable du plugin Quick Restaurant Menu installée. À elle seule, la vulnérabilité d’autorisation manquante permet aux abonnés de supprimer des éléments de menu, mais lorsqu’elle est combinée avec la référence d’objet direct non sécurisée, les vulnérabilités permettent la suppression de n’importe quelle page et/ou publication.
L’écusson
Les développeurs du plugin ont implémenté les correctifs suivants :
function erm_delete_menu_item() { if (!wp_verify_nonce(sanitize_text_field($_REQUEST['nonce']), 'erm_menu_actions' )) { wp_send_json_error(); } if (isset($_POST['post_id'])) { if (get_post_type(absint($_POST['post_id'])) != 'erm_menu_item') { wp_send_json_error(); } wp_delete_post( absint($_POST['post_id']), true); wp_send_json_success(); } exit(); } add_action( 'wp_ajax_erm_delete_menu_item', 'erm_delete_menu_item' );
En implémentant le nonce check
if (!wp_verify_nonce(sanitize_text_field($_REQUEST['nonce']), 'erm_menu_actions' ))
,
la fonction garantit désormais qu’un nonce approprié est défini, ce qui vérifie correctement l’intention et empêche les attaques Cross-Site Request Forgery de réussir. La fonction effectue également une vérification du type de publication avant d’effectuer la suppression, ce qui corrige la vulnérabilité Insecure Direct Object Reference qui permettait de supprimer des pages et des publications arbitraires. Désormais, un utilisateur ne peut supprimer des messages qu’avec le erm_menu_item
taper.
Une chose à noter est qu’il manque toujours une vérification d’autorisation appropriée. La fonction ne garantit pas que la personne effectuant l’action possède les capacités appropriées. Cependant, ceux-ci sont implicites grâce à l’utilisation d’un contrôle nonce. Tant que le nonce est correctement vérifié et qu’un erm_menu_actions
nonce ne peut pas être obtenu par des utilisateurs autres que ceux destinés à effectuer ces actions, il conclut que seuls les utilisateurs dûment autorisés devraient avoir accès à cette fonction. C’est le cas dans ce plugin qui rend l’exploitation de l’autorisation manquante peu pratique. Malgré cela, nous recommandons fortement aux développeurs de s’assurer que les vérifications de capacité sont utilisées comme principale méthode de contrôle d’autorisation, car un nonce pourrait avoir le potentiel d’être exposé à un moment donné plus tard dans le développement, ou par une vulnérabilité distincte.
Calendrier de divulgation
16 janvier 2023 – Sensibilisation initiale à l’équipe des plugins. L’équipe Wordfence publie une règle de pare-feu pour se protéger contre la vulnérabilité d’autorisation manquante. Clôture des mots Prime, Se soucieret Réponse les utilisateurs bénéficient de cette protection.
18 janvier 2023 – L’équipe accuse réception de nos constatations
20 janvier 2023 – La version 2.1.0 est publiée et fournit un correctif pour les vulnérabilités signalées. Le plugin est toujours fermé pour les téléchargements, cependant.
15 février 2023 – Les utilisateurs gratuits de Wordfence bénéficient de la même protection.
Conclusion
Dans l’article d’aujourd’hui, nous avons couvert plusieurs vulnérabilités dans le plug-in Quick Restaurant Menu qui pourraient être utilisées par les abonnés pour supprimer des publications et des pages arbitraires en raison de vérifications d’autorisation inappropriées.
Clôture des mots Prime, Se soucieret Réponse les utilisateurs ont reçu une règle de pare-feu le 16 janvier 2023 pour une protection renforcée. Les utilisateurs gratuits de Wordfence recevront cette règle après 30 jours le 15 février 2023. Quoi qu’il en soit, nous vous recommandons vivement de télécharger manuellement la version corrigée à partir de ce lien et mettre à jour le plugin, ou désinstaller complètement le plugin jusqu’à ce que le plugin ait été rétabli.
Si vous pensez que votre site a été compromis en raison de cette vulnérabilité ou de toute autre vulnérabilité, nous proposons des services de réponse aux incidents via Soins des mots. Si vous avez besoin que votre site soit nettoyé immédiatement, Réponse Wordfence offre le même service avec une disponibilité 24/7/365 et un temps de réponse d’une heure. Ces deux produits incluent une assistance pratique au cas où vous auriez besoin d’une assistance supplémentaire. Si vous avez des amis ou des collègues qui utilisent ce plugin, veuillez partager cette annonce avec eux et les encourager à mettre à jour la dernière version corrigée de Quick Restaurant Menu dès que possible.
Si vous êtes chercheur en sécurité, vous pouvez divulguez-nous vos découvertes de manière responsable et obtenez un ID CVE et obtenez votre nom sur le Classement Wordfence Intelligence Community Edition.
Source link