TrustManager X.509 non sécurisé

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