Catégorie OWASP : MASVS-CODE : qualité du code
Présentation
La classe X509TrustManager
est chargée de vérifier l'authenticité d'un serveur distant. Pour ce faire, elle valide le certificat du serveur.
Une implémentation X509TrustManager
non sécurisée dans une application Android est une implémentation qui ne vérifie pas correctement l'authenticité du serveur avec lequel l'application communique. Cela peut permettre à un pirate informatique d'usurper l'identité d'un serveur légitime et d'inciter l'application à envoyer des données sensibles au pirate.
La faille existe, car l'utilisation de la classe X509TrustManager
permet à Java et Android de remplacer complètement la validation du serveur. La classe X509TrustManager
comporte deux fonctions d'intérêt : checkServerTrusted()
et getAcceptedIssuers()
. Ces appels de fonction peuvent être configurés pour approuver tous les certificats X.509. La logique de validation personnalisée peut être erronée ou incomplète, et autoriser des connexions inattendues. Dans tous ces cas, l'objectif de la classe a été annulé et la connexion réseau établie sur la sortie X509TrustManager
n'est pas sécurisée.
Impact
Les implémentations X509TrustManager
non sécurisées peuvent entraîner des failles qui permettent de lancer des attaques MITM ("man in the middle") sur le trafic réseau à partir de l'application victime. Si vous exploitez ce code non sécurisé, les données réseau de l'application d'un utilisateur peuvent être compromises par des pirates informatiques (à distance ou localement) si ce code est déclenché. L'impact dépend du contenu du trafic réseau exposé par inadvertance (informations permettant d'identifier personnellement l'utilisateur, informations privées, valeurs de session sensibles, identifiants de service, etc.).
Stratégies d'atténuation
Utilisez la fonctionnalité NetworkSecurityConfig.xml pour vous assurer que toutes les connexions de production, de test, de débogage et de développement sont correctement gérées, au lieu d'utiliser ou d'implémenter un code de validation de certificat TLS/SSL personnalisé. Si un certificat autosigné est nécessaire pour les versions de test et de débogage, envisagez d'utiliser NetworkSecurityConfig au lieu d'implémenter un X509TrustManager
personnalisé.
Ressources
Documentation pour vous aider à configurer le fichier XML de configuration de la sécurité réseau.
Documentation pour les développeurs sur la classe TrustManager