استفاده ناامن از پیوندهای عمیق

دسته OWASP: MASVS-PLATFORM: تعامل پلاتفرم

نمای کلی

مخاطرات امنیتی مرتبط با پیوندهای عمیق از قابلیت اصلی آن‌ها در امکان‌پذیر کردن پیمایش و تعامل یکپارچه در برنامه‌های تلفن همراه ناشی می‌شود. آسیب‌پذیری‌های پیوند عمیق ناشی از ضعف در پیاده‌سازی یا مدیریت پیوندهای عمیق است. عاملان بدخواه می‌توانند از این نقص‌ها برای دسترسی به عملکردها یا داده‌های ممتاز سوءاستفاده کنند، که این امر به‌طور بالقوه می‌تواند منجر به نقض داده‌ها، نقض حریم خصوصی، و اقدامات غیرمجاز شود. مهاجمان می‌توانند ازطریق تکنیک‌های مختلف، مانند ربودن پیوند عمیق و حملات اعتبارسنجی داده‌ها، از این آسیب‌پذیری‌ها سوءاستفاده کنند.

تأثیر

نبود سازوکار مناسب برای اعتبارسنجی پیوند عمیق یا استفاده ناامن از پیوندهای عمیق می‌تواند به کاربران مخرب کمک کند تا حملاتی مانند دور زدن اعتبارسنجی میزبان، تزریق اسکریپت در برنامه، و اجرای کد از راه دور را در زمینه اجازه‌های برنامه آسیب‌پذیر انجام دهند. بسته به ماهیت برنامه، این امر می‌تواند منجر به دسترسی غیرمجاز به داده‌ها یا عملکردهای حساس شود.

طبق طراحی، Android به چند برنامه اجازه می‌دهد فیلترهای قصد را برای یک URI پیوند عمیق ثبت کنند. برای جلوگیری از رهگیری پیوندهای عمیق درنظرگرفته‌شده برای برنامه‌تان توسط برنامه‌های مخرب، مشخصه android:autoVerify را در intent-filter در AndroidManifest برنامه پیاده‌سازی کنید. این کار به کاربران امکان می‌دهد برنامه دلخواهشان را برای مدیریت پیوندهای عمیق انتخاب کنند، از عملکرد موردنظر اطمینان حاصل کنند، و از تفسیر خودکار آن‌ها توسط برنامه‌های مخرب جلوگیری کنند.

Android 12 برای بهبود امنیت، مدیریت سخت‌گیرانه‌تری را برای هدف‌های وب معرفی کرد. اکنون برنامه‌ها باید برای مدیریت پیوندهای دامنه‌های خاص، ازطریق «پیوندهای برنامه Android» یا انتخاب کاربر در تنظیمات سیستم، درستی‌سنجی شوند. این کار از ربودن پیوندهایی که برنامه‌ها نباید مدیریت کنند جلوگیری می‌کند.

برای فعال کردن درستی‌سنجی مدیریت پیوند برای برنامه‌تان، فیلترهای قصدی اضافه کنید که با قالب زیر مطابقت داشته باشد (این مثال از سند درستی‌سنجی پیوندهای برنامه Android گرفته شده است):

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

پیوندهای عمیق می‌توانند شامل پارامترهای دیگری باشند که به هدف مقصد ارائه می‌شوند، برای مثال، برای انجام کنش‌های بیشتر. پایه مدیریت ایمن پیوند عمیق، اعتبارسنجی دقیق داده‌ها است. همه داده‌های ورودی از پیوندهای عمیق باید به‌دقت توسط توسعه‌دهندگان اعتبارسنجی و پاک‌سازی شوند تا از تزریق کد یا مقادیر مخرب به برنامه قانونی جلوگیری شود. این کار را می‌توان با بررسی مقدار هر پارامتر پیوند عمیق دربرابر فهرست مجاز ازپیش‌تعریف‌شده مقادیر موردانتظار انجام داد.

برنامه‌ها باید قبل‌از افشای اطلاعات حساس، سایر وضعیت‌های داخلی مربوطه، مانند وضعیت اصالت‌سنجی یا مجوز را بررسی کنند. برای مثال، پاداش برای تکمیل مرحله‌ای از بازی. در این مورد، بهتر است پیش‌شرط تکمیل سطح را اعتبارسنجی کنید و اگر تکمیل نشده بود، به صفحه اصلی هدایت کنید.

منابع