
CVE-2026-43499을 사용하여 Android에서 SELinux를 비활성화하세요
Write-1 전용 추출 버전으로, CVE-2026-43499를 위한 JoinChang/ghostlock-oneplus의 일부입니다. 부트로더가 잠긴, 지원되고 취약한 OnePlus 커널에서 SELinux enforcing을 비활성화하며, 그 외에는 아무것도 하지 않습니다: cred 덮어쓰기 없음, 루트 셸 없음, KernelSU 없음, 부트스트랩 없음, KASLR 누출 없음.
CVE-2026-43499은 futex PI requeue 경로에서 발생하는 Linux 커널 rtmutex use-after-free 취약점입니다. 프록시-락 롤백 동안 remove_waiter()는 waiter의 태스크 대신 current에 대해 동작하므로, waiter의 pi_blocked_on 포인터가 댕글링 상태로 남습니다. 이 문제는 Linux 6.12.86 및 이후 6.12 릴리스에서 업스트림으로 수정되었습니다.
단일 child-node PI 쓰기:
fake_right = base + 0x100 -> byte0 = 0 (enforcing), byte1 = 1
전체 익스플로잇의 힙 스프레이 + pselect PI 경로를 재사용하되 KASLR(kaslr_slide = 0)을 우회합니다. 최대 20회 재시도하며(시도 사이에 슬랩 드레이닝 수행), /sys/fs/selinux/enforce가 0으로 읽히면 종료합니다.
| 제거된 항목 | 이유 |
|---|---|
slide.c | KASLR SLIDE 누출 — 필요 없음 (slide = 0) |
pipe.c | 파이프 기반 물리 R/W — CFI/root 단계에서만 사용 |
root.c | cred 패치 / install_android_root — Write 2 전용 |
miniadb.c | 부트스트랩 미니 ADB 클라이언트 — 사용되지 않음 |
try_cfi_stage, install_child_root, repair/refresh/leak/restore 헬퍼 (fops.c) | CFI / KASLR 누출 / pipe-physrw 단계 — 커스텀 쓰기 경로에서는 도달하지 않음 |
perf_find_task, spawn_child, write_root_script, run_exploit, run_bootstrap (main.c) | Write 2 (cred → init_cred), 루트 셸, KSU, 부트스트랩 |
공유 프리미티브(util.c 힙 스프레이, fops.c pselect 경로, kernelsnitch, 오프셋 테이블)는 유지됩니다.
uname -r을 키로 하는 src/devices/offsets.h를 참조하세요:
6.12.38-android16-5-...-ab14275539-4k6.12.38-android16-5-...-ab14552068-4k6.12.23-android16-5-...-ab14541642-4k (오프셋만, 미검증)make # uses /opt/android-ndk (or $ANDROID_NDK_HOME)
Android API 35용 aarch64 PIE인 selinux_disabler를 생성합니다.
adb push selinux_disabler /data/local/tmp/a/e && chmod 755 /data/local/tmp/a/e
adb shell /data/local/tmp/a/e
검증:
adb shell cat /sys/fs/selinux/enforce # -> 0
boot.img만 필요합니다. 업스트림 프로젝트의 tools 디렉터리에 있는 추출 유틸리티를 사용한 다음, src/devices/<device>/offsets.h 아래에 항목을 추가하고 src/devices/offsets.h에서 #include하세요.
승인된 보안 연구 및 교육 목적으로만 사용할 수 있습니다.