SELinux-Permissive-Only-version-of-Cheese-aka-CVE-2025-21479
Questa è, per ora, una versione solo permissiva di SELinux dell'exploit Cheese, noto anche come CVE-2025-21479, che ha colpito il modulo adreno kgsl su molti dispositivi, inclusi i dispositivi Samsung Snapdragon
Parte del codice è stata riutilizzata dai seguenti repository e vorrei ringraziare zhuowei per aver originariamente avviato la proof of concept e sarabpal-dev per aver mantenuto un repository attivo e ben curato
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
Ho deciso di affrontare questo progetto come una sorta di sfida e perché non mi ero mai cimentato in qualcosa di così complesso prima, quindi è stata una buona esperienza di apprendimento anche se non è ancora finito. Quello che volevo fare inizialmente era vedere se l'intera catena potesse essere eseguita da un dominio completamente non attendibile direttamente nell'ambiente termux. Finora sono riuscito a ottenere SELinux permissivo senza usare adb, ho ridotto il codice a circa un quarto della dimensione originale, è stabile e di solito impiega meno di un minuto dall'inizio alla fine, e funziona sul mio Samsung SM-S901W S22 Snapdragon con bootloader bloccato. Non ho ancora approfondito la primitiva di root e non sono sicuro che possa essere fatta senza adb, ma ho comunque intenzione di provarci. Spero che questo ispiri le persone a provare a fare cose che di solito si dice non possano essere fatte; magari qualcuno avrà un'idea che funzionerà. Sentiti libero di aprire una issue, sono aperto a qualsiasi contributo utile.
TUTORIAL
Questo exploit è davvero semplice e non c'è quasi nessuna modifica al codice che dovresti fare per farlo girare sul tuo dispositivo. Tutto quello che devi fare è:
- esegui il git clone del repository e fai cd al suo interno
- prendi il boot.img dal tuo firmware esatto
- usa unpack_bootimg (è già presente in termux) per estrarre il tuo kernel
- compila il binario extract-kallsyms.c ed eseguilo sul tuo kernel
- prendi il tuo kallsyms.txt e posizionalo direttamente nel percorso da cui eseguirai l'exploit
- compila con
cc -o gpu_sam gpu_sam.c -ldl
- analizzerà dinamicamente il tuo kallsyms.txt durante l'esecuzione per trovare tutti gli offset necessari
- le uniche cose che dovrai modificare in base al tuo dispositivo sono i seguenti valori per la scansione della base del kernel
const uint64_t candidates[] = { 0xC0000000, 0xE0000000 }; e for (uint64_t addr = 0xa8000000; addr < 0xa8500000; addr += 0x8000) {
- se tutto va bene, dovresti ottenere un selinux permissivo stabile da una normale shell termux
NOTE
Ci sarà sempre il rischio di un fault smmu o di un kernel panic, ma sul mio telefono con kernel 5.10.168 funziona molto bene e raramente ottengo un crash. Potrebbe essere necessario eseguirlo un paio di volte o addirittura riavviare per resettare lo stato della GPU. L'ho reso il più user friendly possibile. Il video qui sotto è solo una demo veloce, ero già in modalità permissiva. Buon divertimento
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec