آسیبپذیری VPU در Pixel 10: دسترسی کامل به کرنل با ۵ خط کد
خلاصهٔ کاملتر
تیم Project Zero گوگل پیشتر یک اکسپلویتچین برای Pixel 9 منتشر کرده بود که نشون میداد چطور میشه از یک آسیبپذیری zero-click در کتابخونهی Dolby UDC (مربوط به CVE-2025-54957) شروع کرد و در نهایت به دسترسی root رسید. وقتی خواستن همین زنجیره رو برای Pixel 10 بنویسن، با یک تغییر مهم مواجه شدن: درایور BigWave که در مرحلهی privilege escalation استفاده میشد، روی این دستگاه وجود نداره.
به جاش، یک درایور جدید به اسم /dev/vpu پیدا کردن که برای ارتباط با تراشهی ویدئویی Chips&Media Wave677DV روی Tensor G5 استفاده میشه. این درایور برخلاف نسخههای استاندارد لینوکس، مستقیماً رجیسترهای سختافزاری تراشه (MMIO) رو در اختیار فضای کاربری میذاره — بدون اینکه از لایهی استاندارد V4L2 استفاده کنه.
مشکل اصلی در تابع vpu_mmap بود. این تابع وظیفه داشت فقط ناحیهی رجیستر VPU رو به فضای آدرس کاربر نگاشت بده، ولی هیچ محدودیتی روی اندازهی این نگاشت اعمال نمیکرد:
return remap_pfn_range(vm, vm->vm_start, pfn,
vm->vm_end - vm->vm_start, vm->vm_page_prot) ? -EAGAIN : 0;یعنی هر کسی میتونست با دادن یک اندازهی بزرگتر در mmap، حافظهی فیزیکی دلخواهی رو — از جمله کل تصویر کرنل — به فضای خودش نگاشت بده.
این باگ به دلیل یک ویژگی دیگهی Pixel هم خیلی سادهتر قابل اکسپلویت بود: کرنل همیشه در همان آدرس فیزیکی ثابتی قرار داره (KASLR عملاً بیاثر هست). پس مهاجم بدون نیاز به اسکن حافظه، دقیقاً میدونه کرنل کجاست و میتونه هر تابع دلخواهی رو بازنویسی کنه. دستیابی به arbitrary read-write روی کرنل با ۵ خط کد ممکن بود و نوشتن اکسپلویت کامل کمتر از یک روز طول کشید.
این باگ در ۲۴ نوامبر ۲۰۲۵ گزارش شد و تیم Android VRP اون رو با سطح High رتبهبندی کرد — پیشرفتی نسبت به باگ مشابه BigWave که ابتدا فقط Moderate ارزیابی شده بود. وصله ۷۱ روز بعد در بولتن امنیتی فوریه منتشر شد که به گفتهی محققان، این اولین باره که یک باگ درایور اندرویی در کمتر از ۹۰ روز پس از گزارش وصله شده.
Project Zero تأکید میکنه که با وجود پیشرفت در فرایند وصله، این باگ «بسیار سطحی» بود و با یک بررسی ساده قابل تشخیص بود — همون تیمی که BigWave رو نوشته، ۵ ماه بعد یک درایور دیگه با مشکل مشابه تحویل داده. درس اصلی اینه که تولیدکنندهها باید پیش از عرضهی محصول، کد درایورها رو به صورت فعال ممیزی امنیتی کنن.
نکات کلیدی:
- درایور VPU در Pixel 10 (Tensor G5) رجیسترهای سختافزاری رو مستقیماً به userspace اکسپوز میکرد
- تابع vpu_mmap هیچ محدودیتی روی اندازهی نگاشت حافظه اعمال نمیکرد
- ثابت بودن آدرس فیزیکی کرنل در Pixel، اکسپلویت رو بدون نیاز به bypass KASLR ممکن کرد
- دسترسی کامل به کرنل با ۵ خط کد و کمتر از یک روز کار قابل دستیابی بود
- وصله ۷۱ روز پس از گزارش منتشر شد — سریعترین پاسخ ثبتشده برای این نوع باگها در اندروید




