Pixel 10 0-클릭 체인: 드라이버 취약점에 대한 사례 연구
현대 스마트폰의 보안은 종종 고양이와 쥐의 게임처럼 느껴집니다. 패치를 통해 한 문을 닫으면 연구자들은 종종 또 다른 창이 열려 있음을 발견합니다. 바로 이것이 Google Project Zero의 최근 연구에서 일어났으며, 이들은 Pixel 10을 위한 0-클릭 익스플로잇 체인을 성공적으로 개발했습니다.
Pixel 9에서 사용된 이전 익스플로잇을 발전시키고 새로운 하드웨어 드라이버에서 중요한 결함을 발견함으로써, 팀은 원격 공격자가 0-클릭 상황에서 장치의 전체 루트 권한으로 이동할 수 있음을 보여주었습니다. 이 사례 연구는 Android 드라이버 생태계의 취약함과 하드웨어 가속 컴포넌트를 보호하는 데 있어 시스템적인 어려움을 명확히 상기시켜 줍니다.
첫 번째 연결: Dolby 익스플로잇 업데이트
루트 권한 획득 여정은 Dolby 디코더(CVE-2025-54957)의 기존 취약점에서 시작되었습니다. 이 취약점은 2026년 1월에 패치되었지만, Project Zero는 이전 Pixel 9 익스플로잇을 Pixel 10에 이식할 수 있는지 확인하고자 했습니다.
익스플로잇을 업데이트하는 것은 비교적 간단했으며, 주로 메모리 오프셋을 Pixel 10의 라이브러리 버전에 맞게 조정하는 것이 필요했습니다. 그러나 팀은 새로운 장애물에 직면했습니다: Pixel 10은 기존의 -fstack-protector 대신 RET PAC(Pointer Authentication Code)를 사용합니다. 이는 일반적으로 덮어쓰기 대상이 되는 __stack_chk_fail이 더 이상 존재하지 않음을 의미합니다. 이를 우회하기 위해 연구원들은 디코더 초기화 중 한 번만 호출되는 초기화 코드 dap_cpdp_init을 시스템을 불안정하게 만들지 않으면서 덮어쓸 수 있는 유효한 목표로 식별했습니다.
두 번째 연결: 유저랜드에서 커널로
Pixel 9 익스플로잇이 로컬 권한 상승(LPE)을 위해 "BigWave" 드라이버에 의존했지만, Pixel 10은 해당 드라이버를 포함하지 않습니다. 대신 연구원들은 비디오 디코딩 가속을 위해 Tensor G5 칩의 Chips&Media Wave677DV 실리콘과 상호 작용하는 /dev/vpu라는 새로운 드라이버를 확인했습니다.
VPU 드라이버를 감사하면서 Project Zero는 이를 "커널 취약점의 성배"라고 묘사한 취약점을 발견했습니다. 결함은 vpu_mmap 핸들러에 존재했습니다:
static int vpu_mmap(struct file *fp, struct vm_area_struct *vm)
{
unsigned long pfn;
struct vpu_core *core =
container_of(fp->f_inode->i_cdev, struct vpu_core, cdev);
vm_flags_set(vm, VM_IO | VM_DONTEXPAND | VM_DONTDUMP);
/* This is a CSRs mapping, use pgprot_device */
vm->vm_page_prot = pgprot_device(vm->vm_page_prot);
pfn = core->paddr >> PAGE_SHIFT;
return remap_pfn_range(vm, vm->vm_start, pfn, vm->vm_end-vm->vm_start, vm->vm_page_prot) ? -EAGAIN : 0;
}
결함의 메커니즘
vpu_mmap 함수는 VPU 하드웨어의 MMIO(메모리 매핑 I/O) 레지스터 영역을 유저랜드 가상 주소 공간에 매핑하도록 설계되었습니다. 그러나 구현에서는 매핑 크기를 실제 레지스터 영역 크기로 제한하지 않았습니다. mmap 시스템 콜에서 레지스터 영역보다 큰 크기를 지정하면, 호출자는 VPU 레지스터 영역을 시작으로 임의의 물리 메모리를 유저랜드에 매핑할 수 있습니다.
Pixel 장치의 Android 커널이 고정된 물리 주소에 위치해 있기 때문에, VPU 메모리 영역과 커널 사이의 오프셋은 일정합니다. 이를 통해 공격자는 커널 이미지를 포함할 만큼 충분히 큰 메모리 영역을 매핑하여 커널의 .text와 .data 영역에 임의의 읽기·쓰기 접근 권한을 얻을 수 있습니다.
Project Zero는 임의의 읽기·쓰기 접근을 달성하는 데 단 5줄의 코드만 필요했으며, 전체 익스플로잇을 개발하는 데 하루도 채 걸리지 않았다고 언급했습니다.
분류, 패치 및 시스템적 실패
Project Zero는 2025년 11월 24일에 버그를 보고했습니다. 긍정적인 변화로, Android의 Vulnerability Reward Program(VRP)은 이 문제를 High 심각도로 평가했으며, 71일 이내에 패치를 배포했습니다. 이는 유사한 드라이버 버그에 대한 이전 대응보다 훨씬 빠른 속도입니다.
향상된 분류 속도에도 불구하고, 연구는 시스템적인 문제를 강조합니다. VPU 드라이버는 결함이 있던 BigWave 드라이버를 만든 동일한 팀에 의해 개발되었습니다. BigWave에서 이전에 고프로파일 취약점이 있었음에도 불구하고, VPU 드라이버는 간단한 감사만으로도 즉시 눈에 띄는 "얕은" 취약점으로 출시되었습니다.
커뮤니티 관점 및 더 넓은 함의
이 익스플로잇의 공개는 보안 커뮤니티 내에서 AI의 역할과 하드웨어 드라이버 현황에 대한 활발한 논의를 촉발했습니다.
보안 도구로서의 AI
일부 연구자들은 최신 LLM이 이러한 취약점을 식별하는 데 놀라울 정도로 능숙해지고 있다고 언급했습니다. 한 댓글자는 vpu_mmap 함수가 포함된 프롬프트가 외부 웹 검색 없이도 AI 모델에 의해 취약점으로 정확히 식별되었다고 언급했으며, AI가 익스플로잇 발견을 가속화할지 버그 수정에 기여할지에 대한 질문을 제기했습니다.
BSP의 "블랙 박스"
Board Support Packages(BSP)에 대한 지속적인 우려가 있습니다. Pixel의 BSP는 비교적 개방적이지만, 많은 다른 Android 기기들은 독점적인 폐쇄형 드라이버를 사용합니다. 한 댓글자는 다음과 같이 말했습니다:
"다른 Android 기기... 혹은 일반적인 임베디드 기기의 BSP에 숨겨진 어두운 공포를 상상해 보세요. 솔직히 말해서, Google의 인증 프로세스에서는 드라이버와 관련된 모든 것이 Linux 커널로 업스트림되는 것이 요구되어야 합니다."
기능 vs. 보안의 트레이드오프
마지막으로, 연구는 사용자에게 제공되는 기능과 보안 사이의 긴장 관계를 다룹니다. 0-클릭 공격 표면이 증가하는 것은 종종 사용자가 메시지를 열기 전에도 AI 기반 기능(예: 메시지 요약)을 위해 미디어를 디코딩해야 할 필요성에 의해 촉진됩니다. 이는 사용자 경험을 향상시키기 위해 설계된 기능이 의도치 않게 원격 악용을 위한 새로운 경로를 열어주는 역설을 만들게 됩니다.