TrustManager X.509 tidak aman
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
Class X509TrustManager
bertanggung jawab untuk memverifikasi keaslian
server jarak jauh. Hal ini dilakukan dengan memvalidasi sertifikat server.
Implementasi X509TrustManager
yang tidak aman di aplikasi Android adalah
implementasi yang tidak memverifikasi dengan benar keaslian 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 menggunakan class X509TrustManager
.
Java dan Android memungkinkan penggantian verifikasi server sepenuhnya. Class
X509TrustManager
memiliki dua fungsi yang diinginkan:
checkServerTrusted()
dan getAcceptedIssuers()
. Panggilan
fungsi ini dapat dikonfigurasi untuk memercayai semua sertifikat X.509. Logika validasi kustom
dapat berisi bug atau tidak lengkap, dan mengizinkan koneksi yang tidak terduga. Dalam semua
kasus ini, tujuan class telah diabaikan dan koneksi jaringan
yang dibuat berdasarkan output X509TrustManager
tidak aman.
Dampak
Implementasi X509TrustManager
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. Jika penggunaan sertifikat yang ditandatangani sendiri
diperlukan untuk build pengujian dan debug, sebaiknya gunakan NetworkSecurityConfig,
bukan menerapkan X509TrustManager
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-08 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-08 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"]]