
إثبات مفهوم لاستغلال CVE-2019-2215، وهي ثغرة استخدام بعد التحرير (use-after-free) في برنامج تشغيل binder في أندرويد، مما يتيح تصعيد الامتيازات محليًا على الأجهزة المعرضة للخطر.
المشكلة التالية موجودة في فرع android-msm-wahoo-4.4-pie من https://android.googlesource.com/kernel/msm (وربما في فروع أخرى):
يوجد استخدام بعد التحرير (use-after-free) للعضو wait في بنية binder_thread في مشغّل binder في /drivers/android/binder.c.
كما هو موصوف في التزام المنبع (upstream): “binder_poll() يمرّر قائمة انتظار thread->wait التي يمكن النوم عليها بانتظار العمل. عندما يخرج مؤشر ترابط يستخدم epoll صراحةً عبر BINDER_THREAD_EXIT، يتم تحرير قائمة الانتظار، لكنها لا تُزال أبداً من بنية بيانات epoll المقابلة. عندما تخرج العملية لاحقاً، يحاول كود تنظيف epoll الوصول إلى قائمة الانتظار، مما يؤدي إلى استخدام بعد التحرير.”
سيعرض إثبات المفهوم التالي انهيار UAF في بناء نواة مع KASAN (من تقرير الخطأ الأولي في المنبع على https://lore.kernel.org/lkml/[email protected]/): #include <fcntl.h> #include <sys/epoll.h> #include <sys/ioctl.h> #include <unistd.h>
#define BINDER_THREAD_EXIT 0x40046208ul
int main()
{
int fd, epfd;
struct epoll_event event = { .events = EPOLLIN };
fd = open("/dev/binder0", O_RDONLY);
epfd = epoll_create(1000);
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
ioctl(fd, BINDER_THREAD_EXIT, NULL);
}
```
تم تصحيح هذه المشكلة في ديسمبر 2017 في نواة 4.14 LTS [1]، ونواة AOSP لأندرويد 3.18 [2]، ونواة AOSP لأندرويد 4.4 [3]، ونواة AOSP لأندرويد 4.9 [4]، لكن جهاز Pixel 2 مع أحدث نشرة أمنية لا يزال عرضة للخطر بناءً على مراجعة الكود المصدري.
الأجهزة الأخرى التي تبدو عرضة للخطر بناءً على مراجعة الكود المصدري هي (بالإشارة إلى إصدارات 8.x ما لم يُذكر خلاف ذلك):
لدينا أدلة على أن هذا الخطأ يُستخدم في البرية. لذلك، يخضع هذا الخطأ لموعد نهائي للإفصاح مدته 7 أيام. بعد مرور 7 أيام أو توفّر تصحيح على نطاق واسع (أيهما يحدث أولاً)، سيصبح تقرير الخطأ مرئياً للعموم.
تم تأكيد أن إثبات المفهوم هذا يعمل على Pixel 2 مع البناء walleye_kasan-userdebug 10 QP1A.191105.0035899767، مما يسبب انهيار KASAN. كود C الخاص بإثبات المفهوم وملف new.out مرفقان. مخرجات وحدة تحكم KASAN مرفقة.
تلقيت معلومات تقنية من TAG ومن جهات خارجية حول استغلال لأندرويد يُنسب إلى مجموعة NSO. تضمنت هذه التفاصيل حقائق عن الخطأ ومنهجية الاستغلال، بما في ذلك على سبيل المثال لا الحصر:
باستخدام هذه التفاصيل، حددت أن الخطأ المستخدم هو بالتأكيد تقريباً الخطأ المذكور في هذا التقرير، إذ استبعدت المرشحين المحتملين الآخرين بمقارنة التصحيحات. سيتم كتابة شرح أكثر تفصيلاً لهذا الخطأ ومنهجية تحديده في تدوينة قادمة عندما أجد الوقت.
لا نملك حالياً عينة من الاستغلال. بدون عينات، لم نتمكن من تأكيد الجدول الزمني ولا الحمولة (payload).
الخطأ هو ثغرة تصعيد امتيازات محلية تسمح باختراق كامل للجهاز المعرض للخطر. إذا تم تسليم الاستغلال عبر الويب، فإنه يحتاج فقط إلى الاقتران مع استغلال للعارض (renderer)، لأن هذه الثغرة يمكن الوصول إليها من خلال صندوق الحماية (sandbox).
لقد أرفقت إثبات مفهوم محلي للاستغلال لإظهار كيف يمكن استخدام هذا الخطأ للحصول على قراءة/كتابة عشوائية في النواة عند تشغيله محلياً. يتطلب الأمر فقط تنفيذ كود من تطبيق غير موثوق لاستغلال CVE-2019-2215. أرفقت أيضاً لقطة شاشة (success.png) لإثبات المفهوم وهو يعمل على Pixel 2، بنظام Android 10 مع مستوى تصحيح أمني لشهر سبتمبر 2019 (google/walleye/walleye:10/QP1A.190711.020/5800535:user/release-keys).
بيان المورّد من Android:
"هذه المشكلة مصنفة على أنها عالية الخطورة على Android وتتطلب بحد ذاتها تثبيت تطبيق ضار لإمكانية الاستغلال. أي نواقل أخرى، مثل عبر متصفح الويب، تتطلب الربط مع استغلال إضافي. لقد أبلغنا شركاء Android والتصحيح متاح على Android Common Kernel. أجهزة Pixel 3 و3a ليست عرضة للخطر بينما أجهزة Pixel 1 و2 ستتلقى تحديثات لهذه المشكلة كجزء من تحديث أكتوبر."