دسته OWASP: MASVS-CODE: کیفیت کد
نمای کلی
پیادهسازی HostnameVerifier مسئول تأیید این است که نام میزبان در گواهی سرور با نام میزبان سروری که سرویسگیرنده سعی دارد به آن متصل شود مطابقت داشته باشد.
پیادهسازی ناامن HostnameVerifier در برنامه Android پیادهسازیای است که نام میزبان سروری را که برنامه با آن ارتباط برقرار میکند بهدرستی درستیسنجی نمیکند. این امر میتواند به مهاجم اجازه دهد تا هویت یک سرور قانونی را جعل کند و برنامه را فریب دهد تا دادههای حساس را به مهاجم ارسال کند.
این آسیبپذیری وجود دارد زیرا کلاس HostnameVerifier دارای فراخوانیهای تابع است که میتواند از درستیسنجی نام میزبان گواهی X.509 رد شود و درعوض، فقط درهمسازی گواهی را درستیسنجی کند. یک تصور غلط رایج این است که تابع
SSLSession#isValid عملیات مربوط به امنیت را انجام میدهد، درحالیکه
درواقع هدف آن فقط بررسی معتبر بودن جلسه و دردسترس بودن آن برای
ازسرگیری یا پیوستن است؛ هیچکدام از اینها امنیت جلسه را اعتبارسنجی نمیکنند. کلاس
HostnameVerifier با NetworkSecurityConfig جایگزین شده است.
تأثیر
پیادهسازیهای ناامن HostnameVerifier میتواند منجر به آسیبپذیریهایی شود که میتوان از آنها برای انجام حملات «مرد میانی» (MiTM) در ترافیک شبکه از برنامه قربانی استفاده کرد. تأثیر سوءاستفاده از این کد ناامن این است که اگر این کد راهاندازی شود، دادههای شبکه برنامه کاربر میتواند توسط مهاجمان شبکه (از راه دور یا بهصورت محلی) بهخطر بیفتد. تأثیر آن به محتوای ترافیک شبکه که بهطور ناخواسته فاش شده است (اطلاعات شناساننده شخصی، اطلاعات خصوصی، مقادیر حساس جلسه، اطلاعات کاربری سرویس، و غیره) بستگی دارد.
کاهش
بهجای استفاده یا پیادهسازی کد اعتبارسنجی گواهینامه TLS/SSL سفارشی، از NetworkSecurityConfig.xml استفاده کنید تا مطمئن شوید همه اتصالات مرحله تولید، آزمایش، اشکالزدایی، و توسعه بهدرستی مدیریت میشوند.
منابع
- مستندات پیکربندی امنیت شبکه
- این بررسی بهدنبال پیادهسازیهای HostnameVerifier میگردد که روش درستیسنجی آن همیشه مقدار درست را برمیگرداند (بنابراین به هر نام میزبانی اعتماد میکند)
- اسناد توسعهدهنده برای کلاس HostnameVerifier
- کلاس AllowAllHostnameVerifierDetector در Android