Güvenli Olmayan Ana Makine Adı Doğrulayıcı
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
HostnameVerifier
uygulaması, sunucunun sertifikadaki ana makine adının istemcinin bağlanmaya çalıştığı sunucunun ana makine adıyla eşleştiğini doğrulamaktan sorumludur.
Android uygulamasında güvenli olmayan HostnameVerifier kullanımı, uygulamanın iletişim kurduğu sunucunun ana makine adını doğru şekilde doğrulamayan bir uygulamadır. Bu durum, saldırganın meşru bir sunucunun kimliğine bürünmesine ve uygulamayı kandırarak hassas verileri kendisine göndermesine olanak tanıyabilir.
Bu güvenlik açığı, HostnameVerifier
sınıfında X.509 sertifika ana makine adı doğrulamasını atlayabilen ve bunun yerine yalnızca sertifikanın karmasını doğrulayabilen işlev çağrıları bulunduğundan ortaya çıkar. SSLSession#isValid
işlevinin güvenlikle ilgili bir işlem gerçekleştirdiğine dair yaygın bir yanlış anlama vardır. Ancak işlevin amacı yalnızca bir oturumun geçerli olup olmadığını ve devam ettirilip katılabilip katılamayacağını kontrol etmektir. Bu işlemlerin hiçbiri oturumun güvenliğini doğrulamaz. HostnameVerifier sınıfının yerini NetworkSecurityConfig aldı.
Etki
Güvenli olmayan HostnameVerifier uygulamaları, kurban uygulamadan gelen ağ trafiğine MITM (Ortadaki Adam) saldırıları gerçekleştirmek için kullanılabilecek güvenlik açıklarına neden olabilir. Bu güvenli olmayan koddan yararlanmanın etkisi, bu kod tetiklenirse kullanıcının uygulama ağı verilerinin ağ saldırganları tarafından (uzaktan veya yerel olarak) güvenliğinin ihlal edilebilmesidir. Etki, yanlışlıkla açığa çıkan ağ trafiğinin içeriğine (kimliği tanımlayabilecek bilgiler, gizli bilgiler, hassas oturum değerleri, hizmet kimlik bilgileri vb.) bağlıdır.
Çözümler
Ö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 ele alındığından emin olmak için NetworkSecurityConfig.xml dosyasını kullanın.
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-26 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-26 UTC."],[],[],null,["# Unsafe HostnameVerifier\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 [`HostnameVerifier`](/reference/javax/net/ssl/HostnameVerifier#verify(java.lang.String,%20javax.net.ssl.SSLSession)) implementation is responsible for verifying that the\nhostname in the server's certificate matches the hostname of the server that the\nclient is trying to connect to.\n\nAn unsafe HostnameVerifier implementation in an Android application is an\nimplementation that does not properly verify the hostname 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\nThis vulnerability exists because the `HostnameVerifier` class has function\ncalls that can skip X.509 certificate hostname validation and, instead, only\nverify the hash of the certificate. A common misconception is that the\n[`SSLSession#isValid`](/reference/javax/net/ssl/SSLSession#isValid()) function performs a security-related operation, when\nin reality its purpose is only to check if a session is valid and available for\nresuming or joining; neither of which validate the *security* of a session. The\nHostnameVerifier class has been superseded by [NetworkSecurityConfig](/training/articles/security-config).\n\nImpact\n------\n\nUnsafe HostnameVerifier 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) 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.\n\nResources\n---------\n\n- [Network Security Configuration Documentation](/training/articles/security-config)\n- [This check looks for implementations of HostnameVerifier whose verify method always returns true (thus trusting any hostname)](https://googlesamples.github.io/android-custom-lint-rules/checks/BadHostnameVerifier.md.html)\n- [Developer documentation for the HostnameVerifier class](/reference/javax/net/ssl/HostnameVerifier#verify(java.lang.String,%20javax.net.ssl.SSLSession))\n- [AllowAllHostnameVerifierDetector class in Android](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/AllowAllHostnameVerifierDetector.java)"]]