업데이트로 돌아가기
New releaseJul 30, 2026

CVE-2026-43499-aristotle-apk build-43

Futex-PI use-after-free 취약점을 이용한 CVE-2026-43499 Android 커널 익스플로잇으로, Xiaomi XIG04에서 ADB를 활성화하기 위해 임시 루트 권한을 획득합니다. 자동화된 페이로드 빌드와 원탭 활성화를 포함합니다.

공유

Aristotle ADB Enable

개발자 옵션에 접근할 수 없는 au/KDDI Xiaomi "aristotle"(XIG04, Android 12) 기기에서 CVE-2026-43499로 얻은 임시 루트를 사용하여 ADB를 켜는 최소한의 Android 앱입니다. KingRoot와 같은 범주의 기기 소유자 도구로, 자신의 휴대폰을 루팅하여 설정 하나를 변경합니다.

범위: 다음 펌웨어를 실행하는 본인의 XIG04 Xiaomi/XIG04_jp_kdi/XIG04:12/SP1A.210812.016/V14.0.3.0.TMFJPKD. 범용 또는 원격 익스플로잇이 아닙니다.


기능

버튼 하나, 작업 하나:

  1. 익스플로잇 페이로드(preload.so)를 APK에서 앱의 개인 filesDir로 스테이징하고 chmod 0700을 적용합니다.
  2. LD_PRELOAD가 해당 페이로드를 가리키는 단기 실행 /system/bin/true를 실행하여 커널 버그를 작동시킵니다. 페이로드의 ELF 생성자가 Futex-PI use-after-free를 트리거하여 임시 루트를 획득하고 su 클라이언트와 데몬을 자체 설치합니다.
  3. su -c id를 실행하고 uid=0을 확인하여 루트를 확인합니다.
  4. 루트로 ADB를 활성화합니다:
    • settings put global development_settings_enabled 1
    • settings put global adb_enabled 1
    • stop adbd; start adbd (setprop ctl.restart adbd로 대체)

모든 단계가 화면의 로그로 출력됩니다.

취약점

CVE-2026-43499 — Linux 커널 Futex-PI 경로(kernel/locking/rtmutex.c, remove_waiter())의 use-after-free 취약점입니다. aristotle의 5.10.136-android12 커널이 영향을 받습니다(CONFIG_FUTEX_PI=y, CONFIG_RT_MUTEXES=y). 이 익스플로잇은 데이터 전용 "direct-root"(cred 교체, SELinux enforcing 전환)를 사용하고 MTE 태그를 브루트포스하여 기기의 하드닝을 우회합니다. 익스플로잇 소스와 측정된 aristotle 오프셋은 이 저장소의 exploit/ git 서브모듈에 있습니다.


페이로드는 자동으로 빌드됩니다

preload.so커밋되지 않습니다. exploit/ 서브모듈에서 생성되어 빌드 시점에 APK에 포함됩니다:

  • exploit/ — git 서브모듈: CVE-2026-43499 aristotle 익스플로잇(preload.so 빌드).
  • Gradle 태스크 buildExploitSo(preBuild에 연결됨)는 익스플로잇의 make ... API=31을 실행한 다음, APK가 패키징되기 전에 결과 preload.soapp/src/main/assets/exploit/preload.so로 복사합니다.

따라서 Android NDK가 설치되어 있으면 일반적인 ./gradlew assembleDebug로 페이로드를 빌드하여 함께 배포합니다.

빌드

# 1. fetch the exploit submodule
git submodule update --init --recursive

# 2. install the Android NDK r29 (the exploit Makefile auto-detects it,
#    or export ANDROID_NDK_ROOT), plus JDK 17 and Android SDK platform 34

# 3. build — auto-builds preload.so (API=31) and embeds it
./gradlew assembleDebug          # -> app/build/outputs/apk/debug/app-debug.apk

NDK가 없거나 앱 셸만 필요한가요? 페이로드 빌드를 건너뛰세요(그러면 앱이 실행 시 "exploit payload NOT deployed"라고 보고하며 런타임에 아무것도 변경하지 않습니다):

./gradlew assembleDebug -PskipExploitBuild

래퍼 jar: gradle-wrapper.jar는 커밋되지 않습니다. gradle wrapper --gradle-version 8.2로 한 번 생성하거나 시스템 Gradle로 빌드하세요(CI는 시스템 Gradle을 사용하므로 래퍼 jar가 필요하지 않습니다).

CI / 릴리스

.github/workflows/build-release.yml(GitHub Actions)은 모든 push에서 APK를 빌드하고 app-debug.apk를 첨부하여 GitHub Release(태그 build-<run>)로 게시합니다. 워크플로는 exploit 서브모듈을 체크아웃하고 JDK 17 / Android SDK 34 / NDK r29를 설치한 다음 gradle assembleDebug를 실행하여 preload.so(API=31)를 빌드하고 포함합니다.

1회성 설정: 이 저장소와 익스플로잇 저장소를 동일한 GitHub 소유자 아래 형제 저장소로 푸시하여 서브모듈의 상대 URL이 올바르게 해석되도록 하세요. 익스플로잇 저장소가 비공개인 경우 repo 범위의 PAT를 시크릿 SUBMODULE_PAT으로 추가하고 워크플로의 token: 줄 주석을 해제하세요.

구조

.
├── settings.gradle / build.gradle / gradle.properties   Gradle wiring
├── gradlew(.bat) + gradle/wrapper/                       wrapper
├── exploit/                                              git submodule (builds preload.so)
└── app/
    ├── build.gradle          minSdk 31 / targetSdk 31 / compileSdk 34, arm64-v8a; buildExploitSo task
    └── src/main/
        ├── AndroidManifest.xml         single launcher Activity, no dangerous perms
        ├── java/.../MainActivity.kt    button + scrolling log
        ├── java/.../ExploitRunner.kt   stage → LD_PRELOAD → su -c "settings ..."
        ├── res/{layout,values}/        UI, strings, theme
        └── assets/exploit/             preload.so is embedded here at build time

실행

  1. git submodule update --init --recursive를 실행하고 NDK를 설치한 다음 ./gradlew assembleDebug를 실행합니다.
  2. XIG04에 설치하고 실행합니다. ADB를 활성화하려는 경우 기기 자체에서 APK를 설치(파일 관리자/브라우저 다운로드)하고 런처에서 엽니다.
  3. Enable ADB (tmp-root) 버튼을 누르고 로그를 확인합니다. 성공하면 adb_enabled is now: 1로 끝납니다.
  4. 평소처럼 PC에서 ADB로 연결합니다.

제한 사항 / 주의 사항

  • 단일 빌드. 오프셋은 위의 ROM에 고정되어 있습니다. 다른 빌드에는 페이로드를 다시 포팅해야 합니다.
  • tmp-root는 휘발성입니다. 재부팅하면 루트가 사라집니다. 글로벌 설정의 adb_enabled는 일반적으로 유지되며, 일단 활성화되면 adbd는 루트가 필요 없습니다.
  • SELinux / W^X. LD_PRELOAD를 통한 앱 비공개 파일 실행은 앱 도메인에 따라 거부될 수 있습니다. 익스플로잇 자체 전략이 이를 처리하며, 거부 사항은 숨기지 않고 로그에 표시됩니다.
  • 기기 소유자 전용. 이 도구는 본인이 소유한 하드웨어에서 ADB를 잠금 해제하기 위한 것입니다.

카테고리