الثغرات الأمنية لمسح المسار

هذه المعلومات موجَّهة للمطوّرين الذين لديهم تطبيقات تشتمل على ثغرة أمنية لمسح المسار.

تحليل المشكلة

اعتبارًا من 16 كانون الثاني (يناير) 2018، بدأ Google Play حظر نشر أي تطبيقات أو تحديثات جديدة تحتوي على ثغرات أمنية لمسح المسار. يُرجى مراجعة الإشعار في حسابك على Play Consoleوبعد مرور المواعيد النهائية الواردة في حسابك على Play Console، قد تُحذف من Google Play أي تطبيقات تحتوي على ثغرات أمنية لم يتم إصلاحها.

الإجراء المطلوب​

  1. سجِّل الدخول إلى حسابك على Play Console، وانتقل إلى قسم "التنبيهات" لمعرفة أي تطبيقات تطالها ثغرات أمنية والمواعيد النهائية لحل هذه المشاكل.
  2. حدّث تطبيقاتك التي تطالها ثغرة أمنية وأصلِحها.
  3. أرسِل النسخ المحدّثة من تطبيقاتك التي تطالها ثغرة أمنية.

وفور إعادة الإرسال، سيخضع تطبيقك للمراجعة مرة أخرى. ويمكن أن تستغرق هذه العملية عدة ساعات. وإذا اجتاز التطبيق المراجعة وتم نشره بنجاح، لا داعي لاتخاذ أي إجراء آخر. وإذا لم ينجح التطبيق باجتياز المراجعة، لن يتم نشر إصدار التطبيق الجديد وستتلقى إشعارًا عبر البريد الإلكتروني.

تفاصيل إضافية

يمكن أن تكون عمليات تنفيذ أمر openFile في فئات ContentProvider المصّدَرة عرضة لثغرات أمنية في حال عدم تَحققها كما يجب من معلمات معرّف الموارد المنتظم URI الواردة. ويستطيع التطبيق الضار تقديم معرِّف موارد منتظم (URI) معدّ يدويًا (على سبيل المثال، URI يحتوي على "/../") لخداع تطبيقك وجعله يعيد فئة ParcelFileDescriptor إلى ملف خارج الدليل المقصود، ما يسمح للتطبيق الضار بالوصول إلى أي ملف يستطيع تطبيقك الوصول إليه.

ثمة إستراتيجيتان ننصح بهما لإزالة الثغرة الأمنية لمسح المسار في فئة ContentProvider.

1- في حال عدم وجود حاجة إلى اطلاع تطبيقات أخرى على فئة ContentProvider:

  • يمكنك تعديل علامة <provider> في فئة ContentProvider المعنية في ملف البيان لتعيين android:exported=”false”، ما سيمنع التطبيقات الأخرى من إرسال ملفات Intent إلى فئة ContentProvider المعنية.
  • يمكنك أيضًا ضبط السمة android:permission لتكون إذنًا يتضمن android:protectionLevel=“signature” لمنع التطبيقات التي يُعدّها مطوّرو برامج آخرون من إرسال ملفات Intent إلى فئة ContentProvider المعنية. 

2ـ في حال وجود حاجة إلى اطلاع تطبيقات أخرى على فئة ContentProvider:

عليك التأكّد بشكل صحيح من ألا يعرض تطبيقك ملفات غير متوقعة بسبب البيانات التي تحتوي على أحرف لمسح المسار والمدخلة على ملف openFile. ويمكنك إجراء ذلك من خلال التحقق من المسار الأساسي للملف. على سبيل المثال:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());‎
 if (!‎f.getCanonicalPath().startsWith(DIR)) {‎
   throw new IllegalArgumentException();‎
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);‎
}
 

تحذير: من غير الآمن استدعاء getLastPathSegment في معلّمة معرّف الموارد المنتظم Uri. ويمكن لأحد التطبيقات الضارة إضافة مسار URI مشفّر مثل ‎%2F..path%2Fto%2Fsecret.txt بحيث تكون نتيجة getLastPathSegment هي ‎/../../path/to/secret.txt. على سبيل المثال، عملية التنفيذ التالية لا تزال معرّضة للهجوم.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());‎
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);‎
}
 

تسرّنا مساعدتك

إذا كان لديك أسئلة فنية بشأن الثغرات الأمنية، يمكنك طرحها على موقع Stack Overflow واستخدام العلامة "android-security". لمزيد من التوضيح بشأن الخطوات التي عليك اتخاذها لحلّ هذه المشكلة، يمكنك التواصل مع فريق دعم مطوّري البرامج.

هل كان ذلك مفيدًا؟

كيف يمكننا تحسينها؟
false
القائمة الرئيسية
14512759655845184963
true
مركز مساعدة البحث
true
true
true
true
true
5016068
false
false