Blog · Ce que révèle l'audit gratuit
Les identifiants sont la moitié d'une connexion
Demandez à un site WordPress sa liste d'utilisateurs et, par défaut, il répond. L'identifiant de chaque auteur, dans une liste lisible par machine, à une adresse fixe. Les attaquants n'ont pas à deviner qui sont les comptes. Ils n'ont qu'à deviner les mots de passe.
D'où vient la liste, comment l'audit gratuit la signale, et les quatre changements qui la ferment sans bloquer personne.
D'où vient la liste
WordPress embarque une interface de programmation que d'autres logiciels utilisent pour lire le site : l'application mobile, l'éditeur de blocs, les intégrations. Une partie de cette interface liste les utilisateurs. Par défaut, n'importe qui peut la lire, connecté ou non, à l'adresse du site suivie de /wp-json/wp/v2/users. La liste montre le nom public de chaque compte et son identifiant abrégé, qui sur la plupart des sites est l'identifiant de connexion lui-même.
Il existe un chemin plus ancien vers la même information. Demander l'adresse du site suivie de /?author=1 redirige vers la page d'archive du premier compte, dont l'adresse contient l'identifiant. Compter à partir de un fait le tour de tout le personnel.
Pourquoi un identifiant compte
Une connexion a deux moitiés. Deviner les deux est lent. En deviner une, l'autre étant offerte, revient à essayer des mots de passe, et les listes de mots de passe issues d'autres fuites ne coûtent rien. Un site dont les identifiants sont publics est un site où la sécurité de chaque compte repose sur son seul mot de passe.
L'interface distante héritée, xmlrpc.php, accélère encore la devinette. Une seule requête peut transporter des centaines de tentatives de mot de passe. Elle est activée par défaut, et la plupart des sites ne l'utilisent plus depuis que l'application mobile WordPress a cessé d'en avoir besoin.
Quatre changements
D'abord, réservez la liste des utilisateurs aux visiteurs connectés. Les extensions de sécurité proposent ce réglage, et c'est un filtre court à ajouter pour un développeur. L'éditeur de blocs et l'application continuent de fonctionner, parce qu'ils sont connectés.
Ensuite, coupez xmlrpc.php sauf si une intégration précise en a besoin. Jetpack et quelques outils mobiles anciens en ont besoin ; si votre site utilise l'un d'eux, laissez-le actif et placez plutôt une limitation de tentatives devant.
Troisièmement, donnez un second facteur à chaque compte qui peut publier. C'est le changement qui compte le plus, parce qu'il rend inutile un mot de passe deviné. Une application d'authentification sur un téléphone suffit. Les administrateurs d'abord, puis les éditeurs, puis tout le monde.
Quatrièmement, renommez ou supprimez le compte nommé admin, et faites en sorte que le nom affiché de chaque compte diffère de son identifiant. Aucun des deux n'est une défense en soi. Les deux retirent la devinette la plus facile.
Ce dont il ne faut pas s'occuper
Déplacer la page de connexion vers une adresse secrète est populaire et sert à peu de chose. L'interface qui liste les utilisateurs est une autre porte. Une extension qui masque le numéro de version de WordPress n'y change rien non plus. Consacrez le temps au second facteur.
Ce que signale l'audit gratuit
L'audit gratuit demande la liste des utilisateurs de la même manière qu'un attaquant et indique combien d'identifiants sont revenus, les premiers étant affichés pour que vous puissiez les reconnaître. Il indique aussi si xmlrpc.php répond. Les deux constats sont modérés séparément et sérieux ensemble, ce qui est la façon dont ils arrivent d'habitude.