HostnameVerifier tidak aman
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
Implementasi HostnameVerifier
bertanggung jawab untuk memverifikasi bahwa
nama host di sertifikat server cocok dengan nama host server yang
ingin dihubungkan oleh klien.
Implementasi HostnameVerifier
yang tidak aman di aplikasi Android adalah
implementasi yang tidak memverifikasi dengan benar nama host server
yang digunakan aplikasi untuk berkomunikasi. Hal ini memungkinkan penyerang
meniru identitas server yang sah dan mengelabui aplikasi agar mengirimkan data sensitif
ke penyerang.
Kerentanan ini ada karena class HostnameVerifier
memiliki panggilan
fungsi yang dapat melewati validasi nama host sertifikat X.509 dan, sebagai gantinya, hanya
memverifikasi hash sertifikat. Kesalahpahaman umum adalah fungsi
SSLSession#isValid
menjalankan operasi terkait keamanan, meskipun tujuannya hanya untuk
memeriksa apakah sesi valid dan tersedia untuk melanjutkan atau bergabung; di mana kedua hal tersebut
tidak memvalidasi keamanan sesi. Class HostnameVerifier
telah
digantikan oleh NetworkSecurityConfig.
Dampak
Implementasi HostnameVerifier
yang tidak aman dapat menyebabkan kerentanan yang dapat
digunakan untuk melakukan serangan MiTM (Man-in-The-Middle) pada traffic jaringan
dari aplikasi korban. Dampak dari pemanfaatan kode yang tidak aman ini adalah data jaringan aplikasi
pengguna dapat disusupi oleh penyerang jaringan (dari jarak jauh atau
lokal) jika kode ini dipicu. Dampaknya bergantung pada konten
traffic jaringan yang tidak sengaja terekspos (PII, informasi pribadi,
nilai sesi sensitif, kredensial layanan, dll.).
Mitigasi
Gunakan fungsi NetworkSecurityConfig.xml
untuk memastikan semua koneksi produksi, pengujian, proses debug, dan tahap
pengembangan ditangani dengan benar, bukan menggunakan atau menerapkan validasi sertifikat
TLS/SSL kustom.
Referensi
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2023-12-14 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2023-12-14 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)"]]