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
- Play uyarı belgeleri
- Ağ güvenliği yapılandırması XML dosyasının yapılandırılmasına yardımcı olacak dokümanlar
- TrustManager sınıfıyla ilgili geliştirici belgeleri
- Bu kontrol, checkServerTrusted veya checkClientTrusted yöntemleri hiçbir şey yapmayan (dolayısıyla herhangi bir sertifika zincirine güvenen) X.509TrustManager uygulamalarını arar.
- Bu kontrol, özelleştirilmiş X.509TrustManager uygulamalarını arar.
- 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/X509TrustManagerDetector.java