Небезопасный X509TrustManager
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Категория OWASP: MASVS-CODE: Качество кода
Обзор
Класс X509TrustManager
отвечает за проверку подлинности удаленного сервера. Это делается путем проверки сертификата сервера.
Небезопасная реализация X509TrustManager
в приложении Android — это реализация, которая не проверяет должным образом подлинность сервера, с которым взаимодействует приложение. Это может позволить злоумышленнику выдать себя за законный сервер и заставить приложение отправить злоумышленнику конфиденциальные данные.
Уязвимость существует, поскольку использование класса X509TrustManager
в Java/Android позволяет полностью переопределить проверку сервера. Класс X509TrustManager
имеет две интересные функции: checkServerTrusted()
и getAcceptedIssuers()
. Эти вызовы функций можно настроить так, чтобы они доверяли всем сертификатам X.509. Наконец, пользовательская логика проверки может быть ошибочной или неполной и допускать неожиданные соединения. Во всех этих случаях назначение класса было отменено, а сетевое соединение, установленное на основе выходных данных X509TrustManager
не является безопасным.
Влияние
Небезопасные реализации X509TrustManager могут привести к появлению уязвимостей, которые можно использовать для выполнения атак MitM (Man-in-the-Middle) на сетевой трафик из приложения-жертвы. Результатом использования этого небезопасного кода является то, что сетевые данные пользовательского приложения могут быть скомпрометированы сетевыми злоумышленниками (удаленно или локально), если этот код сработает. Воздействие зависит от непреднамеренного раскрытия содержимого сетевого трафика (PII, личная информация, конфиденциальные значения сеанса, учетные данные службы и т. д.).
Смягчения
Используйте функциональность NetworkSecurityConfig.xml, чтобы обеспечить правильную обработку всех соединений на этапе производства, тестирования, отладки и разработки, а не использовать или внедрять собственный код проверки сертификата TLS/SSL. Если для тестовых и отладочных сборок необходимо использовать самозаверяющий сертификат, рассмотрите возможность использования NetworkSecurityConfig вместо реализации специального X509TrustManager
.
Ресурсы
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-07-29 UTC.
[[["Прост для понимания","easyToUnderstand","thumb-up"],["Помог мне решить мою проблему","solvedMyProblem","thumb-up"],["Другое","otherUp","thumb-up"]],[["Отсутствует нужная мне информация","missingTheInformationINeed","thumb-down"],["Слишком сложен/слишком много шагов","tooComplicatedTooManySteps","thumb-down"],["Устарел","outOfDate","thumb-down"],["Проблема с переводом текста","translationIssue","thumb-down"],["Проблемы образцов/кода","samplesCodeIssue","thumb-down"],["Другое","otherDown","thumb-down"]],["Последнее обновление: 2025-07-29 UTC."],[],[],null,["# Unsafe X509TrustManager\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nThe `X509TrustManager` class is responsible for verifying the authenticity of a\nremote server. It does this by validating the server's certificate.\n\nAn insecure `X509TrustManager` implementation in an Android application is an\nimplementation that does not properly verify the authenticity of the server with\nwhich the application is communicating. This can allow an attacker to\nimpersonate a legitimate server and trick the application into sending sensitive\ndata to the attacker.\n\nThe vulnerability exists because using the [`X509TrustManager`](/reference/javax/net/ssl/X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate%5B%5D,%20java.lang.String)) class,\nJava/Android allows the complete overriding of server verification. The\n`X509TrustManager` class has two functions of interest:\n[`checkServerTrusted()`](/reference/javax/net/ssl/X509TrustManager#checkServerTrusted(java.security.cert.X509Certificate%5B%5D,%20java.lang.String)) and [`getAcceptedIssuers()`](/reference/javax/net/ssl/X509TrustManager#getAcceptedIssuers()). These function\ncalls can be configured to trust all X.509 certificates. Finally, custom\nvalidation logic may be buggy or incomplete and permit unexpected connections.\nIn all these cases, the purpose of the class has been negated and the network\nconnection established based on the `X509TrustManager` output is not secure.\n\nImpact\n------\n\nUnsafe X509TrustManager implementations can lead to vulnerabilities which can be\nused to perform MitM (Man-in-the-Middle) attacks on network traffic from the\nvictim application. The impact of exploiting this insecure code is that a user's\napplication network data can be compromised by network attackers (remotely or\nlocally) if this code is triggered. The impact is dependent on the content of\nthe network traffic being inadvertently exposed (PII, private information,\nsensitive session values, service credentials, etc).\n\nMitigations\n-----------\n\nUse the [NetworkSecurityConfig.xml](/training/articles/security-config) functionality to ensure that all\nproduction, testing, debugging, and dev stage connections are properly handled\nrather than using or implementing custom TLS/SSL certificate validation code. If\nusing a self-signed certificate is needed for test and debug builds, consider\nusing NetworkSecurityConfig instead of implementing a custom `X509TrustManager`.\n\nResources\n---------\n\n- [Play Warning docs](https://support.google.com/faqs/answer/6346016)\n- [Documentation to assist configuring the Network security configuration xml file.](/training/articles/security-config)\n- [Developer documentation for the TrustManager class.](/reference/javax/net/ssl/TrustManager)\n- [This check looks for X.509TrustManager implementations whose checkServerTrusted or checkClientTrusted methods do nothing (thus trusting any certificate chain).](https://googlesamples.github.io/android-custom-lint-rules/checks/TrustAllX509TrustManager.md.html)\n- [This check looks for custom X.509TrustManager implementations.](https://googlesamples.github.io/android-custom-lint-rules/checks/CustomX509TrustManager.md.html)\n- \u003chttps://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/X509TrustManagerDetector.java\u003e"]]