Reddit

Full source: autonomous root chain for TCL Android TV via CVE-2022-22706 Mali GPU page-cache write — libc __cxa_atexit shellcode, SELinux bypass

CVE-2022-22706으로 TCL 50C721 특정 펌웨어를 루팅하는 도구 소스 공개

TCL 50C721의 특정 펌웨어에서 Mali GPU 취약점을 이용해 루트 권한을 얻는 도구와 소스가 공개됐습니다. 성공 기록은 단일 모델·펌웨어에 한정되며, 새로 재현한 결과나 APK 설치 프로그램은 포함되지 않았습니다.

에디터 노트

이 도구의 적용 범위는 TCL 50C721의 단일 펌웨어 조합으로 한정됩니다. 저장소도 새로 루팅을 재현하지 않았다고 밝히고 SoC와 드라이버 기록의 불일치도 적었습니다. 따라서 익스플로잇의 작동 경로와 대상 조건은 구체적으로 제시됐지만, 공개 시점에 같은 결과를 다시 확인했다는 근거까지 제공하지는 않습니다. 댓글 두 개 중 하나는 범용 루팅 도구가 아니라는 저장소의 제한 문구를 비꼬고, 다른 하나는 게시물 대부분이 LLM 생성물이라는 의혹을 제기합니다. 둘 다 이 코드의 출처나 작동 여부를 입증하는 근거는 아닙니다. 저장소가 밝힌 과거 성공 기록과 공개 당시의 검증 상태를 구분해 읽는 편이 정확합니다. 특히 APK 래퍼가 없고 재부팅 뒤 일부 설정만 남으므로, 자동 설치형 또는 지속 루팅 배포물로 소개하면 실제 공개물의 범위를 벗어납니다.

AI 요약

TCL 50C721 QLED TV의 BeyondTV6, 펌웨어 V8-R51MT02-LF1V903 빌드 AR10을 대상으로 CVE-2022-22706 기반 루팅 도구와 전체 소스가 공개됐습니다. 기록된 구성은 Android 11, 커널 4.14.198+, Realtek RTD1319, Mali-G31, 32비트 ARMv7이며 보안 패치 날짜는 2024-03-05입니다. 성공 결과는 이 조합 하나에만 기록돼 있습니다. 공개 과정에서 새 루팅 시험은 하지 않았고, SoC와 Mali 드라이버 버전도 기존 기록 사이에 불일치가 있다고 저장소는 밝힙니다.

익스플로잇 과정

auto_root.c는 비특권 앱 문맥에서 루트 권한을 얻도록 설계된 단일 실행 파일입니다. 첫 단계에서 Mali GPU 드라이버의 KBASE_IOCTL_MEM_IMPORT로 libc.so의 __cxa_atexit 페이지를 GPU 사용자 버퍼로 가져옵니다. mremap(MREMAP_FIXED)으로 파일 매핑을 교체한 뒤 페이지 캐시에 112바이트 Thumb-2 셸코드를 씁니다. 저장소 설명에 따르면 dm-verity가 보호하는 디스크 파일 자체는 수정하지 않습니다.

새 C++ 프로세스는 CRT 초기화 과정에서 __cxa_atexit()을 호출합니다. 이때 실행되는 셸코드는 audioserver 또는 rtkm_scene 같은 권한 도메인을 이용해 /dev/rtkmem으로 물리 페이지 0x1DE7000에 접근하고 selinux_state.enforcing = 0으로 설정합니다. SELinux가 Permissive 상태가 되면 도구는 /dev/rtkmem의 물리 메모리 읽기로 커널 task_struct 연결 목록을 훑습니다. comm[]으로 대상 프로세스를 찾은 뒤 init_cred의 권한을 복사해 UID를 0으로 바꾸고 전체 capability를 부여합니다. 이어 zygote의 BPF seccomp 필터를 우회하도록 TIF_SECCOMP를 지웁니다.

권한 획득 뒤에는 광고 차단용 hosts 파일을 바인드 마운트하고, 텔레메트리 IP로 향하는 iptables 규칙을 추가합니다. 불필요한 앱 28개를 비활성화하고 부팅 자동 시작 권한을 설정한 다음 셸코드를 비활성화하고 SELinux를 다시 Enforcing으로 설정합니다. 이 설정 중 페이지 캐시 패치, 바인드 마운트, iptables 규칙은 재부팅하면 사라지지만 앱 비활성화와 APP_AUTO_START는 유지된다고 설명합니다.

도구와 제한

저장소에는 자동화 실행 파일 외에도 같은 페이지 캐시 쓰기 기법을 두 단계로 나눈 root_cve22706.c, libc_rtkmem_patch2.c가 있습니다. scripts/root.sh는 ADB로 두 단계를 실행하고 루트 권한과 SELinux 상태를 확인합니다. scripts/post_root.sh는 APK, 앱 데이터, Wi-Fi 설정, 기기 설정과 패키지 목록을 백업하며 최근 백업 5개를 보관합니다. 빌드에는 Android NDK가 필요하고 미리 빌드한 실행 파일은 제공하지 않습니다. APK나 재현 가능한 APK 프로젝트도 없으므로 설치 후 자동 실행되는 배포판은 아닙니다. 저장소는 패치된 boot 또는 vbmeta 이미지를 플래시하지 말라고 경고하며, 과거 플래시 시도 두 차례가 부팅 루프를 일으켰다고 기록합니다.

Reddit 반응

  • @m477m — 이건 펌웨어 전용 연구와 도구이지, 모든 TCL 기기에 통하는 루팅 도구나 지원되는 설치 프로그램이 아닙니다. 🙄🙄🙄🙄🙄🙄🙄 이건 엉터리 문구에 대한 반응이지 햄스터나 파리채 이야기가 아닙니다.
  • @spilk — 이 서브레딧에 올라오는 글의 99% 정도는 LLM이 전부 생성했다고 봐도 됩니다.

원문: GitLab / 번역·요약: Trawling