Versión de Cheese solo permisiva de SELinux, también conocida como CVE-2025-21479
Esta es, por ahora, una versión solo permisiva de SELinux del exploit Cheese, también conocido como CVE-2025-21479, que afectaba al adreno kgsl en muchos dispositivos, incluidos los dispositivos Samsung Snapdragon.
Parte del código se ha reciclado de los siguientes repositorios y me gustaría agradecer a zhuowei por poner en marcha originalmente la prueba de concepto y a sarabpal-dev por mantener un repositorio bien mantenido y activo
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
Decidí tomar este proyecto como un pequeño desafío y porque nunca me había adentrado en algo tan complejo antes, así que fue una buena experiencia de aprendizaje, aunque todavía no está terminado. Lo que originalmente quería hacer era ver si toda la cadena podía completarse desde un dominio verdaderamente no confiable directamente en el entorno de Termux. Hasta ahora he logrado alcanzar el modo permisivo de SELinux sin usar adb, he reducido el código a aproximadamente una cuarta parte de su tamaño original, es estable y normalmente tarda menos de un minuto de principio a fin, y lo he probado en mi Samsung SM-S901W S22 Snapdragon con bootloader bloqueado. Todavía no he profundizado en la primitiva de root y no estoy seguro de si eso podría hacerse sin adb, pero aun así voy a intentarlo. Espero que esto inspire a la gente a intentar hacer cosas que normalmente dicen que no se pueden hacer; tal vez alguien tenga una idea que funcione. Siéntete libre de abrir un issue, ya que estoy abierto a cualquier contribución útil.
TUTORIAL
Este exploit es realmente fácil y apenas hay que editar el código para que funcione en tu dispositivo. Todo lo que necesitas hacer es:
- clona el repositorio con git y haz cd a él
- obtén el boot.img de tu firmware exacto
- usa unpack_bootimg (ya está en Termux) para extraer tu kernel de él
- compila el binario extract-kallsyms.c y ejecútalo en tu kernel
- toma tu kallsyms.txt y colócalo directamente en la ruta desde la que vas a ejecutar el exploit
- compila con
cc -o gpu_sam gpu_sam.c -ldl
- dinámicamente recorrerá tu kallsyms.txt mientras se ejecuta para encontrar todos los offsets necesarios
- las únicas cosas que tendrás que cambiar según tu dispositivo son los siguientes valores para el escaneo de la base del kernel:
const uint64_t candidates[] = { 0xC0000000, 0xE0000000 }; y for (uint64_t addr = 0xa8000000; addr < 0xa8500000; addr += 0x8000) {
- si todo va bien, deberías tener un modo permisivo de SELinux estable desde un shell normal de Termux
NOTAS
Siempre existirá el riesgo de una falla de smmu o un pánico del kernel, pero esto funciona muy bien en mi teléfono con el kernel 5.10.168 y rara vez tengo un cuelgue. Puede que tengas que ejecutarlo un par de veces o incluso reiniciar para restablecer el estado de la GPU. Hice esto para que fuera lo más fácil de usar posible. El video de abajo es solo una demostración rápida; ya estaba en modo permisivo. Disfruta
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec