Güvenli olmayan X509TrustManager
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
X509TrustManager
sınıfı, uzak bir sunucunun kimliğini doğrulamakla sorumludur. Bu işlem, sunucunun sertifikasını doğrulayarak yapılır.
Bir Android uygulamasındaki güvenli olmayan X509TrustManager
uygulaması, uygulamanın iletişim kurduğu sunucunun kimliğini düzgün şekilde doğrulamayan bir uygulamadır. Bu durum, saldırganın meşru bir sunucunun kimliğine bürünmesine ve uygulamayı hassas verileri saldırgana göndermesi için kandırmasına olanak tanıyabilir.
Bu güvenlik açığı, X509TrustManager
sınıfının kullanılmasından kaynaklanmaktadır.
Java/Android, sunucu doğrulamasının tamamen geçersiz kılınmasına izin verir. X509TrustManager
sınıfının iki önemli işlevi vardır: checkServerTrusted()
ve getAcceptedIssuers()
. Bu işlev çağrıları, tüm X.509 sertifikalarına güvenecek şekilde yapılandırılabilir. Son olarak, özel doğrulama mantığı hatalı veya eksik olabilir ve beklenmedik bağlantılara izin verebilir.
Tüm bu durumlarda sınıfın amacı geçersiz kılınmış ve X509TrustManager
çıkışına göre kurulan ağ bağlantısı güvenli değildir.
Etki
Güvenli olmayan X509TrustManager uygulamaları, kurban uygulamasından gelen ağ trafiğine Ortadaki Adam (Man-in-the-Middle - MITM) saldırıları gerçekleştirmek için kullanılabilecek güvenlik açıklarına yol açabilir. Bu güvenli olmayan kodun kötüye kullanılmasının etkisi, bu kod tetiklenirse kullanıcının uygulama ağı verilerinin ağ saldırganları tarafından (uzaktan veya yerel olarak) tehlikeye atılabilmesidir. Etki, ağ trafiğinin yanlışlıkla açığa çıkarılan içeriğine (kimliği tanımlayabilecek bilgiler, özel bilgiler, hassas oturum değerleri, hizmet kimlik bilgileri vb.) bağlıdır.
Risk azaltma önlemleri
Özel TLS/SSL sertifika doğrulama kodu kullanmak veya uygulamak yerine tüm üretim, test, hata ayıklama ve geliştirme aşaması bağlantılarının düzgün şekilde işlenmesini sağlamak için NetworkSecurityConfig.xml işlevini kullanın. Test ve hata ayıklama derlemeleri için kendinden imzalı sertifika kullanılması gerekiyorsa özel bir X509TrustManager
uygulamak yerine NetworkSecurityConfig'i kullanmayı düşünebilirsiniz.
Kaynaklar
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 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"]]