Définitions WordPress
Retrouvez tous les termes qui définissent l'univers du CMS Open Source WordPress
Le broken access control (contrôle d’accès défaillant) est une vulnérabilité de sécurité qui se produit lorsqu’un site web ne gère pas correctement les permissions des utilisateurs, permettant ainsi à des attaquants d’accéder à des informations ou d’exécuter des actions sans autorisation. Dans WordPress, cela peut se manifester par l’absence de vérifications de permissions ou de nonce sur les hooks et les fonctions, exposant ainsi des données sensibles ou des fonctionnalités critiques.
Dans WordPress, les hooks et les fonctions utilisés dans les plugins ou les thèmes ne sont pas sécurisés par défaut. Il revient au développeur de vérifier manuellement les permissions et de valider les requêtes. Par exemple, la fonction current_user_can
permet de s’assurer qu’un utilisateur a les droits nécessaires pour exécuter une action, tandis que wp_verify_nonce
et les fonctions associées (check_admin_referer
, check_ajax_referer
) valident les requêtes pour prévenir les attaques de type CSRF (Cross-Site Request Forgery).
Si ces vérifications ne sont pas mises en place, les utilisateurs malveillants peuvent exploiter ces failles pour accéder à des informations ou exécuter des actions critiques via des requêtes non autorisées.
Voici quelques exemples de hooks WordPress qui, s’ils ne sont pas sécurisés correctement, peuvent être exploités pour accéder à des fonctionnalités sensibles.
init
Exploitation : Un attaquant peut manipuler l’URL pour exécuter la fonction d’update sans être authentifié. Il suffit de visiter une URL comme suit :
admin_menu
Dans cet exemple, le hook admin_menu
est utilisé pour déclencher une fonction qui supprime une option spécifique d’un menu d’administration. Sans vérification de permission (current_user_can
) et sans nonce pour authentifier la requête, ce code est vulnérable aux attaques.
Exploitation : Une requête POST pourrait facilement être envoyée par un attaquant pour supprimer une option, sans nécessiter de connexion :
wp_ajax_wpa_update_post
Ici, nous utilisons le hook wp_ajax_wpa_update_post
pour une requête AJAX permettant de mettre à jour les métadonnées d’un post. Sans validation des permissions avec current_user_can
, même un utilisateur authentifié de bas niveau pourrait modifier n’importe quel contenu.
Exploitation : Un simple utilisateur authentifié (même un abonné) pourrait exécuter une requête AJAX pour mettre à jour les métadonnées de n’importe quel post :
wp_ajax_nopriv_wpa_toggle_feature
Cet exemple montre une fonction utilisant le hook wp_ajax_nopriv_wpa_toggle_feature
, qui permet aux utilisateurs non authentifiés de modifier une option spécifique. Sans vérification supplémentaire, cette fonction est vulnérable à des attaques, car n’importe qui peut déclencher la mise à jour des options.
Exploitation : N’importe quel utilisateur non authentifié peut envoyer une requête POST pour activer ou désactiver une fonctionnalité sans aucune validation.
Dans cet exemple, une route REST personnalisée est enregistrée, permettant de supprimer un utilisateur via une requête API. Le callback wpa_delete_author_user
utilise une mauvaise configuration du permission_callback
, ce qui rend cette route accessible à tout utilisateur sans aucune vérification.
Exploitation : N’importe quel utilisateur, même non authentifié, peut envoyer une requête POST à l’API REST et supprimer un utilisateur.
Pour éviter les vulnérabilités de Broken Access Control, il est crucial de mettre en place des vérifications appropriées des permissions et des nonces dans vos fonctions.
current_user_can
: cette fonction assure que l’utilisateur a les droits nécessaires pour effectuer une action. Sans cela, des utilisateurs malveillants pourraient accéder à des fonctionnalités restreintes.Exemple sécurisé :wp_verify_nonce
: l’utilisation des nonces permet de valider l’authenticité des requêtes. Cela protège vos actions contre les attaques CSRF.Exemple sécurisé :permission_callback
adéquat qui vérifie les droits des utilisateurs avant d’exécuter une action.Exemple sécurisé :Vous souhaitez travailler avec notre agence ?