Le chercheur de sécurité Dawid Golunski de Legal Hackers a publié les détails d’une vulnérabilité sur la réinitialisation du mot de passe non autorisée dans le noyau de WordPress. Golunski a démontré comment, dans certaines circonstances, un attaquant pouvait intercepter le courrier électronique de réinitialisation du mot de passe et accéder au compte d’un utilisateur.
Sa preuve du concept tire profit de WordPress en utilisant la variable SERVER_NAME pour obtenir le nom d’hôte du serveur afin de créer un en-tête From/Return-Path du courrier électronique de réinitialisation du mot de passe sortant.
Les principaux serveurs Web comme Apache définissent par défaut la variable SERVER_NAME en utilisant le nom d’hôte fourni par le client (dans l’en-tête HTTP_HOST):
Https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname
Parce que SERVER_NAME peut être modifié, un attaquant peut le configurer dans un domaine arbitraire de son choix, par exemple:
Attackers-mxserver.com
Ce qui donnerait à WordPress la configuration de $from_email à
Et donc entraîne un courrier électronique sortant avec le chemin de Return/Return-Path sur cette adresse malveillante.
Les résultats de cette attaque particulière dépendraient de l’environnement du serveur, de la configuration spécifique du serveur de messagerie et, dans certains cas, nécessiteraient une interaction de l’utilisateur en question. Le rapport de Golunski comporte une répartition plus spécifique des méthodes possibles qui pourraient être utilisées.
Après avoir signalé le problème à l’équipe de sécurité de WordPress en juillet 2016 et également via le site Web HackerOne, Golunski n’a vu aucun progrès et a décidé de publier les détails de la vulnérabilité au public.
Bien qu’il n’y ait pas encore de patch officiel, la star de sécurité de WordPress, Aaron Campbell, a déclaré que la question n’est pas aussi grave qu’elle puisse l’être.
« C’est un problème de priorité inférieure, mais nous en sommes conscients et c’est dans notre file d’attente« , a déclaré Campbell. Il a expliqué l’ensemble unique des conditions qui seraient nécessaires pour que cela soit une vulnérabilité grave.
« Pour que le problème ait un impact sur la sécurité, un serveur doit permettre à un en-tête fourni par l’utilisateur d’écraser $_SERVER[‘SERVER_NAME’]« , a déclaré Campbell. « Nous considérons que la configuration du serveur est insuffisante (comme « display_errors » le cas échéant sur un serveur de production), ce qui est malheureusement hors de notre contrôle ».
Campbell a testé ses serveurs personnels Apache et nginx et aucun d’entre eux n’a été autorisé pour cela. En plus d’avoir un serveur mal configuré, Campbell a déclaré qu’une des actions suivantes devait également se produire:
- Un utilisateur doit répondre à un email de réinitialisation de mot de passe
- Une réponse automatique doit répondre à l’e-mail et inclure l’original
- Un serveur de messagerie électronique doit être compromis ou surchargé et le message retourné à l’expéditeur avec le contenu intact
« Si votre serveur est vulnérable et que vous n’avez pas la capacité de réparer la configuration du serveur, vous n’avez toujours pas à apporter des modifications aux fichiers WordPress pour atténuer le problème« , a déclaré Campbell. « Un peu de PHP comme cela dans un plugin définira une adresse email statique de votre choix: »
add_filter( 'wp_mail_from', function( $from_email ) { return '[email protected]'; } );
Campbell a déclaré que tout changement apporté par WordPress au noyau se fera vraisemblablement via un ticket qui suit actuellement le problème sans perspective de sécurité. Il a déclaré qu’un correctif ne devrait probablement pas venir dans la prochaine version de sécurité, mais l’équipe y travaille activement. S’ils trouvent une bonne atténuation du problème, Campbell a déclaré qu’ils le partageront une fois qu’ils auront travaillé sur toutes les ramifications potentielles.
Et vous ? Que pensez-vous de cette vulnérabilité ?