مُرسِل الأهداف في انتظار المراجعة

فئة OWASP: MASVS-CODE: جودة الرمز

نظرة عامة

يؤدي استخدام PendingIntent.getCreator*() أو PendingIntent.getTarget*() لتحديد ما إذا كان سيتم الوثوق بمرسِل PendingIntent إلى إنشاء خطر استغلال.

تعرض الدالة PendingIntent.getCreator*() أو PendingIntent.getTarget*() معلومات عن منشئ PendingIntent، وهو ليس بالضرورة المرسِل. قد يكون صانع المحتوى موثوقًا به، ولكن لا يجب الوثوق بالمرسِل أبدًا، لأنّه قد يكون تطبيقًا ضارًا حصل على PendingIntent لتطبيق آخر باستخدام آليات متنوعة، مثل:

  • من NotificationListenerService
  • حالات الاستخدام المشروعة التي تشكّل جزءًا من التطبيق المعرَّض للخطر

من الأمثلة على الاستخدام المشروع PendingIntent.getCreator*() أو PendingIntent.getTarget*() عرض رمز التطبيق الذي سيتم تشغيله بواسطة PendingIntent.

التأثير

قد يؤدي الوثوق بمُرسِل PendingIntent لأنّك طلبت معلومات من المنشئ (وتثق به) إلى حدوث ثغرات أمنية. إذا كان أحد التطبيقات يثق في مُرسِل PendingIntent استنادًا إلى منشئه، ثم يشارك منطق المصادقة أو التفويض، سيؤدي ذلك إلى تجاوز المصادقة أو حتى تنفيذ الرمز عن بُعد استنادًا إلى إدخال غير صالح وغير موثوق به، وذلك حسب تنفيذ رمز التطبيق المعرَّض للخطر، وذلك عندما يكون مُرسِل PendingIntent تطبيقًا ضارًا.

إجراءات التخفيف

التمييز بين المرسِل وصانع المحتوى

يجب ألا يستند أي نوع من منطق المصادقة أو التفويض الذي يتم تنفيذه عند تلقّي PendingIntent إلى افتراضات بشأن منشئ PendingIntent الذي يتم تحديده باستخدام PendingIntent.getCreator*() أو PendingIntent.getTarget*().

استخدام طرق بديلة للتحقّق من هوية المتصلين

إذا كنت بحاجة إلى مصادقة المتصل، عليك استخدام خدمة أو ContentProvider بدلاً من PendingIntent، إذ يتيح كلاهما جلب معرّف المستخدم (UID) للمتصل باستخدام Binder.getCallingUid() عندما تكون في سياق إرسال عملية اتصال بين العمليات (IPC) واردة. يمكن طلب البحث عن المعرّف UID لاحقًا باستخدام PackageManager.getPackagesForUid().

هناك طريقة أخرى متاحة من المستوى 34 لواجهة برمجة التطبيقات، وهي استخدام BroadcastReceiver.getSentFromUid() أو BroadcastReceiver.getSentFromPackage() إذا وافق المرسِل على مشاركة الهوية أثناء البث باستخدام BroadcastOptions.isShareIdentityEnabled().

عليك دائمًا التحقّق مما إذا كانت حزمة الاتصال تتضمّن التوقيع المتوقّع، لأنّ الحِزم التي يتم تحميلها من مصادر غير معروفة يمكن أن تتضمّن أسماء حِزم تتداخل مع تلك الموجودة في "متجر Play".

المراجع