SELinux-Permissive-Only-version-of-Cheese-aka-CVE-2025-21479
Это версия эксплойта Cheese, также известного как CVE-2025-21479, только с SELinux permissive, который затронул adreno kgsl на многих устройствах, включая Samsung snapdragon устройства
Часть кода была переработана из следующих репозиториев, и я хочу поблагодарить zhuowei за то, что он первым запустил proof of concept, и sarabpal-dev за поддержание хорошо поддерживаемого и активного репозитория
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
Я решил взяться за этот проект как за небольшой вызов, и потому что я никогда не занимался ничем настолько сложным раньше, так что это был хороший опыт обучения, даже если он ещё не завершён. Что я изначально хотел сделать, так это проверить, можно ли выполнить всю цепочку из действительно недоверенного домена прямо в среде termux. Мне удалось добиться SELinux permissive без использования adb, я сократил код примерно до четверти от исходного размера, он стабилен и обычно занимает меньше минуты от начала до конца, и всё это на моём Samsung SM-S901W S22 Snapdragon с заблокированным загрузчиком. Я просто ещё не разобрался с root-примитивом и не уверен, можно ли это сделать без adb, но я всё равно попробую. Надеюсь, это вдохновит людей пробовать делать то, что обычно считают невозможным; возможно, у кого-то появится идея, которая сработает. Не стесняйтесь открывать issue, так как я открыт к любой полезной помощи.
УЧЕБНИК
Этот эксплойт очень простой, и вам почти не придётся редактировать код, чтобы запустить его на вашем устройстве. Всё, что вам нужно сделать, это:
- git clone репозитория и перейти в него
- достать boot.img из вашей точной прошивки
- использовать unpack_bootimg (он уже есть в termux), чтобы извлечь из него ваше ядро
- скомпилировать бинарник extract-kallsyms.c и запустить его на вашем ядре
- взять ваш kallsyms.txt и разместить его прямо в том пути, откуда вы будете запускать эксплойт
- скомпилировать с помощью
cc -o gpu_sam gpu_sam.c -ldl
- он будет динамически проходиться по вашему kallsyms.txt во время работы, чтобы найти все необходимые смещения
- единственное, что вам придётся изменить в зависимости от устройства, это следующие значения для сканирования базы ядра
const uint64_t candidates[] = { 0xC0000000, 0xE0000000 }; и for (uint64_t addr = 0xa8000000; addr < 0xa8500000; addr += 0x8000) {
- если всё пройдёт хорошо, у вас должен быть стабильный selinux permissive из обычной termux-оболочки
ПРИМЕЧАНИЯ
Всегда существует риск smmu fault или kernel panic, но на моём телефоне с ядром 5.10.168 это работает очень хорошо, и у меня редко бывают краши. Возможно, вам придётся запустить его пару раз или даже перезагрузиться, чтобы сбросить состояние GPU. Я сделал это максимально удобным для пользователя. Видео ниже — это просто быстрая демонстрация, у меня уже был permissive. Наслаждайтесь
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec