D'où vient la liste
WordPress comprend 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 lire cette liste, connecté ou non, à l'adresse de votre site suivie de /wp-json/wp/v2/users. Elle 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 moyen plus ancien d'obtenir la même information. Ajoutez /?author=1 à l'adresse de votre site et WordPress redirige vers la page d'archive du premier compte, dont l'adresse contient l'identifiant. Essayez 2, 3 et ainsi de suite, et vous obtenez le reste de votre personnel.
Pourquoi un identifiant compte
Une connexion a deux moitiés. Deviner les deux est lent. Si l'une est déjà connue, il ne reste qu'à essayer des mots de passe, et les listes de mots de passe issues d'autres fuites ne coûtent pas cher. Quand vos identifiants sont publics, chaque compte n'est protégé que par son mot de passe.
L'interface distante héritée, xmlrpc.php, accélère encore les tentatives. 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. C'est le cas de Jetpack et de quelques outils mobiles anciens. 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. La liste des utilisateurs se trouve à une autre adresse, et déplacer la page de connexion ne la cache pas. Une extension qui masque le numéro de version de WordPress n'aide pas davantage ici. Consacrez plutôt ce 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. Il indique combien d'identifiants sont revenus et affiche les premiers pour que vous puissiez les reconnaître. Il indique aussi si xmlrpc.php répond. Chaque constat est modéré séparément et sérieux en combinaison, et ils arrivent généralement ensemble.