SELinux-Permissive-Only-version-of-Cheese-aka-CVE-2025-21479
이것은 현재로서는 SELinux permissive 전용 버전으로, 삼성 스냅드래곤 기기를 포함한 많은 기기의 adreno kgsl에 영향을 미쳤던 CVE-2025-21479로도 알려진 Cheese 익스플로잇입니다.
다음 저장소의 일부 코드가 재사용되었습니다. 개념 증명을 처음 시작해 주신 zhuowei님과 유지 관리가 잘 되고 활발한 저장소를 유지해 주신 sarabpal-dev님께 감사드립니다.
https://github.com/zhuowei/cheese
https://github.com/sarabpal-dev/cheese-cake
저는 이 프로젝트를 약간의 도전으로 시작했습니다. 이렇게 복잡한 것을 다뤄본 적이 없었기 때문에 아직 완성되지 않았음에도 좋은 학습 경험이 되었습니다. 원래 하고 싶었던 것은 전체 체인이 진짜 신뢰할 수 없는 도메인에서 termux 환경 내에서 직접 수행될 수 있는지 확인하는 것이었습니다. 지금까지 adb를 사용하지 않고 SELinux permissive를 달성했고, 코드를 원래 크기의 약 1/4로 줄였으며, 안정적이고 시작부터 완료까지 보통 1분도 걸리지 않습니다. 부트로더가 잠긴 제 Samsung SM-S901W S22 Snapdragon에서 작동합니다. 아직 루트 프리미티브를 파고들지 않았고, adb 없이 가능할지 확신할 수 없지만 여전히 시도해 볼 생각입니다. 이것이 사람들이 보통 불가능하다고 말하는 일을 시도하도록 영감을 주기를 바랍니다. 누군가 효과가 있는 아이디어를 떠올릴지도 모릅니다. 도움이 되는 기여는 언제든 환영하니 이슈를 열어 주세요.
튜토리얼
이 익스플로잇은 정말 쉽고, 기기에서 실행하기 위해 코드를 거의 수정할 필요가 없습니다. 해야 할 일은 다음과 같습니다.
- 저장소를 git clone하고 해당 디렉터리로 cd하세요
- 정확히 일치하는 펌웨어에서 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) {
- 모든 것이 순조롭다면 일반 termux 셸에서 안정적인 selinux permissive를 얻을 수 있습니다
참고 사항
smmu 오류나 커널 패닉의 위험은 항상 존재하지만, 커널 5.10.168을 사용하는 제 폰에서는 매우 잘 작동하며 거의 충돌이 발생하지 않습니다. GPU 상태를 재설정하기 위해 몇 번 실행하거나 재부팅해야 할 수도 있습니다. 가능한 한 사용자 친화적으로 만들었습니다. 아래 비디오는 빠른 데모일 뿐이며, 저는 이미 permissive 상태였습니다. 즐기세요
https://github.com/user-attachments/assets/63d0dfa7-1390-41ce-96da-9c34d8a220ec