11. Considérations de sécurité
Les transactions du protocole IMAP4rev1, y compris les données de courrier électronique, sont transmises en clair sur le réseau, sauf si une protection contre l'écoute est négociée. Cette protection peut être obtenue au moyen de STARTTLS, d'une protection de la confidentialité négociée dans la commande AUTHENTICATE, ou d'un autre mécanisme de protection.
11.1. Considérations de sécurité relatives à STARTTLS
La spécification de la commande STARTTLS et de la capacité LOGINDISABLED dans le présent document remplace celle de [IMAP-TLS]. [IMAP-TLS] reste normatif pour l'authentificateur PLAIN de [SASL].
Les implémentations client et serveur IMAP DOIVENT mettre en œuvre la suite cryptographique TLS_RSA_WITH_RC4_128_MD5 de [TLS] et DEVRAIENT mettre en œuvre la suite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA de [TLS]. Cette exigence est importante, car elle garantit que deux implémentations conformes quelconques peuvent être configurées pour interopérer. Toutes les autres suites cryptographiques sont FACULTATIVES. Il s'agit d'un changement par rapport à la section 2.1 de [IMAP-TLS].
Lors de la négociation [TLS], le client DOIT vérifier que le nom d'hôte du serveur qu'il connaît correspond à l'identité du serveur présentée dans le message Certificate du serveur, afin d'empêcher les attaques de l'homme du milieu. En cas d'échec de la correspondance, le client DEVRAIT soit demander une confirmation explicite à l'utilisateur, soit mettre fin à la connexion et indiquer que l'identité du serveur est suspecte. La comparaison s'effectue selon les règles suivantes :
-
Le client DOIT utiliser, pour la comparaison avec le nom de serveur figurant dans le certificat du serveur, le nom d'hôte qu'il a employé pour ouvrir la connexion. Il NE DOIT PAS utiliser une forme du nom d'hôte obtenue à partir d'une source distante non sûre, par exemple une résolution DNS non sûre. Aucune canonicalisation CNAME n'est effectuée.
-
Si le certificat contient une extension subjectAltName de type dNSName, celle-ci DEVRAIT servir de source pour l'identité du serveur.
-
La comparaison est insensible à la casse.
-
Le caractère générique "*" PEUT être utilisé comme composant le plus à gauche d'un nom dans le certificat. Par exemple, *.example.com correspond à a.example.com, foo.example.com, etc., mais ne correspond pas à example.com.
-
Si le certificat contient plusieurs noms, par exemple plusieurs champs dNSName, une correspondance avec l'un quelconque de ces champs est acceptable.
Le client comme le serveur DOIVENT vérifier le résultat de la commande STARTTLS et de la négociation [TLS] qui suit, afin de déterminer si un niveau d'authentification ou de confidentialité acceptable a été obtenu.
11.2. Autres considérations de sécurité
Un message d'erreur du serveur pour une commande AUTHENTICATE qui échoue en raison d'identifiants non valides NE DEVRAIT PAS préciser la raison pour laquelle ces identifiants sont non valides.
L'utilisation de la commande LOGIN envoie les mots de passe en clair. Cela peut être évité en utilisant la commande AUTHENTICATE avec un mécanisme [SASL] qui n'emploie pas de mot de passe en clair, ou en négociant auparavant un chiffrement par STARTTLS ou par un autre mécanisme de protection.
Une implémentation de serveur DOIT proposer une configuration qui, au moment de l'authentification, exige l'une des conditions suivantes :
- la commande STARTTLS a été négociée ;
- un autre mécanisme protégeant la session contre l'écoute des mots de passe a été fourni ; ou
- toutes les mesures suivantes sont en place :
- la capacité LOGINDISABLED est annoncée et les mécanismes [SASL] utilisant des mots de passe en clair, tels que PLAIN, ne sont PAS annoncés dans la liste CAPABILITY ;
- la commande LOGIN renvoie une erreur, même si le mot de passe est correct ;
- la commande AUTHENTICATE renvoie une erreur pour tous les mécanismes [SASL] utilisant des mots de passe en clair, même si le mot de passe est correct.
Un message d'erreur du serveur pour une commande LOGIN qui échoue NE DEVRAIT PAS indiquer que le nom d'utilisateur, plutôt que le mot de passe, n'est pas valide.