SELinux-Permissive-Only-version-of-Cheese-aka-CVE-2025-21479
Ceci est une version uniquement permissive SELinux, pour l'instant, de l'exploit Cheese également connu sous le nom de CVE-2025-21479, qui affectait le kgsl adreno sur de nombreux appareils, y compris les appareils Samsung Snapdragon.
Une partie du code a été recyclée à partir des dépôts suivants et je tiens à remercier zhuowei d'avoir initialement lancé la preuve de concept et sarabpal-dev pour avoir maintenu un dépôt bien entretenu et actif
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
J'ai décidé de me lancer dans ce projet comme un petit défi et parce que je ne m'étais jamais aventuré dans quelque chose d'aussi complexe auparavant ; ce fut donc une bonne expérience d'apprentissage même si ce n'est pas encore terminé. Ce que je voulais faire à l'origine, c'était voir si toute la chaîne pouvait être réalisée depuis un domaine vraiment non fiable directement dans l'environnement Termux. J'ai réussi pour l'instant à obtenir SELinux permissive sans utiliser adb, j'ai réduit le code à environ un quart de sa taille d'origine, c'est stable et cela prend généralement moins d'une minute du début à la fin, et cela fonctionne sur mon Samsung SM-S901W S22 Snapdragon avec le bootloader verrouillé. Je n'ai pas encore creusé la primitive root et je ne suis pas sûr qu'elle puisse être réalisée sans adb, mais je vais quand même essayer. J'espère que cela inspirera des gens à essayer de faire des choses que l'on dit généralement impossibles ; peut-être que quelqu'un aura une idée qui fonctionnera. N'hésitez pas à ouvrir une issue, je suis ouvert à toute contribution utile.
TUTORIEL
Cet exploit est vraiment simple et il n'y a pratiquement aucune modification du code à faire pour le faire fonctionner sur votre appareil. Tout ce que vous avez à faire est de :
- git clone le dépôt et cd dedans
- récupérer le boot.img depuis votre firmware exact
- utiliser unpack_bootimg (il est déjà dans Termux) pour en extraire votre noyau
- compiler le binaire extract-kallsyms.c et l'exécuter sur votre noyau
- prendre votre kallsyms.txt et le placer directement dans le chemin depuis lequel vous allez exécuter l'exploit
- compiler avec
cc -o gpu_sam gpu_sam.c -ldl
- il parcourra dynamiquement votre kallsyms.txt pendant son exécution pour trouver tous les offsets nécessaires
- les seules choses que vous devrez modifier selon votre appareil sont les valeurs suivantes pour le balayage de la base du noyau :
const uint64_t candidates[] = { 0xC0000000, 0xE0000000 }; et for (uint64_t addr = 0xa8000000; addr < 0xa8500000; addr += 0x8000) {
- si tout se passe bien, vous devriez obtenir un SELinux permissive stable depuis un shell Termux normal
REMARQUES
Il y aura toujours un risque de défaut SMMU ou de panique du noyau, mais cela fonctionne très bien sur mon téléphone avec le noyau 5.10.168 et j'obtiens rarement un crash. Vous devrez peut-être l'exécuter plusieurs fois, voire redémarrer pour réinitialiser l'état du GPU. J'ai fait en sorte que ce soit aussi convivial que possible. La vidéo ci-dessous n'est qu'une démo rapide ; j'étais déjà en mode permissive. Amusez-vous bien
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec