دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
کلاس X509TrustManager
مسئول تأیید صحت یک سرور راه دور است. این کار را با تایید گواهی سرور انجام می دهد.
اجرای ناامن X509TrustManager
در یک برنامه اندروید، پیاده سازی است که صحت سروری را که برنامه با آن در ارتباط است به درستی تأیید نمی کند. این می تواند به مهاجم اجازه دهد تا جعل هویت یک سرور قانونی را بسازد و برنامه را فریب دهد تا داده های حساس را برای مهاجم ارسال کند.
این آسیبپذیری وجود دارد زیرا با استفاده از کلاس X509TrustManager
، Java/Android اجازه میدهد تا تأیید کامل سرور را لغو کند. کلاس X509TrustManager
دو عملکرد مورد علاقه دارد: checkServerTrusted()
و getAcceptedIssuers()
. این فراخوانی های تابع را می توان به گونه ای پیکربندی کرد که به همه گواهی های X.509 اعتماد کند. در نهایت، منطق اعتبارسنجی سفارشی ممکن است باگ یا ناقص باشد و اجازه اتصالات غیرمنتظره را بدهد. در تمام این موارد، هدف کلاس نفی شده است و اتصال شبکه ایجاد شده بر اساس خروجی X509TrustManager
ایمن نیست.
تاثیر
اجرای ناامن X509TrustManager می تواند منجر به آسیب پذیری هایی شود که می تواند برای انجام حملات MitM (Man-in-the-Middle) بر روی ترافیک شبکه از برنامه قربانی استفاده شود. تأثیر سوء استفاده از این کد ناامن این است که در صورت راه اندازی این کد، داده های شبکه برنامه کاربر می تواند توسط مهاجمان شبکه (از راه دور یا محلی) در معرض خطر قرار گیرد. این تأثیر به محتوای ترافیک شبکه بستگی دارد که به طور ناخواسته در معرض نمایش قرار می گیرد (PII، اطلاعات خصوصی، مقادیر حساس جلسه، اعتبار خدمات، و غیره).
اقدامات کاهشی
از عملکرد NetworkSecurityConfig.xml استفاده کنید تا اطمینان حاصل کنید که تمام اتصالات مرحله تولید، آزمایش، اشکال زدایی و توسعه به درستی به جای استفاده یا پیاده سازی کد تأیید اعتبار گواهی TLS/SSL سفارشی انجام می شود. اگر برای ساختهای آزمایشی و اشکالزدایی به استفاده از گواهی امضا شده نیاز است، به جای اجرای X509TrustManager
سفارشی، از NetworkSecurityConfig استفاده کنید.
منابع
- اسناد هشدار را پخش کنید
- اسنادی برای کمک به پیکربندی فایل 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