Codex가 삼성 TV를 해킹했다
핵심 내용
브라우저 foothold에서 physmap primitive로 root까지 올렸다.
자세히 보기
Samsung TV의 browser foothold에서 시작해, 매칭되는 KantS2 소스와 라이브 디바이스를 함께 검증하며 root까지 올린 과정을 정리한다.
초기 조건은 다음과 같다.
- TV 안의 browser application context에서 이미 코드 실행이 가능했다.
- 별도 controller host가 ARM 바이너리 빌드, HTTP 호스팅,
tmux send-keys기반 셸 제어를 담당했다. - Samsung Tizen의 UEP 때문에 unsigned 바이너리는 디스크에서 직접 실행할 수 없어, memfd wrapper로 메모리에서 실행했다.
- 대상은 static ARMv7 바이너리를 요구했다.
탐색 목표는 단순한 PoC가 아니라, 소스상 취약점이 실제 디바이스에서도 존재하고 browser user context에서 reachable한지 끝까지 확인하는 것이었다. /proc/iomem 접근이 막히자, /proc/cmdline의 mem=400M@32M mem=256M@512M mem=192M@2048M 정보를 이용해 물리 메모리 구간을 재구성했다.
핵심은 /dev/ntksys였다.
- udev rule이
MODE="0666"로 설정돼 있어 unprivileged 접근이 가능했다. ST_SYS_MEM_INFO구조체의u32Start,u32Size를 user space가 직접 지정한다.SET_MEM_INFO는 슬롯 인덱스만 검사하고, 물리 주소 범위의 적절성은 검증하지 않는다.mmap경로에서는 선택된 슬롯의 PFN을 그대로vk_remap_pfn_range에 넘겨 물리 메모리를 매핑한다.
보조 primitive로는 /dev/ntkhdma가 유용했다.
KER_HDMA_IO_GET_BUFF_ADDR가 DMA 버퍼의 physical address를 user space에 그대로 반환했다.- 이 주소를
ntksys로 매핑해 읽기/쓰기가 실제로 되는지 검증할 수 있었다. - 확인 결과,
0x84840000같은 물리 주소에서 읽기와 쓰기가 모두 가능했다.
이후 공격은 kernel control-flow exploit이 아니라 data-only escalation으로 전개됐다. /proc/cmdline에서 얻은 메모리 구간을 스캔해 browser process의 cred 구조를 찾고, UID/GID 필드를 0(root)으로 패치한 뒤 /bin/sh를 실행했다.
최종 실행에서는 물리 메모리 범위를 순회하며 cred 패턴을 찾아 패치했고, 결과적으로 uid=0(root) 셸을 얻었다. 전체 세션은 AI가 현실적인 post-exploitation position에서 source audit, primitive 확인, PoC 작성, 원격 배포, 디버깅, 최종 권한 상승까지 이어갈 수 있음을 보여준다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.