OWASP कैटगरी: MASVS-CODE: कोड की क्वालिटी
खास जानकारी
X509TrustManager
क्लास, रिमोट सर्वर की पुष्टि करने के लिए ज़िम्मेदार होता है. यह सर्वर के सर्टिफ़िकेट की पुष्टि करके ऐसा करता है.
Android ऐप्लिकेशन में असुरक्षित X509TrustManager
लागू करने का मतलब है कि ऐप्लिकेशन जिस सर्वर से कम्यूनिकेट कर रहा है उसकी पुष्टि सही तरीके से नहीं की गई है. इससे हमलावर को किसी भरोसेमंद सर्वर के तौर पर काम करने और ऐप्लिकेशन को धोखा देकर, हमलावर को संवेदनशील डेटा भेजने के लिए मजबूर करने की अनुमति मिल सकती है.
यह समस्या इसलिए मौजूद है, क्योंकि X509TrustManager
क्लास का इस्तेमाल करके, Java/Android को सर्वर की पुष्टि करने की प्रोसेस को पूरी तरह से बदलने की अनुमति मिलती है. X509TrustManager
क्लास में दो फ़ंक्शन हैं:
checkServerTrusted()
और getAcceptedIssuers()
. इन फ़ंक्शन कॉल को, सभी X.509 सर्टिफ़िकेट पर भरोसा करने के लिए कॉन्फ़िगर किया जा सकता है. आखिर में, कस्टम पुष्टि करने का लॉजिक गड़बड़ या अधूरा हो सकता है. साथ ही, इससे अनचाहे कनेक्शन की अनुमति मिल सकती है.
इन सभी मामलों में, क्लास का मकसद पूरा नहीं हुआ है. साथ ही, X509TrustManager
आउटपुट के आधार पर बनाया गया नेटवर्क कनेक्शन सुरक्षित नहीं है.
असर
X509TrustManager को असुरक्षित तरीके से लागू करने पर, सुरक्षा से जुड़ी गड़बड़ियां हो सकती हैं. इनका इस्तेमाल, पीड़ित ऐप्लिकेशन के नेटवर्क ट्रैफ़िक पर एमआईटीएम (मैन-इन-द-मिडल) हमले करने के लिए किया जा सकता है. इस असुरक्षित कोड का इस्तेमाल करने से, उपयोगकर्ता के ऐप्लिकेशन के नेटवर्क डेटा से समझौता किया जा सकता है. ऐसा तब होता है, जब इस कोड को ट्रिगर किया जाता है. नेटवर्क पर हमला करने वाले लोग, दूर से या स्थानीय तौर पर ऐसा कर सकते हैं. इसका असर, नेटवर्क ट्रैफ़िक के उस कॉन्टेंट पर पड़ता है जिसे अनजाने में सार्वजनिक कर दिया गया है. जैसे, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई), निजी जानकारी, संवेदनशील सेशन वैल्यू, सेवा के क्रेडेंशियल वगैरह.
जोखिम कम करने के तरीके
NetworkSecurityConfig.xml फ़ंक्शन का इस्तेमाल करके यह पक्का करें कि प्रोडक्शन, टेस्टिंग, डीबगिंग, और डेवलपमेंट स्टेज के सभी कनेक्शन सही तरीके से मैनेज किए गए हों. इसके लिए, कस्टम टीएलएस/एसएसएल सर्टिफ़िकेट की पुष्टि करने वाले कोड का इस्तेमाल न करें. अगर टेस्ट और डीबग बिल्ड के लिए, खुद हस्ताक्षर किए गए सर्टिफ़िकेट का इस्तेमाल करना ज़रूरी है, तो कस्टम X509TrustManager
लागू करने के बजाय NetworkSecurityConfig का इस्तेमाल करें.
संसाधन
- Play से जुड़ी चेतावनी के दस्तावेज़
- नेटवर्क सुरक्षा कॉन्फ़िगरेशन की xml फ़ाइल को कॉन्फ़िगर करने में मदद करने वाला दस्तावेज़.
- TrustManager क्लास के लिए डेवलपर दस्तावेज़.
- इस जांच में, X.509TrustManager को लागू करने के ऐसे तरीके देखे जाते हैं जिनमें checkServerTrusted या checkClientTrusted तरीके कुछ नहीं करते. इसलिए, वे किसी भी सर्टिफ़िकेट चेन पर भरोसा करते हैं.
- इस जांच में, X.509TrustManager को लागू करने के कस्टम तरीकों का पता लगाया जाता है.
- 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