Services sécurité WordPress

Sels, clés et cookies WordPress

Rendez votre site WordPress plus sécurisé en y ajoutant un peu de sel !

Tel que mentionné dans mon article précédent (« L’algorithme des mots de passe de WordPress est-il sécurisé ? »), l’algorithme des mots de passe de WordPress utilise l’algorithme MD5 avec l’aide d’une séquence aléatoire de 64 caractères.

Cette séquence est appelée « sel » et c’est une technique utilisée pour renforcer l’intégrité des mots de passe de WordPress, car l’algorithme MD5 ne suffit pas à garantir l’inviolabilité des mots de passe du système.

Sels et Clés

Dans le fichier de configuration wp-config.php, il y a une section intitulée « Clefs uniques d’authentification et salage » où sont enregistrés à la fois les sels et les clés.

A. Clés (4 chaînes)

Les clés sont générées automatiquement lors de l’installation de WordPress et sont enregistrées à la fois dans la base de données et dans le fichier de configuration wp-config.php (voir fonction wp_salt() sur le site WordPress développeurs, en Anglais).

Les 3 premières sont utilisées pour la génération des cookies (pour une explication sur les cookies voir la section suivante) et la dernière pour la génération des nonces (pour plus d’informations voir « Les nonces WordPress » sur WordPress.org).

a) AUTH_KEY
Clé utilisée pour générer un cookie d’autorisation permettant l’accès au tableau de bord pour un utilisateur qui se connecte au site web en utilisant une connexion non sécurisée (protocole http).

b) SECURE_AUTH_KEY
Même type que la clé précédente, mais cette fois pour les connexions sécurisées par SSL (protocole https).

c) LOGGED_IN_KEY
Clé utilisée pour générer un cookie pour un utilisateur accédant au système. Ce type de cookie ne permet pas d’apporter des modifications au système.

d) NONCE_KEY

Clé utilisée pour générer un jeton nonce (« numéro utilisé une fois »). La clé elle-même est générée en concaténant l’ID utilisateur + le paramètre $action + la date/heure actuelle (horodatage).

Le jeton nonce est utilisé pour identifier de façon unique les demandes adressées au site. Ainsi, lorsque le site reçoit une demande à distance, il est vérifié s’il existe ou non un jeton nonce. Si le jeton n’est pas disponible, la demande est rejetée ; s’il est disponible, la valeur du jeton nonce est comparée à celle enregistrée dans le système ; si le jeton nonce correspond, la demande est acceptée, sinon elle est rejetée avec une erreur 403 (interdit).

Exemple (suppression d’un commentaire d’un message) :

https://www.exemple.fr/wp-admin/comment.php?c=16570&action=deletecomment&_wpnonce=389c3b47b9

B. Sels (4 chaînes)

Les sels sont générés à partir des clés créées lors de la configuration de WordPress et sont enregistrés dans le fichier de configuration wp-config.php.
Lors des opérations de hachage, les sels sont liés aux clés pour renforcer les hachages créés lors des différentes opérations d’authentification et d’autorisation effectuées par le système.

a) AUTH_SALT
Chaîne ajoutée à la clé AUTH_KEY correspondante pour générer un hachage pour la création d’un cookie d’autorisation.

b) SECURE_AUTH_SALT
Chaîne ajoutée à la clé SECURE_AUTH_KEY correspondante pour générer un hachage permettant de créer le cookie d’autorisation.

c) LOGGED_IN_SALT
Chaîne ajoutée à la clé correspondante LOGGED_IN_KEY pour générer un hachage pour la création du cookie d’accès au système.

d) NONCE_SALT
Chaîne ajoutée à la clé NONCE_KEY correspondante pour générer un hachage pour la création du jeton de protection.

Cookies

Contrairement aux autres systèmes basés sur le langage PHP, qui utilisent des sessions PHP pour gérer l’authentification des utilisateurs, WordPress gère l’authentification par le biais d’un système basé sur les cookies.

Il y a 4 cookies créés par WordPress :

1) wordpress_[hash]

Lorsque vous vous connectez, un premier cookie est créé où les spécifications d’authentification de l’utilisateur sont stockées. Ce cookie est utilisé pour accéder au tableau de bord pour les connexions non sécurisées (http).

2) wordpress_sec_[hash]

Les mêmes fonctionnalités que le cookie mentionné ci-dessus, pour les connexions sécurisées par SSL (https).

3) wordpress_logged_in_[hash]

Après la connexion, un deuxième cookie est créé avec les spécifications d’identité de l’utilisateur et l’heure de connexion.

4) wp-settings-{time}-[UID]

Un cookie utilisé pour personnaliser l’interface du tableau de bord.

Structure d’un cookie

Exemple de la structure d’un cookie d’autorisation (AUTH_COOKIE)

a) Cookie ID
Le cookie d’identification est généré par la concaténation de la chaîne « wordpress_ » + hash généré par le hachage MD5 de l’url du site
(voir code source WordPress ver. 5.2.3)

b) Username
Le nom d’utilisateur enregistré dans le système

c) Expiration
Date et heure d’expiration du cookie (durée par défaut 48 heures) au format Heure Unix (Wikipedia)

d) Hash

Il s’agit d’un type de hachage HMAC (code d’authentification des messages basé sur le hachage – Wikipedia).
Dans une première étape, le hachage est généré par une valeur MD5 du nom d’utilisateur combinée à la date d’expiration du cookie.
Ensuite, un second hachage est généré avec le nom d’utilisateur, la date d’expiration et les 4 caractères du hachage du mot de passe de l’utilisateur.
Enfin, dans une troisième étape, les chaînes AUTH_KEY et AUTH_SALT sont concaténées, qui sont ensuite passées à la fonction wp_hash, pour générer le hachage final.
(voir code source WordPress ver. 5.2.3)

Quels sont les risques?

Le risque le plus évident est qu’un utilisateur malveillant puisse entrer en possession de vos cookies pour accéder au tableau de bord de votre site WordPress.
De telles attaques sont réalisées en redirigeant les demandes faites par le navigateur d’un utilisateur distant vers un site malveillant, créé spécifiquement pour prendre possession des cookies sur l’ordinateur de l’utilisateur.

Un autre risque tout aussi évident est la possibilité qu’un utilisateur malveillant s’empare des « sels et des clés » de votre fichier wp-config.php.
A partir du sels et des clés, il est possible de créer en peu de temps, un cookie valide avec lequel vous pouvez avoir un accès libre au tableau de bord avec des droits d’administrateur ! (ce qu’on appelle « cookie forging »).

Comment puis-je protéger mon site web ?

1) Certificat SSL

Le premier niveau de protection est le certificat SSL qui, grâce au cryptage des données échangées entre le serveur web et le navigateur du visiteur, renforce la sécurité du système en empêchant tout utilisateur malveillant d’intercepter le flux de données et d’en lire le contenu.

2) Activer l’en-tête de sécurité HSTS

L’installation d’un certificat SSL sur votre site est de peu d’utilité, si vous n’activez pas l’en-tête de sécurité HSTS (HTTP Strict Transport Security) qui oblige les visiteurs du site à utiliser uniquement le protocole crypté HTTPS pour communiquer avec le serveur web.
Pour plus d’informations : « A quoi servent les en-têtes de sécurité HTTP ? »

3) Fichier de configuration wp-config.php

a) configurer les permissions 644

b) bloquer l’accès au fichier, en utilisant les directives htaccess

c) configurer la connexion et l’accès au tableau de bord uniquement par le biais d’une connexion sécurisée SSL. Pour ce faire, entrez les directives suivantes dans le fichier wp-config.php :

define( ‘FORCE_SSL_LOGIN’, true );
define( ‘FORCE_SSL_ADMIN’, true );

d)

Changez régulièrement les sels et les clés

Le changement des sels et des clés peut être fait manuellement en utilisant l’application officielle fournie par WordPress au site https://api.wordpress.org/secret-key/1.1/salt/ et en copiant/collant ensuite les nouvelles chaînes dans le fichier wp-config.php, ou en utilisant une extension qui fait tout le travail automatiquement !

 

Cette extension, une fois installée, vous permet de programmer un remplacement automatique des sels et des clés.

 

Roberto Jobet
Roberto Jobet

Je suis un ingénieur systèmes Linux, expert en infosécurité spécialisé dans la sécurité WordPress. J'offre des services professionnels de sécurité pour protéger la confidentialité, l'intégrité et la disponibilité de sites WordPress.

Tous les articles

D'autres articles qui pourraient vous intéresser !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


The reCAPTCHA verification period has expired. Please reload the page.